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