merbでGeneratorプラグインを作る方法を紹介します。
merbのgeneratorの仕組みは、 templater という汎用的なGeneratorフレームワークを使って作られています。 なので、基本的にはtemplaterを使ったGeneratorの作り方という事になります。
まずは、Generatorプラグインのひな形を生成します。
1 % merb-gen plugin hello
Gemの形で提供されるものであれば、merb-plugi
さて、続いて、GEM_ROOTにGenerators
1 scope 'merb-gen' do 2 dir = File.join(File.dirname(__FILE__), 'lib', 'generators/') 3 Merb.add_genera tors dir + 'hello_gene rator' 4 end
続いて、GEM_ROOT/l
1 lib 2 `-- generators3 |-- hello_gene rator.rb 4 `-- templates 5 `-- hello 6 |-- app 7 | `-- app以下のファイル群 8 `-- spec 9 `-- spec以下のファイル群
hello_gene
以下はmerb-maile
1 module Merb::Generators2 class MailerGene rator < Namespaced Generator 3 4 def self.sourc e_root 5 File.dirname(__FILE__) / 'templates' / 'mailer' 6 end 7 8 desc <<-DESC 9 Generates a mailer 10 DESC 11 12 option :testing_fr amework, :desc => 'Testing framework to use (one of: rspec, test_unit)' 13 14 first_argu ment :name, :required => true, :desc => "mailer name" 15 16 template :mailer do |t| 17 t.source = 'app/mailer s/%file_na me%_mailer .rb' 18 t.destinatio n = File.join("app/mailer s", base_path, "#{file_name}_mailer.rb ") 19 end 20 21 template :notify_on_ event do |t| 22 t.source = 'app/mailer s/views/%f ile_name%_ mailer/not ify_on_eve nt.text.er b' 23 t.destinatio n = File.join("app/mailer s/views", base_path, "#{file_name}_mailer/no tify_on_ev ent.text.e rb") 24 end 25 26 template :controller _spec, :testing_fr amework => :rspec do |t| 27 t.source = 'spec/maile rs/%file_n ame%_maile r_spec.rb' 28 t.destinatio n = File.join("spec/maile rs", base_path, "#{file_name}_mailer_sp ec.rb") 29 end 30 31 end 32 33 add :mailer, MailerGene rator 34 end
あとは、GemをインストールすればOK.
posted by
genki
on Thu 5 Feb 2009
at 05:40