class ActiveRecord::ShardFor::STIShardRepository
Attributes
inherited_class[R]
Public Class Methods
new(inherited_class, base_shards)
click to toggle source
@param [Class] A sub class of AR model. @base_shards [Array<Class>] An array of shard models.
# File lib/activerecord/shard_for/sti_shard_repository.rb, line 8 def initialize(inherited_class, base_shards) @inherited_class = inherited_class @shards = base_shards.each_with_object({}) do |(connection_name, base_model), hash| model = generate_model_from_shard(connection_name, base_model) inherited_class.const_set(:"#{generate_shard_name(connection_name)}", model) hash[connection_name] = model end end
Private Instance Methods
generate_model_from_shard(connection_name, base_model)
click to toggle source
@param [Symbol] connection_name @param [Class] A class of shard model. @return [Class] A sub class of given model.
# File lib/activerecord/shard_for/sti_shard_repository.rb, line 23 def generate_model_from_shard(connection_name, base_model) shard_name = generate_shard_name(connection_name) module_name = inherited_class.name model = Class.new(base_model) do @assigned_key = base_model.assigned_key module_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.name "#{module_name}::#{shard_name}" end RUBY end model end