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