module DbCharmer::ActiveRecord::Migration::MultiDbMigrations::ClassMethods

Public Instance Methods

db_magic(opts = {}) click to toggle source
# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 62
def db_magic(opts = {})
  # Collect connections from all possible options
  conns = [ opts[:connection], opts[:connections] ]
  conns << shard_connections(opts[:sharded_connection]) if opts[:sharded_connection]

  # Get a unique set of connections
  conns = conns.flatten.compact.uniq
  raise ArgumentError, "No connection name - no magic!" unless conns.any?

  # Save connections
  self.multi_db_names = conns
end
migrate_with_db_wrapper(direction) click to toggle source
# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 33
def migrate_with_db_wrapper(direction)
  if names = multi_db_names
    names.each do |multi_db_name|
      on_db(multi_db_name) do
        migrate_without_db_wrapper(direction)
      end
    end
  else
    migrate_without_db_wrapper(direction)
  end
end
multi_db_names() click to toggle source
# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 24
def multi_db_names
  @@multi_db_names[self.name] || @@multi_db_names['ActiveRecord::Migration']
end
multi_db_names=(names) click to toggle source
# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 28
def multi_db_names=(names)
  @@multi_db_names[self.name] = names
end
on_db(db_name) { || ... } click to toggle source
# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 45
def on_db(db_name)
  name = db_name.is_a?(Hash) ? db_name[:connection_name] : db_name.inspect
  announce "Switching connection to #{name}"
  # Switch connection
  old_proxy = ::ActiveRecord::Base.db_charmer_connection_proxy
  db_name = nil if db_name == :default
  ::ActiveRecord::Base.switch_connection_to(db_name, DbCharmer.connections_should_exist?)
  # Yield the block
  yield
ensure
  # Switch it back
  ::ActiveRecord::Base.verify_active_connections!
  announce "Switching connection back"
  ::ActiveRecord::Base.switch_connection_to(old_proxy)
end
shard_connections(conn_name) click to toggle source

Return a list of connections to shards in a sharded connection

# File lib/db_charmer/active_record/migration/multi_db_migrations.rb, line 76
def shard_connections(conn_name)
  conn = DbCharmer::Sharding.sharded_connection(conn_name)
  conn.shard_connections
end