環境
- Rails 6.0.0
- ruby 2.6.4
はじめに
プライベートで作っていたやつで、generatorでファイルを作る時に、ファイルの中身とかファイル名を好きに変えたいなぁと思っていて、そういえば、deviseがそんな感じのことをやっていたのでコード見てみたら、該当の処理がそのまま使えそうだったのでやってみた
ref
generator作る
rails g generator sample_template
クラス名などを変更したいテンプレートを作る
# lib/generators/sample/templates/hoge.rb
class <%= @hogehoge %>Controller
def hoge; end
end
generatorクラスに変更するような処理を入れる
# lib/generators/sample/sample_template_generator.rb
class SampleTemplateGenerator < Rails::Generators::NamedBase
source_root File.expand_path('templates', __dir__)
def set_instances
@hogehoge = name&.classify
end
def generate_file
template "app/controllers/#{@hogehoge}_controller.rb",
"#{@hogehoge}_controller.rb"
end
end
実行する
うまく app/controllers/change/change_controller.rb
に生成され、中身のクラス名が ChangeController
に変わればOK
rails g sample_template change
注意点
なお、今回雑にsuperclassを NamedBase
にして 引数を name
で取得してみてるが、現場だとこのようなことをするとお叱りを受ける可能性が高い。というのも、deviseでは、Baseを継承して、引数にふさわしい命名を付けてUSAGEも正確にしているためだ。
なので、現場でこのコードを書くとPRは通らないので、参考程度のメモ書きだと思って下さい。