instiki/vendor/rails/railties/doc/guides/source/creating_plugins/custom_generator.txt
Jacques Distler 7600aef48b Upgrade to Rails 2.2.0
As a side benefit, fix an (non-user-visible) bug in display_s5().
Also fixed a bug where removing orphaned pages did not expire cached summary pages.
2008-10-27 01:47:01 -05:00

70 lines
2.2 KiB
Plaintext

== Add a custom generator command ==
You may have noticed above that you can used one of the built-in rails migration commands `m.migration_template`. You can create your own commands for these, using the following steps:
1. Add the require and hook statements to init.rb.
2. Create the commands - creating 3 sets, Create, Destroy, List.
3. Add the method to your generator.
Working with the internals of generators is beyond the scope of this tutorial, but here is a basic example:
[source, ruby]
-----------------------------------------------------------
# File: vendor/plugins/yaffle/init.rb
require "commands"
Rails::Generator::Commands::Create.send :include, Yaffle::Generator::Commands::Create
Rails::Generator::Commands::Destroy.send :include, Yaffle::Generator::Commands::Destroy
Rails::Generator::Commands::List.send :include, Yaffle::Generator::Commands::List
-----------------------------------------------------------
[source, ruby]
-----------------------------------------------------------
# File: vendor/plugins/yaffle/lib/commands.rb
require 'rails_generator'
require 'rails_generator/commands'
module Yaffle #:nodoc:
module Generator #:nodoc:
module Commands #:nodoc:
module Create
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
module Destroy
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
module List
def yaffle_definition
file("definition.txt", "definition.txt")
end
end
end
end
end
-----------------------------------------------------------
-----------------------------------------------------------
# File: vendor/plugins/yaffle/generators/yaffle/templates/definition.txt
Yaffle is a bird
-----------------------------------------------------------
[source, ruby]
-----------------------------------------------------------
# File: vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb
class YaffleGenerator < Rails::Generator::NamedBase
def manifest
m.yaffle_definition
end
end
-----------------------------------------------------------
This example just uses the built-in "file" method, but you could do anything that Ruby allows.