class LolDba::MigrationMocker

Public Class Methods

new(writer) click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 3
def initialize(writer)
  @writer = writer
end

Private Class Methods

connection() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 27
def self.connection
  ActiveRecord::Base.connection
end

Public Instance Methods

redefine_migration_methods() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 7
def redefine_migration_methods
  save_original_methods
  redefine_metadata_methods
  redefine_execute_methods(:execute)
  # needed for activerecord-sqlserver-adapter
  redefine_execute_methods(:do_execute)
end
reset_methods() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 15
def reset_methods
  methods_to_modify.each do |method_name|
    begin
      connection_class.send(:alias_method, method_name, "orig_#{method_name}".to_sym)
    rescue StandardError
      nil
    end
  end
end

Private Instance Methods

methods_to_modify() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 35
def methods_to_modify
  %i[execute do_execute rename_column change_column column_for tables indexes select_all] & self.class.connection.methods
end
redefine_connection_method(method, &block) click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 31
def redefine_connection_method(method, &block)
  self.class.connection.class.send(:define_method, method, block)
end
redefine_execute_methods(name) click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 59
def redefine_execute_methods(name)
  writer = @writer

  redefine_connection_method(name) do |*args|
    query = args.first
    if query =~ /SELECT "schema_migrations"."version"/ || query =~ /^SHOW/
      orig_execute(*args)
    else
      writer.write(to_sql(query, args.last))
    end
  end
end
redefine_metadata_methods() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 48
def redefine_metadata_methods
  redefine_connection_method(:column_for) { |*args| args.last }
  redefine_connection_method(:change_column) { |*_args| [] }
  redefine_connection_method(:rename_column) { |*_args| [] }
  redefine_connection_method(:tables) { |*_args| [] }
  redefine_connection_method(:select_all) { |*_args| [] }
  redefine_connection_method(:indexes) { |*_args| [] }
  # returns always the default(args[2])
  redefine_connection_method(:index_name_exists?) { |*args| args[2] }
end
save_original_methods() click to toggle source
# File lib/lol_dba/sql_migrations/migration_mocker.rb, line 41
def save_original_methods
  methods_to_modify.each do |method_name|
    orig_name = "orig_#{method_name}".to_sym
    self.class.connection.class.send(:alias_method, orig_name, method_name)
  end
end