class ActiveRecord::ShardFor::ShardRepository
Attributes
assigned_key[R]
base_class[R]
Public Class Methods
new(cluster_config, base_class)
click to toggle source
@param [ClusterConfig] cluster_config @param [Class] base_class
A AR Model
# File lib/activerecord/shard_for/shard_repository.rb, line 8 def initialize(cluster_config, base_class) @base_class = base_class @shards = cluster_config.connection_registry.each_with_object({}) do |(key, connection_name), hash| model = generate_model_for_shard(connection_name, key) base_class.const_set(:"#{generate_shard_name(connection_name)}", model) hash[connection_name] = model end end
Private Instance Methods
generate_model_for_shard(connection_name, key)
click to toggle source
@param [Symbol] connection_name @param [Range] slot_range @return [Class] A sub class of given AR model.
A sub class has connection setting for specific shard.
# File lib/activerecord/shard_for/shard_repository.rb, line 24 def generate_model_for_shard(connection_name, key) shard_name = generate_shard_name(connection_name) Class.new(base_class) do self.table_name = base_class.table_name class << self attr_reader :assigned_key end @assigned_key = key module_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.name "#{base_class.name}::#{shard_name}" end self.connection_specification_name = "#{shard_name}" RUBY end end