« ロリポップのショッピングカート「Color Me Shop! mini 」の注文メールをCSVファイルに変換するD2のプロジェクトファイルを公開しました。 | メイン | Dir.glob()を使うときは、パスを絶対パスに変換してから »

Ruby on RailsのGeneratorの作り方

Ruby on RailsのGeneratorの作り方。

script/generateでプラグインの雛形を作成する。

ruby script/generate plugin sample

Rails::Generator::NamedBaseを継承したSampleGeneratorクラスを作成する。

Rails::Generator::NamedBaseは、Rails::Generator::Baseを継承し、先頭の引数にクラス名を受け取る。

vendor/plugins/sample/generators/sample/sample_generator.rb

class SampleGenerator < Rails::Generator::NamedBase

次に、generatorに渡された引数を解釈する処理。

def initialize(runtime_args, runtime_options = {})
  super #ここでクラス名が解釈される
  #ここからは必要な引数やオプションを解釈する処理を自分で書く
end

Rails::Generator::NamedBase#initializeで引数が解釈され、 先頭の引数であるクラス名は、インスタンス変数に格納される。 2番目以降の引数は@argsに格納される。

引数であるクラス名が「HogeHoge::Foo::Bar」と「hoge_hoge/foo/bar」のときの、インスタンス変数の値。

  • @name 先頭の引数であるそのままのクラス名("HogeHoge::Foo::Bar","hoge_hoge/foo/bar")
  • @class_path Railsの命名規則に合わせたモジュール名の配列(["hoge_hoge", "foo"])
  • @file_path ファイルのパス("hoge_hoge/foo/bar")
  • @class_nesting モジュール名("HogeHoge::Foo")
  • @class_nesting_depth モジュール数(2)
  • @class_name_without_nesting 命名規則に従ったクラス名("Bar")
  • @singular_name 命名規則に従ったファイル名("bar")
  • @plural_name @singular_nameの複数形("bars")
  • @table_name モデルのテーブル名(hoge_hoge/foo_bars)
  • @class_name クラス名("HogeHoge::Foo::Bar")
  • @file_name @singular_nameの別名
  • @actions @argsの別名

manifest()メソッドに、やりたい処理を書く。

def manifest
  record do |m|
    #ここにgeneratorでやりたい処理を書く
  end
end

manifestの書き方は、「Generatorプラグインの作り方」の説明が詳しい。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/760

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年06月10日 22:58に投稿されたエントリーのページです。

ひとつ前の投稿は「ロリポップのショッピングカート「Color Me Shop! mini 」の注文メールをCSVファイルに変換するD2のプロジェクトファイルを公開しました。」です。

次の投稿は「Dir.glob()を使うときは、パスを絶対パスに変換してから」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35