从自定义生成器写入文件时如何控制文本缩进

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
"