Module: DbCharmer::ActiveRecord::Migration::MultiDbMigrations::ClassMethods
- Defined in:
- lib/db_charmer/active_record/migration/multi_db_migrations.rb
Constant Summary collapse
- @@multi_db_names =
{}
Instance Method Summary collapse
- #db_magic(opts = {}) ⇒ Object
- #migrate_with_db_wrapper(direction) ⇒ Object
- #multi_db_names ⇒ Object
- #multi_db_names=(names) ⇒ Object
- #on_db(db_name) ⇒ Object
-
#shard_connections(conn_name) ⇒ Object
Return a list of connections to shards in a sharded connection.
Instance Method Details
#db_magic(opts = {}) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# 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) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# 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 ⇒ Object
24 25 26 |
# 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) ⇒ Object
28 29 30 |
# 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) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# 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) ⇒ Object
Return a list of connections to shards in a sharded connection
76 77 78 79 |
# 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 |