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