从自定义生成器写入文件时如何控制文本缩进
How to control text indentation when writing to file from custom generator
编写我的第一个生成器。努力弄清楚如何控制缩进。
我找到了一些方法 here and 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
缩进了很多,我可以移动它并且它确实放置正确,但是随后生成的文件它看起来不稳定,内容越多越难以阅读。
有没有办法将方法应用到这个或其他东西上,让我也可以传递多少空格来缩进文本?
这看起来确实是可行的,但我找不到任何关于如何实现它的信息。
使用 <<-
将保留字符串上的空格。
您可以使用 <<
,但它要求您在没有任何缩进的情况下放置字符串结束标记。
为了保持美观,String
class 提供了满足您需要的方法,它是 String#strip_heredoc。这将在每一行缩进。
<<-EOS
i
have
indentation
EOS
将导致
"
i
have
indentation
"
使用
<<-EOS.strip_heredoc
i
have
no
indentation
EOS
将导致
"
i
have
no
indentation
"
您可以使用@engineersmnky sugestion 根据需要添加缩进
<<-EOS.strip_heredoc.indent(2)
i
have
two
indentations
EOS
将导致
"
i
have
two
indentations
"
编写我的第一个生成器。努力弄清楚如何控制缩进。
我找到了一些方法 here and 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
缩进了很多,我可以移动它并且它确实放置正确,但是随后生成的文件它看起来不稳定,内容越多越难以阅读。
有没有办法将方法应用到这个或其他东西上,让我也可以传递多少空格来缩进文本?
这看起来确实是可行的,但我找不到任何关于如何实现它的信息。
使用 <<-
将保留字符串上的空格。
您可以使用 <<
,但它要求您在没有任何缩进的情况下放置字符串结束标记。
为了保持美观,String
class 提供了满足您需要的方法,它是 String#strip_heredoc。这将在每一行缩进。
<<-EOS
i
have
indentation
EOS
将导致
"
i
have
indentation
"
使用
<<-EOS.strip_heredoc
i
have
no
indentation
EOS
将导致
"
i
have
no
indentation
"
您可以使用@engineersmnky sugestion 根据需要添加缩进
<<-EOS.strip_heredoc.indent(2)
i
have
two
indentations
EOS
将导致
"
i
have
two
indentations
"