Class: Keymap::ConnectionAdapters::ConnectionHandler
- Inherits:
-
Object
- Object
- Keymap::ConnectionAdapters::ConnectionHandler
- Defined in:
- lib/keymap/connection_adapters/abstract/connection_pool.rb
Overview
ConnectionHandler is a collection of ConnectionPool objects. It is used for keeping separate connection pools for Keymap objects stored in different databases.
Normally there is only a single ConnectionHandler instance, accessible via Keymap::Base.connection_handler.
Instance Attribute Summary collapse
-
#connection_pools ⇒ Object
readonly
Returns the value of attribute connection_pools.
Instance Method Summary collapse
-
#active_connections? ⇒ Boolean
Returns true if there are any active connections among the connection pools that the ConnectionHandler is managing.
-
#clear_active_connections! ⇒ Object
Returns any connections in use by the current thread back to the pool.
- #clear_all_connections! ⇒ Object
-
#clear_reloadable_connections! ⇒ Object
Clears the cache which maps classes.
-
#connected?(klass) ⇒ Boolean
Returns true if a connection that’s accessible to this class has already been opened.
- #establish_connection(name, spec) ⇒ Object
-
#initialize(pools = {}) ⇒ ConnectionHandler
constructor
A new instance of ConnectionHandler.
-
#remove_connection(klass) ⇒ Object
Remove the connection for this class.
-
#retrieve_connection(klass) ⇒ Object
Locate the connection of the nearest super class.
- #retrieve_connection_pool(klass) ⇒ Object
-
#verify_active_connections! ⇒ Object
Verify active connections.
Constructor Details
#initialize(pools = {}) ⇒ ConnectionHandler
315 316 317 318 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 315 def initialize(pools = {}) @connection_pools = pools @class_to_pool = {} end |
Instance Attribute Details
#connection_pools ⇒ Object (readonly)
Returns the value of attribute connection_pools.
313 314 315 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 313 def connection_pools @connection_pools end |
Instance Method Details
#active_connections? ⇒ Boolean
Returns true if there are any active connections among the connection pools that the ConnectionHandler is managing.
327 328 329 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 327 def active_connections? connection_pools.values.any? { |pool| pool.active_connection? } end |
#clear_active_connections! ⇒ Object
Returns any connections in use by the current thread back to the pool.
332 333 334 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 332 def clear_active_connections! @connection_pools.each_value { |pool| pool.release_connection } end |
#clear_all_connections! ⇒ Object
341 342 343 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 341 def clear_all_connections! @connection_pools.each_value { |pool| pool.disconnect! } end |
#clear_reloadable_connections! ⇒ Object
Clears the cache which maps classes.
337 338 339 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 337 def clear_reloadable_connections! @connection_pools.each_value { |pool| pool.clear_reloadable_connections! } end |
#connected?(klass) ⇒ Boolean
Returns true if a connection that’s accessible to this class has already been opened.
361 362 363 364 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 361 def connected?(klass) conn = retrieve_connection_pool(klass) conn && conn.connected? end |
#establish_connection(name, spec) ⇒ Object
320 321 322 323 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 320 def establish_connection(name, spec) @connection_pools[spec] ||= ConnectionAdapters::ConnectionPool.new(spec) @class_to_pool[name] = @connection_pools[spec] end |
#remove_connection(klass) ⇒ Object
Remove the connection for this class. This will close the active connection and the defined connection (if they exist). The result can be used as an argument for establish_connection, for easily re-establishing the connection.
370 371 372 373 374 375 376 377 378 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 370 def remove_connection(klass) pool = @class_to_pool.delete(klass.name) return nil unless pool @connection_pools.delete pool.spec pool.automatic_reconnect = false pool.disconnect! pool.spec.config end |
#retrieve_connection(klass) ⇒ Object
Locate the connection of the nearest super class. This can be an active or defined connection: if it is the latter, it will be opened and set as the active connection for the class it was defined for (not necessarily the current class).
354 355 356 357 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 354 def retrieve_connection(klass) #:nodoc: pool = retrieve_connection_pool(klass) (pool && pool.connection) or raise ConnectionNotEstablished end |
#retrieve_connection_pool(klass) ⇒ Object
380 381 382 383 384 385 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 380 def retrieve_connection_pool(klass) pool = @class_to_pool[klass.name] return pool if pool return nil if Keymap::Base == klass retrieve_connection_pool klass.superclass end |
#verify_active_connections! ⇒ Object
Verify active connections.
346 347 348 |
# File 'lib/keymap/connection_adapters/abstract/connection_pool.rb', line 346 def verify_active_connections! #:nodoc: @connection_pools.each_value { |pool| pool.verify_active_connections! } end |