class Replicat::Proxy
Constants
- REPLICABLE_METHOD_NAMES
- REPLICABLE_METHOD_NAMES_REGEXP
Attributes
current_connection_name[RW]
index[W]
Public Class Methods
new(model_class)
click to toggle source
# File lib/replicat/proxy.rb, line 12 def initialize(model_class) @model_class = model_class end
Private Instance Methods
clear_query_cache()
click to toggle source
# File lib/replicat/proxy.rb, line 68 def clear_query_cache master_connection.clear_query_cache slave_connection_pool_table.values.map {|pool| pool.connection.clear_query_cache } end
connection_by_method_name(method_name)
click to toggle source
# File lib/replicat/proxy.rb, line 26 def connection_by_method_name(method_name) REPLICABLE_METHOD_NAMES_REGEXP === method_name ? slave_connection : master_connection end
current_connection()
click to toggle source
# File lib/replicat/proxy.rb, line 30 def current_connection if current_connection_name.to_s == "master" master_connection else slave_connection_pool_table[current_connection_name.to_s].try(:connection) or raise_connection_not_found end end
increment_slave_connection_index()
click to toggle source
# File lib/replicat/proxy.rb, line 64 def increment_slave_connection_index self.index = (index + 1) % slave_connection_pool_table.size end
index()
click to toggle source
# File lib/replicat/proxy.rb, line 73 def index @index ||= rand(slave_connection_pool_table.size) end
master_connection()
click to toggle source
# File lib/replicat/proxy.rb, line 38 def master_connection @model_class.connection_without_proxy end
method_missing(method_name, *args, &block)
click to toggle source
# File lib/replicat/proxy.rb, line 18 def method_missing(method_name, *args, &block) if current_connection_name current_connection.send(method_name, *args, &block) else connection_by_method_name(method_name).send(method_name, *args, &block) end end
raise_connection_not_found()
click to toggle source
# File lib/replicat/proxy.rb, line 56 def raise_connection_not_found raise Error, "connection #{current_connection_name} is not found" end
slave_connection()
click to toggle source
# File lib/replicat/proxy.rb, line 42 def slave_connection slave_connection_pool.connection end
slave_connection_index()
click to toggle source
# File lib/replicat/proxy.rb, line 60 def slave_connection_index index.tap { increment_slave_connection_index } end
slave_connection_pool()
click to toggle source
# File lib/replicat/proxy.rb, line 46 def slave_connection_pool slave_connection_pool_table.values[slave_connection_index] end
slave_connection_pool_table()
click to toggle source
# File lib/replicat/proxy.rb, line 50 def slave_connection_pool_table @slave_connection_pools ||= @model_class.replications.inject({}) do |table, (name, configuration)| table.merge(name => ConnectionPoolCreater.create(configuration)) end end