Class: ActiveShard::ActiveRecord::ConnectionHandler
- Inherits:
-
ActiveRecord::ConnectionAdapters::ConnectionHandler
- Object
- ActiveRecord::ConnectionAdapters::ConnectionHandler
- ActiveShard::ActiveRecord::ConnectionHandler
- Defined in:
- lib/active_shard/active_record/connection_handler.rb
Defined Under Namespace
Classes: ConnectionPoolHash, PoolKey
Instance Attribute Summary collapse
-
#shard_lookup ⇒ Object
Used to look up shard names.
Instance Method Summary collapse
- #add_shard(shard_definition) ⇒ Object
- #add_shards(shard_definitions) ⇒ Object
-
#initialize(options = {}) ⇒ ConnectionHandler
constructor
Initializes a new ConnectionHandler.
- #remove_all_shards! ⇒ Object
- #remove_shard(shard_definition) ⇒ Object
-
#retrieve_connection_pool(klass) ⇒ ConnectionPool, SchemaConnectionPool
Retrieve connection pool for class.
Constructor Details
#initialize(options = {}) ⇒ ConnectionHandler
Initializes a new ConnectionHandler
18 19 20 21 22 23 24 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 18 def initialize( ={} ) @shard_lookup = [ :shard_lookup ] @shard_definitions = [] @connection_pools = ConnectionPoolHash.new( self ) @schema_pools = {} end |
Instance Attribute Details
#shard_lookup ⇒ Object
Used to look up shard names
11 12 13 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 11 def shard_lookup @shard_lookup end |
Instance Method Details
#add_shard(shard_definition) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 32 def add_shard( shard_definition ) connection_pools[ connection_pool_id( shard_definition ) ] = new_connection_pool( shard_definition ) shard_definitions << shard_definition self end |
#add_shards(shard_definitions) ⇒ Object
27 28 29 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 27 def add_shards( shard_definitions ) shard_definitions.each( &method(:add_shard) ) end |
#remove_all_shards! ⇒ Object
62 63 64 65 66 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 62 def remove_all_shards! defs = shard_definitions.dup defs.each( &method(:remove_shard) ) end |
#remove_shard(shard_definition) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 40 def remove_shard( shard_definition ) schema_name = shard_definition.schema # Remove SchemaPool if it's based on this shard # if ( schema_pools[ schema_name ] && schema_pools[ schema_name ].shard_definition == shard_definition ) schema_pools[ schema_name ].disconnect! schema_pools.delete( schema_name ) end pool_id = connection_pool_id( shard_definition ) # Remove connection pool connection_pools[ pool_id ].disconnect! connection_pools.delete( pool_id ) shard_definitions.delete( shard_definition ) self end |
#retrieve_connection_pool(klass) ⇒ ConnectionPool, SchemaConnectionPool
Retrieve connection pool for class
79 80 81 82 83 84 85 86 87 |
# File 'lib/active_shard/active_record/connection_handler.rb', line 79 def retrieve_connection_pool( klass ) schema_name = ( sn = klass.schema_name ).nil? ? nil : sn.to_sym active_shard_name = shard_lookup.lookup_active_shard( schema_name ) ( active_shard_name.nil? ? get_schema_pool_for( schema_name ) : connection_pools[ connection_pool_id( schema_name, active_shard_name ) ] ) end |