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.
90 lines
2.8 KiB
Plaintext
90 lines
2.8 KiB
Plaintext
== Create a migration generator ==
|
|
|
|
When you created the plugin above, you specified the --with-generator option, so you already have the generator stubs in your plugin.
|
|
|
|
We'll be relying on the built-in rails generate template for this tutorial. Going into the details of generators is beyond the scope of this tutorial.
|
|
|
|
Type:
|
|
|
|
script/generate
|
|
|
|
You should see the line:
|
|
|
|
Plugins (vendor/plugins): yaffle
|
|
|
|
When you run `script/generate yaffle` you should see the contents of your USAGE file. For this plugin, the USAGE file looks like this:
|
|
|
|
------------------------------------------------------------------
|
|
Description:
|
|
Creates a migration that adds yaffle squawk fields to the given model
|
|
|
|
Example:
|
|
./script/generate yaffle hickwall
|
|
|
|
This will create:
|
|
db/migrate/TIMESTAMP_add_yaffle_fields_to_hickwall
|
|
------------------------------------------------------------------
|
|
|
|
Now you can add code to your generator:
|
|
|
|
[source, ruby]
|
|
------------------------------------------------------------------
|
|
# File: vendor/plugins/yaffle/generators/yaffle/yaffle_generator.rb
|
|
|
|
class YaffleGenerator < Rails::Generator::NamedBase
|
|
def manifest
|
|
record do |m|
|
|
m.migration_template 'migration:migration.rb', "db/migrate", {:assigns => yaffle_local_assigns,
|
|
:migration_file_name => "add_yaffle_fields_to_#{custom_file_name}"
|
|
}
|
|
end
|
|
end
|
|
|
|
private
|
|
def custom_file_name
|
|
custom_name = class_name.underscore.downcase
|
|
custom_name = custom_name.pluralize if ActiveRecord::Base.pluralize_table_names
|
|
end
|
|
|
|
def yaffle_local_assigns
|
|
returning(assigns = {}) do
|
|
assigns[:migration_action] = "add"
|
|
assigns[:class_name] = "add_yaffle_fields_to_#{custom_file_name}"
|
|
assigns[:table_name] = custom_file_name
|
|
assigns[:attributes] = [Rails::Generator::GeneratedAttribute.new("last_squawk", "string")]
|
|
assigns[:attributes] << Rails::Generator::GeneratedAttribute.new("last_squawked_at", "datetime")
|
|
end
|
|
end
|
|
end
|
|
------------------------------------------------------------------
|
|
|
|
Note that you need to be aware of whether or not table names are pluralized.
|
|
|
|
This does a few things:
|
|
|
|
* Reuses the built in rails `migration_template` method.
|
|
* Reuses the built-in rails migration template.
|
|
|
|
When you run the generator like
|
|
|
|
script/generate yaffle bird
|
|
|
|
You will see a new file:
|
|
|
|
[source, ruby]
|
|
------------------------------------------------------------------
|
|
# File: db/migrate/20080529225649_add_yaffle_fields_to_birds.rb
|
|
|
|
class AddYaffleFieldsToBirds < ActiveRecord::Migration
|
|
def self.up
|
|
add_column :birds, :last_squawk, :string
|
|
add_column :birds, :last_squawked_at, :datetime
|
|
end
|
|
|
|
def self.down
|
|
remove_column :birds, :last_squawked_at
|
|
remove_column :birds, :last_squawk
|
|
end
|
|
end
|
|
------------------------------------------------------------------
|