class RailsAsyncMigrations::Migration::Run

Attributes

direction[R]
migration[R]
version[R]

Public Class Methods

new(direction, version) click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 7
def initialize(direction, version)
  @direction = direction
  @version = version
  @migration = migration_from version

  ensure_data_consistency
  require "#{Rails.root}/#{migration.filename}" if defined? Rails
end

Public Instance Methods

perform() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 16
def perform
  unlock_migration_methods
  delete_migration_state
  run_migration
  delete_migration_state
  lock_migration_methods
end

Private Instance Methods

class_name() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 46
def class_name
  migration.name.constantize
end
delete_migration_state() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 42
def delete_migration_state
  schema_migration&.delete
end
ensure_data_consistency() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 66
def ensure_data_consistency
  unless migration
    raise RailsAsyncMigrations::Error, "No migration from version `#{version}`"
  end
end
lock_migration_methods() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 60
def lock_migration_methods
  locked_methods.each do |method_name|
    Migration::Lock.new(class_name, method_name).perform
  end
end
locked_methods() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 50
def locked_methods
  RailsAsyncMigrations.config.locked_methods
end
migration_from(version) click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 26
def migration_from(version)
  Connection::ActiveRecord.new(direction).migration_from version
end
migrator_instance() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 34
def migrator_instance
  @migrator_instance ||= ::ActiveRecord::Migrator.new(direction.to_sym, [migration])
end
run_migration() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 30
def run_migration
  migrator_instance.migrate
end
schema_migration() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 38
def schema_migration
  @schema_migration ||= ActiveRecord::SchemaMigration.find_by(version: version)
end
unlock_migration_methods() click to toggle source
# File lib/rails_async_migrations/migration/run.rb, line 54
def unlock_migration_methods
  locked_methods.each do |method_name|
    Migration::Unlock.new(class_name, method_name).perform
  end
end