Class: MasterSlave::ConnectionHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/master_slave/connection_handler.rb

Defined Under Namespace

Classes: ArProxy

Class Method Summary collapse

Class Method Details

.connection_pool_name(slave_name) ⇒ Object



13
14
15
# File 'lib/master_slave/connection_handler.rb', line 13

def connection_pool_name(slave_name)
  "master_slave_#{slave_name.to_s.strip}"
end

.setup_connectionObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/master_slave/connection_handler.rb', line 17

def setup_connection
  ActiveRecord::Base.slave_connection_names ||= []
  MasterSlave.config.slave_names.each do |slave_name|
    slave_name = slave_name.to_s.strip
    if !ActiveRecord::Base.slave_connection_names.include? slave_name
      ActiveRecord::Base.slave_connection_names << slave_name
    end

    spec = { Rails.env => MasterSlave.config.slave_config(slave_name) }
    resolver = ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.new spec
    spec = resolver.spec(Rails.env.to_sym)

    unless ActiveRecord::Base.respond_to?(spec.adapter_method)
      raise AdapterNotFound, "database configuration specifies nonexistent #{spec.config[:adapter]} adapter"
    end

    ar_proxy = ArProxy.new(connection_pool_name(slave_name))
    ActiveRecord::Base.remove_connection(ar_proxy)
    ActiveRecord::Base.connection_handler.establish_connection ar_proxy, spec
  end
end