module DbCharmer::ConnectionFactory
Public Class Methods
abstract_connection_class_name(connection_name)
click to toggle source
Generates unique names for our abstract AR classes
# File lib/db_charmer/connection_factory.rb, line 78 def self.abstract_connection_class_name(connection_name) conn_name_klass = connection_name.to_s.gsub(/\W+/, '_').camelize thread = Thread.current.object_id.abs # need to make sure it is non-negative "::AutoGeneratedAbstractConnectionClass#{conn_name_klass}ForThread#{thread}" end
connect(connection_name, should_exist = true)
click to toggle source
Establishes connection or return an existing one from cache
# File lib/db_charmer/connection_factory.rb, line 22 def self.connect(connection_name, should_exist = true) connection_name = connection_name.to_s connection_classes[connection_name] ||= establish_connection(connection_name, should_exist) end
connect_to_db(connection_name, config)
click to toggle source
Establishes connection or return an existing one from cache (not using AR database configs)
# File lib/db_charmer/connection_factory.rb, line 28 def self.connect_to_db(connection_name, config) connection_name = connection_name.to_s connection_classes[connection_name] ||= establish_connection_to_db(connection_name, config) end
connection_classes()
click to toggle source
# File lib/db_charmer/connection_factory.rb, line 9 def self.connection_classes Thread.current[:db_charmer_generated_connection_classes] ||= {} end
connection_classes=(val)
click to toggle source
# File lib/db_charmer/connection_factory.rb, line 13 def self.connection_classes=(val) Thread.current[:db_charmer_generated_connection_classes] = val end
establish_connection(connection_name, should_exist = true)
click to toggle source
Establish connection with a specified name
# File lib/db_charmer/connection_factory.rb, line 34 def self.establish_connection(connection_name, should_exist = true) abstract_class = generate_abstract_class(connection_name, should_exist) DbCharmer::ConnectionProxy.new(abstract_class, connection_name) end
establish_connection_to_db(connection_name, config)
click to toggle source
Establish connection with a specified name (not using AR database configs)
# File lib/db_charmer/connection_factory.rb, line 40 def self.establish_connection_to_db(connection_name, config) abstract_class = generate_abstract_class_for_db(connection_name, config) DbCharmer::ConnectionProxy.new(abstract_class, connection_name) end
generate_abstract_class(connection_name, should_exist = true)
click to toggle source
Generate an abstract AR class with specified connection established
# File lib/db_charmer/connection_factory.rb, line 46 def self.generate_abstract_class(connection_name, should_exist = true) # Generate class klass = generate_empty_abstract_ar_class(abstract_connection_class_name(connection_name)) # Establish connection klass.establish_real_connection_if_exists(connection_name.to_sym, !!should_exist) # Return the class return klass end
generate_abstract_class_for_db(connection_name, config)
click to toggle source
Generate an abstract AR class with specified connection established (not using AR database configs)
# File lib/db_charmer/connection_factory.rb, line 58 def self.generate_abstract_class_for_db(connection_name, config) # Generate class klass = generate_empty_abstract_ar_class(abstract_connection_class_name(connection_name)) # Establish connection klass.establish_connection(config) # Return the class return klass end
generate_empty_abstract_ar_class(klass)
click to toggle source
# File lib/db_charmer/connection_factory.rb, line 69 def self.generate_empty_abstract_ar_class(klass) # Define class module_eval "class #{klass} < ::ActiveRecord::Base; self.abstract_class = true; end" # Return class klass.constantize end
reset!()
click to toggle source
# File lib/db_charmer/connection_factory.rb, line 17 def self.reset! self.connection_classes = {} end