class ActiveRecord::Generators::MigrationGenerator
:nodoc:
:nodoc:
def attributes_with_index
def attributes_with_index attributes.select { |a| !a.reference? && a.has_index? } end
def create_migration_file
def create_migration_file set_local_assigns! validate_file_name! migration_template @migration_template, "db/migrate/#{file_name}.rb" end
def index_name_for(attribute)
def index_name_for(attribute) if attribute.foreign_key? attribute.name else attribute.name.singularize.foreign_key end.to_sym end
def set_index_names
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 set_local_assigns!
def set_local_assigns! @migration_template = "migration.rb" 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 when /^create_(.+)/ @table_name = $1.pluralize @migration_template = "create_table_migration.rb" end end
def validate_file_name!
def validate_file_name! unless file_name =~ /^[_a-z0-9]+$/ raise IllegalMigrationNameError.new(file_name) end end