Ruby
Rails

Rails Generatorのtemplateで変数を利用する

やりたいこと

こんなtemplateがあったとします

<%= mtd %>
<%= @varialbe %>

この変数をgeneratorで定義したいのだけど、どうやればいいのかわからない

結果

Thor::Action#templateでErb.new().result(binding)を呼んでいました。
そのため、generatorのオブジェクトで定義をするだけで良さそうです

やり方

publicメソッドはジェネレータを実行時に呼び出されてしまうのでprivateにします

class HogehogeGenerator < Rails::Generators::NamedBase
  source_root File.expand_path('templates', __dir__)

  def add
    @variable = "変数だよ"
    template("src.erb", "dest")
  end

  private

  def mtd
    "methodだよ"
  end
end

結果

$ bundle exec rails g hogehoge hoge
Running via Spring preloader in process 49225
      create  dest
$ cat dest
methodだよ
変数だよ