class Rails::Generators::Actions::CreateMigration

:nodoc:

def existing_migration

def existing_migration
  @existing_migration ||= @base.class.migration_exists?(migration_dir, migration_file_name) ||
    File.exist?(@destination) && @destination
end

def identical?

def identical?
  exists? && File.binread(existing_migration) == render
end

def invoke!

def invoke!
  return super if pretend?
  invoked_file = super
  File.exist?(@destination) ? invoked_file : relative_existing_migration
end

def migration_dir

:nodoc:
def migration_dir
  File.dirname(@destination)
end

def migration_file_name

def migration_file_name
  @base.migration_file_name
end

def on_conflict_behavior # :doc:

:doc:
def on_conflict_behavior # :doc:
  options = base.options.merge(config)
  if identical?
    say_status :identical, :blue, relative_existing_migration
  elsif options[:force]
    say_status :remove, :green, relative_existing_migration
    say_status :create, :green
    unless pretend?
      ::FileUtils.rm_rf(existing_migration)
      yield
    end
  elsif options[:skip]
    say_status :skip, :yellow
  else
    say_status :conflict, :red
    raise Error, "Another migration is already named #{migration_file_name}: " \
      "#{existing_migration}. Use --force to replace this migration " \
      "or --skip to ignore conflicted file."
  end
end

def relative_existing_migration

def relative_existing_migration
  base.relative_to_original_destination_root(existing_migration)
end

def revoke!

def revoke!
  say_destination = exists? ? relative_existing_migration : relative_destination
  say_status :remove, :red, say_destination
  return unless exists?
  ::FileUtils.rm_rf(existing_migration) unless pretend?
  existing_migration
end

def say_status(status, color, message = relative_destination) # :doc:

:doc:
def say_status(status, color, message = relative_destination) # :doc:
  base.shell.say_status(status, message, color) if config[:verbose]
end