class SlavePools::Pools
Public Class Methods
new()
click to toggle source
Calls superclass method
# File lib/slave_pools/pools.rb, line 7 def initialize pools = {} pool_configurations.group_by{|_, name, _| name }.each do |name, set| pools[name.to_sym] = SlavePools::Pool.new( name, set.map{ |conn_name, _, replica_name| connection_class(name, replica_name, conn_name) } ) end if pools.empty? SlavePools.log :info, "No pools found for #{SlavePools.config.environment}. Loading a default pool with master instead." pools[:default] = SlavePools::Pool.new('default', [ActiveRecord::Base]) end super pools end
Private Instance Methods
connection_class(pool_name, replica_name, connection_name)
click to toggle source
generates a unique ActiveRecord::Base subclass for a single replica
# File lib/slave_pools/pools.rb, line 37 def connection_class(pool_name, replica_name, connection_name) class_name = "#{pool_name.camelize}#{replica_name.camelize}" SlavePools.module_eval %Q{ class #{class_name} < ActiveRecord::Base self.abstract_class = true establish_connection :#{connection_name} def self.connection_config configurations[#{connection_name.to_s.inspect}] end end }, __FILE__, __LINE__ SlavePools.const_get(class_name) end
pool_configurations()
click to toggle source
finds valid pool configs
# File lib/slave_pools/pools.rb, line 29 def pool_configurations ActiveRecord::Base.configurations.map do |name, config| next unless name.to_s =~ /#{SlavePools.config.environment}_pool_(.*)_name_(.*)/ [name, $1, $2] end.compact end