記事の引越しから漏れていたのでサルベージ。
Generatorプラグインの作り方をメモしておきます。
まずはプラグインの雛形を作ります。
1 $ ./script/generate plugin foo
次にGeneratorプラグインに必要なディレクトリを用意。
1 $ mkdir -p vendor/plugins/foo/g enerators/ foo/templa tes
FooGenerat
vendor/plu
1 class FooGenerator < Rails::Gen erator::Na medBase 2 def initialize (runtime_ar gs, runtime_op tions = {}) 3 super 4 ~ 引数・オプションの解釈と初期化 ~ 5 end 6 7 def manifest 8 record do |m| 9 ~ マニフェスト ~ 10 end 11 end 12 end
マニフェストの書き方は
この辺
が参考になります。基底クラスは、Rails::Gen
続いて、マニフェストから参照するテンプレートファイルをtemplatesディレクトリの中に作ります。テンプレートファイルはERbテンプレートなので、Generatorクラスのコンテクストでrhtmlを書くような感じで記述できます。
以上で完了。Generatorを使うときは以下の通り。
1 $ ./script/generate foo
マニフェストの書式を以下にまとめておきます。
m.class_co
生成するクラス名の衝突を検出します。 Generatorで生成する予定のクラス名をすべて列記しておきましょう。
m.director
RAILS_ROOT
m.template
Generatorが生成するファイルを宣言します。relative_s
は、templatesディレクトリからの相対パスでERbテンプレートを指定します。relative_d
には生成されるファイルの場所をRAILS_ROOT
からの相対パスで記述します。
template_o
には、:assigns => {:foo => some_thing
のような感じで、ERbテンプレートから参照可能な値を設定する事ができます。
m.readme( *relative_s
helpドキュメントを指定します。指定したファイル群は単純に連続出力されます。
m.migratio
migrationファイルの生成を宣言します。migrationファイルは、ファイル名の先頭に005_のようなプレフィックスが付くので、専用のメソッドが用意されています。
relative_d
は、migrationファイルを配置するディレクトリを、RAILS_ROOT
からの相対パスで指定します。生成するファイル名は、template_o
で明示的に指定するか、さもなくばGeneratorの引数から自動的に決定されます。
そのほかの挙動はm.template
m.dependen
Generatorの依存関係を宣言します。これによってメタジェネレータを記述する事も可能です。素晴らしいですね。
m.file(relative_s
ファイルのコピーを宣言します。relative_s
、relative_d
はそれぞれRAILS_ROOT
からの相対パスです。
file_optio
には、:chmod
, :shebang
, :collision
を指定します。
詳細な挙動については
こちら
を参照のこと。
ブロック引数は、relative_s
で指定したファイルが何らかのテンプレートファイルであるときに、テンプレートを展開する処理を記述します。そうでない場合は省略可能です。
より詳細な情報が必要な場合は、
Rails::Gen
更新履歴
- 2006/08/10
マニフェストの書き方を最後の方にまとめておきました。 - 2007/11/22
記事の移行からもれていたのでサルベージ