Module: Switchman::ActiveRecord::Reflection::AssociationScopeCache

Defined in:
lib/switchman/active_record/reflection.rb

Instance Method Summary collapse

Instance Method Details

#association_scope_cache(klass, owner, &block) ⇒ Object

cache association scopes by shard. this technically belongs on AssociationReflection, but we put it on ThroughReflection as well, instead of delegating to its internal HasManyAssociation, losing its proper klass



31
32
33
34
35
36
# File 'lib/switchman/active_record/reflection.rb', line 31

def association_scope_cache(klass, owner, &block)
  key = self
  key = [key, owner._read_attribute(@foreign_type)] if polymorphic?
  key = [key, shard(owner).id].flatten
  klass.cached_find_by_statement(key, &block)
end

#initialize(*args) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/switchman/active_record/reflection.rb', line 18

def initialize(*args)
  super
  # on ThroughReflection, these won't be initialized (cause it doesn't
  # inherit from AssociationReflection), so make sure they're
  # initialized here
  @association_scope_cache ||= {}
  @scope_lock ||= Mutex.new
end