Module: Switchman::ActiveRecord::Reflection::AssociationScopeCache
- Defined in:
- lib/switchman/active_record/reflection.rb
Instance Method Summary collapse
-
#association_scope_cache(conn, owner) ⇒ Object
cache association scopes by shard.
- #initialize(*args) ⇒ Object
Instance Method Details
#association_scope_cache(conn, owner) ⇒ 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`
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/switchman/active_record/reflection.rb', line 30 def association_scope_cache(conn, owner) key = conn.prepared_statements if polymorphic? key = [key, owner._read_attribute(@foreign_type)] end key = [key, shard(owner).id].flatten @association_scope_cache[key] ||= @scope_lock.synchronize { @association_scope_cache[key] ||= yield } end |
#initialize(*args) ⇒ Object
17 18 19 20 21 22 23 24 |
# File 'lib/switchman/active_record/reflection.rb', line 17 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 |