Commit 43cbf829 by Jon Yurek

Moved generators to lib/generators which is picked up by rails3

parent 08f837f5
Usage:
script/generate paperclip Class attachment1 (attachment2 ...)
This will create a migration that will add the proper columns to your class's table.
\ No newline at end of file
class PaperclipGenerator < Rails::Generator::NamedBase
attr_accessor :attachments, :migration_name
def initialize(args, options = {})
super
@class_name, @attachments = args[0], args[1..-1]
end
def manifest
file_name = generate_file_name
@migration_name = file_name.camelize
record do |m|
m.migration_template "paperclip_migration.rb.erb",
File.join('db', 'migrate'),
:migration_file_name => file_name
end
end
private
def generate_file_name
names = attachments.map{|a| a.underscore }
names = names[0..-2] + ["and", names[-1]] if names.length > 1
"add_attachments_#{names.join("_")}_to_#{@class_name.underscore}"
end
end
class <%= migration_name %> < ActiveRecord::Migration
def self.up
<% attachments.each do |attachment| -%>
add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_name, :string
add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_content_type, :string
add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_size, :integer
add_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_updated_at, :datetime
<% end -%>
end
def self.down
<% attachments.each do |attachment| -%>
remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_name
remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_content_type
remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_file_size
remove_column :<%= class_name.underscore.camelize.tableize %>, :<%= attachment %>_updated_at
<% end -%>
end
end
Description:
Explain the generator
Example:
rails generate paperclip Thing
This will create:
what/will/it/create
class PaperclipGenerator < Rails::Generators::Base
include Rails::Generators::Migration
desc "Create a migration to add paperclip-specific fields to your model."
argument :attachment_class, :required => true, :type => :string, :desc => "The class to migrate.",
:banner => "ClassName"
argument :attachment_names, :required => true, :type => :array, :desc => "The names of the attachment(s) to add.",
:banner => "attachment_one attachment_two attachment_three ..."
def self.source_root
@source_root ||= File.expand_path('../templates', __FILE__)
end
def generate_migration
migration_template "paperclip_migration.rb.erb", "db/migrate/#{migration_file_name}"
end
protected
def migration_name
"add_attachment_#{attachment_names.join("_")}_to_#{attachment_class.underscore}"
end
def migration_file_name
"#{migration_name}.rb"
end
def migration_class_name
migration_name.camelize
end
def self.next_migration_number(dirname) #:nodoc:
Time.now.strftime("%Y%m%d%H%M%S")
end
end
class <%= migration_class_name %> < ActiveRecord::Migration
def self.up
<% attachment_names.each do |attachment| -%>
add_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_file_name, :string
add_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_content_type, :string
add_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_file_size, :integer
add_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_updated_at, :datetime
<% end -%>
end
def self.down
<% attachment_names.each do |attachment| -%>
remove_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_file_name
remove_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_content_type
remove_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_file_size
remove_column :<%= attachment_class.underscore.camelize.tableize %>, :<%= attachment %>_updated_at
<% end -%>
end
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment