Thor - 最后注入文件

Sri*_*lan 6 ruby thor ruby-on-rails-4

我正在研究一个rails引擎,我正在尝试编写一个可以放置这一行的生成器

do_stuff (foo)
Run Code Online (Sandbox Code Playgroud)

作为最后一个语句config/routes.rb,不破坏文件语法.

具体来说,如果我现在config/routes.rb看起来像这样

Rails.application.routes.draw do
    blah
    more blah
end
Run Code Online (Sandbox Code Playgroud)

运行发电机后,我希望config/routes.rb看起来像这样

Rails.application.routes.draw do
    blah
    more blah
    do_stuff (foo) # injected line
end
Run Code Online (Sandbox Code Playgroud)

我查看了ActiveAdmin的功能,但无法创建一条毯子最后一行规则.任何帮助是极大的赞赏.

pho*_*oet 12

我没有测试出来,但我认为你在ActiveAdmin生成器中链接到它可能会像这样工作:

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

这应该end在一行开头的令牌之前插入你的代码.这仅适用于格式正确的路由文件....

  • Thor必须知道代码树才能做你正在考虑的事情.这不是一件小事,你可以阅读ruby AST和像ripper这样的东西,这是STDLIB的一部分. (2认同)
  • 我使用的正则表达式不会将其插入任何`end`.它将寻找没有缩进的那个.在正确缩进/格式化的文件中,这应该像魅力一样. (2认同)