class CacheQL::AssociationLoader

Public Class Methods

new(model, association_name) click to toggle source
# File lib/cacheql/association_loader.rb, line 9
def initialize(model, association_name)
  @model = model
  @association_name = association_name
  validate
end
validate(model, association_name) click to toggle source
# File lib/cacheql/association_loader.rb, line 4
def self.validate(model, association_name)
  new(model, association_name)
  nil
end

Public Instance Methods

cache_key(record) click to toggle source

We want to load the associations on all records, even if they have the same id

# File lib/cacheql/association_loader.rb, line 22
def cache_key(record)
  record.object_id
end
load(record) click to toggle source
Calls superclass method
# File lib/cacheql/association_loader.rb, line 15
def load(record)
  raise TypeError, "#{@model} loader can't load association for #{record.class}" unless record.is_a?(@model)
  return Promise.resolve(read_association(record)) if association_loaded?(record)
  super
end
perform(records) click to toggle source
# File lib/cacheql/association_loader.rb, line 26
def perform(records)
  preload_association(records)
  records.each { |record| fulfill(record, read_association(record)) }
end

Private Instance Methods

association_loaded?(record) click to toggle source
# File lib/cacheql/association_loader.rb, line 47
def association_loaded?(record)
  record.association(@association_name).loaded?
end
preload_association(records) click to toggle source
# File lib/cacheql/association_loader.rb, line 39
def preload_association(records)
  ::ActiveRecord::Associations::Preloader.new.preload(records, @association_name)
end
read_association(record) click to toggle source
# File lib/cacheql/association_loader.rb, line 43
def read_association(record)
  record.public_send(@association_name)
end
validate() click to toggle source
# File lib/cacheql/association_loader.rb, line 33
def validate
  unless @model.reflect_on_association(@association_name)
    raise ArgumentError, "No association #{@association_name} on #{@model}"
  end
end