script/generatorで使える生成スクリプトってどうやって作るんかな〜と思い、RSpecのソースを眺めながら試してみたら、意外と簡単にできた。てきとーなんで、色々分かってないけど、↓な感じ。
plugin用のディレクトリを作成し、そこに取り敢えずinit.rbとgeneratorsディレクトリを作成。
$ mkdir vendor/plugin/my_gen_test $ touch vendor/plugin/my_gen_test/init.rb $ mkdir vendor/plugin/my_gen_test/generators
init.rbには特に書くことが無いので、放置。んで、my_genという生成スクリプトを作ってみる。
$ mkdir vendor/plugin/my_gen_test/generators/my_gen $ vim vendor/plugin/my_gen_test/generators/my_gen/my_gen_generator.rb
my_gen_generator.rbを編集。
require 'rbconfig' class MyGenGenerator < Rails::Generator::Base def initialize(runtime_args, runtime_options = {}) super end def manifest record do |m| m.directory 'foo' # fooディレクトリの作成 m.file 'bar.txt', 'foo/bar.txt' # my_gen配下のtemplates/bar.txtをfoo/bar.txtにコピー end end end
で、テンプレートファイルを作っておく。
$ mkdir vendor/plugin/my_gen_test/generators/my_gen/templates $ vim vendor/plugin/my_gen_test/generators/my_gen/templates/bar.txt
bar.txtの中身はてきとー。以上。
後は実行してみる。
$ ruby script/generate my_gen create foo create foo/bar.txt $ ls README Rakefile app components config db doc foo lib log public script test tmp vendor $ ls foo bar.txt
でけた。ちなみにこのままでdestroyもできるらしい。
$ ruby script/destroy my_gen rm foo/bar.txt rmdir foo $ ls README Rakefile app components config db doc lib log public script test tmp vendor
素晴らしい。もうちっと色々調べて、実戦投入してみたい。
てか、自前plugin作ってgeneratorsってディレクトリにゴリゴリ作れば勝手に読みにいってくれるって、なんて素晴らしい。Defaultルールが秀逸すぎる。Convention over Configurationバンザイ。