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) ⇒ 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
37
38
39
40
41
42
43
# File 'lib/switchman/active_record/reflection.rb', line 31

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

  if ::Rails.version < "7.2"
    klass.cached_find_by_statement(key, &)
  else
    klass.with_connection do |connection|
      klass.cached_find_by_statement(connection, key, &)
    end
  end
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