【问题标题】:Thor - inject into file at endThor - 最后注入文件
【发布时间】:2013-11-07 12:21:11
【问题描述】:

我正在开发一个 Rails 引擎,我正在尝试编写一个生成器来放置这条线

do_stuff (foo)

作为config/routes.rb 中的最后一条语句,不会破坏文件语法。

具体来说,如果我的config/routes.rb 目前看起来像这样

Rails.application.routes.draw do
    blah
    more blah
end

运行生成器后,我希望config/routes.rb 看起来像这样

Rails.application.routes.draw do
    blah
    more blah
    do_stuff (foo) # injected line
end

我查看了 ActiveAdmin does 的内容,但无法创建一揽子最后一行规则。非常感谢任何帮助。

【问题讨论】:

    标签: ruby ruby-on-rails-4 thor


    【解决方案1】:

    我没有对此进行测试,但我认为根据您在 ActiveAdmin 生成器中链接到的内容,它可能会像这样工作:

    inject_into_file "config/routes.rb", "  do_stuff(foo)\n", :before => /^end/
    

    这应该将您的代码插入到从行首开始的end 标记之前。但这仅适用于格式正确的路由文件....

    【讨论】:

    • 我想到了。但我想知道托尔是否可以更聪明。之前的问题是它会在第一个 end 之前注入该行,这可能是一个块。
    • thor 必须了解代码树才能执行您的想法。这不是一件小事,你可以阅读关于 ruby​​ AST 和诸如 ripper 之类的东西,它是 STDLIB 的一部分。
    • 我使用的正则表达式不会将其插入任何end。它会寻找没有缩进的那个。在正确缩进/格式化的文件中,这应该像一个魅力。
    • 太棒了。我想我可以接受这个假设。谢谢。我不认为我会走 AST 的路线,对于我想要实现的目标来说似乎太多了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多