== Add a custom generator command == You may have noticed above that you can used one of the built-in rails migration commands `migration_template`. If your plugin needs to add and remove lines of text from existing files you will need to write your own generator methods. This section describes how you you can create your own commands to add and remove a line of text from 'routes.rb'. This example creates a very simple method that adds or removes a text file. To start, add the following test method: *vendor/plugins/yaffle/test/generator_test.rb* [source, ruby] ----------------------------------------------------------- def test_generates_definition Rails::Generator::Scripts::Generate.new.run(["yaffle", "bird"], :destination => fake_rails_root) definition = File.read(File.join(fake_rails_root, "definition.txt")) assert_match /Yaffle\:/, definition end ----------------------------------------------------------- Run `rake` to watch the test fail, then make the test pass add the following: *vendor/plugins/yaffle/generators/yaffle/templates/definition.txt* ----------------------------------------------------------- Yaffle: A bird ----------------------------------------------------------- *vendor/plugins/yaffle/lib/yaffle.rb* [source, ruby] ----------------------------------------------------------- require "yaffle/commands" ----------------------------------------------------------- *vendor/plugins/yaffle/lib/commands.rb* [source, ruby] ----------------------------------------------------------- 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 module Update def yaffle_definition file("definition.txt", "definition.txt") end end end end end 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 Rails::Generator::Commands::Update.send :include, Yaffle::Generator::Commands::Update ----------------------------------------------------------- Finally, call your new method in the manifest: *vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb* [source, ruby] ----------------------------------------------------------- class YaffleGenerator < Rails::Generator::NamedBase def manifest m.yaffle_definition end end -----------------------------------------------------------