【发布时间】:2021-07-29 08:11:25
【问题描述】:
编写我的第一个生成器。正在努力弄清楚如何控制缩进。
我找到了一些方法 here 和 here,但我并不清楚如何或是否可以应用这些方法。
生成器本身按预期工作,只是令人讨厌的是缩进很不稳定,我不得不忽略它或进入文件并修复它(这违背了自动生成文件内容的目的)。
不太确定哪些相关代码会有所帮助,这就是我生成附加代码的方式(一个基本示例)。
def add_site_wide
inject_into_file './app/controllers/application_controller.rb',
after: "class ApplicationController < ActionController::Base\n" do <<-'RUBY'
default_form_builder MdbFormBuilder
RUBY
end
end
可能很容易看出发生了什么,唯一的问题是 default_form_builder MdbFormBuilder 的行缩进了很多,我可以移动它并且它确实被正确放置,但是生成它的文件看起来很不稳定并且内容越多越难以阅读。
有没有办法对这个或其他东西应用一种方法,让我也可以传递多少空格来缩进文本?
这确实看起来应该是可行的,但我找不到任何关于如何实现这一点的信息。
【问题讨论】:
-
由于 HEREDOC 只是一个
String构造函数,您可以将indent添加到 HEREDOC 的声明中,请参阅String#indent该示例准确包含如何将其与 HEREDOC 字符串一起使用。话虽如此,如果您查看 Rails 生成器 model 例如,它们看起来有点“古怪”,这就是为什么它们使用模板将其与代码构造分开的原因。 -
您能否获取
class ApplicationController < ActionController::Base的缩进并检查之前是否有另一行(可能是一个模块)并在此基础上添加正确数量的制表符/空格?