class ActiveRecord::ShardFor::ClusterConfig
Attributes
connection_registry[R]
name[R]
Public Class Methods
new(name)
click to toggle source
@param [Symbol] name
# File lib/activerecord/shard_for/cluster_config.rb, line 7 def initialize(name) @name = name @connection_registry = {} end
Public Instance Methods
connections()
click to toggle source
@return [Array<Symbol>] An array of connection name
# File lib/activerecord/shard_for/cluster_config.rb, line 23 def connections connection_registry.values end
fetch(key)
click to toggle source
@param [Object] key @return [Symbol] registered connection name @raise [KeyError] when key is not registered
# File lib/activerecord/shard_for/cluster_config.rb, line 30 def fetch(key) connection_registry.each do |connection_key, connection| case connection_key when Range then return connection if connection_key.include?(key) else return connection if connection_key == key end end raise KeyError.new, "#{key} is not registerd connection" end
register(key, connection_name)
click to toggle source
@param [Object] key sharding key object for connection @param [Symbol] connection_name @raise [RuntimeError] when duplicate entry of key
# File lib/activerecord/shard_for/cluster_config.rb, line 15 def register(key, connection_name) raise RuntimeError.new, "#{key} is registered" if connection_registry.key?(key) establish_connection(connection_name) connection_registry[key] = connection_name end
Private Instance Methods
establish_connection(connection_name)
click to toggle source
Establish connection for shard. @param [Symbol] connection_name
# File lib/activerecord/shard_for/cluster_config.rb, line 51 def establish_connection(connection_name) shard_name = generate_shard_name(connection_name) model = shard_name.safe_constantize return if model model = Class.new(ActiveRecord::Base) do self.abstract_class = true module_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.name "#{shard_name}" end RUBY end Object.const_set(shard_name, model) model.establish_connection connection_name end
generate_shard_name(connection_name)
click to toggle source
@param [Symbol] connection_name @return [String]
# File lib/activerecord/shard_for/cluster_config.rb, line 45 def generate_shard_name(connection_name) "ShardFor#{connection_name.to_s.tr('-', '_').classify}" end