Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

56 lines (46 sloc) 1.446 kb
require 'rails/generators/active_record'
module ActiveRecord
module Generators
class MigrationGenerator < Base
argument :attributes, :type => :array, :default => [], :banner => "field[:type][:index] field[:type][:index]"
def create_migration_file
set_local_assigns!
validate_file_name!
migration_template "migration.rb", "db/migrate/#{file_name}.rb"
end
protected
attr_reader :migration_action, :join_tables
def set_local_assigns!
case file_name
when /^(add|remove)_.*_(?:to|from)_(.*)/
@migration_action = $1
@table_name = $2.pluralize
when /join_table/
if attributes.length == 2
@migration_action = 'join'
@join_tables = attributes.map(&:plural_name)
set_index_names
end
end
end
def set_index_names
attributes.each_with_index do |attr, i|
attr.index_name = [attr, attributes[i - 1]].map{ |a| index_name_for(a) }
end
end
def index_name_for(attribute)
if attribute.foreign_key?
attribute.name
else
attribute.name.singularize.foreign_key
end.to_sym
end
private
def validate_file_name!
unless file_name =~ /^[_a-z0-9]+$/
raise IllegalMigrationNameError.new(file_name)
end
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.