Class: Keymap::ConnectionAdapters::ConnectionHandler

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

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_poolsObject (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