class LolDba::Migration

Attributes

full_name[R]
writer[R]

Public Class Methods

new(migration_file) click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 5
def initialize(migration_file)
  @full_name = File.basename(migration_file, '.rb')
  @writer = LolDba::Writer.new("#{@full_name}.sql")
  require Rails.root.join(migration_file)
end

Public Instance Methods

connection() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 41
def connection
  ActiveRecord::Base.connection
end
down() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 34
def down
  generate_instead_of_executing do
    migration_class.migrate(:down)
    connection.execute("DELETE FROM schema_migrations WHERE version = #{number}")
  end
end
generate_instead_of_executing() { || ... } click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 45
def generate_instead_of_executing
  migration_mocker = LolDba::MigrationMocker.new(writer)

  migration_mocker.redefine_migration_methods
  yield
  migration_mocker.reset_methods
end
migration_class() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 23
def migration_class
  name.camelize.split('.')[0].constantize
end
name() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 15
def name
  /^(\d+)_(.*)$/.match(full_name)[2]
end
number() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 11
def number
  /^(\d+)_(.*)$/.match(full_name)[1]
end
to_s() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 19
def to_s
  full_name
end
up() click to toggle source
# File lib/lol_dba/sql_migrations/migration.rb, line 27
def up
  generate_instead_of_executing do
    migration_class.migrate(:up)
    connection.execute("INSERT INTO schema_migrations (version) VALUES (#{number})")
  end
end