class HQ::GraphQL::AssociationLoader
Public Class Methods
new(model, association_name)
click to toggle source
Calls superclass method
# File lib/hq/graphql/association_loader.rb, line 6 def initialize(model, association_name) super() @model = model @association_name = association_name validate 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/hq/graphql/association_loader.rb, line 20 def cache_key(record) record.object_id end
load(record)
click to toggle source
Calls superclass method
# File lib/hq/graphql/association_loader.rb, line 13 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/hq/graphql/association_loader.rb, line 24 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/hq/graphql/association_loader.rb, line 45 def association_loaded?(record) record.association(@association_name).loaded? end
preload_association(records)
click to toggle source
# File lib/hq/graphql/association_loader.rb, line 37 def preload_association(records) ::ActiveRecord::Associations::Preloader.new.preload(records, @association_name) end
read_association(record)
click to toggle source
# File lib/hq/graphql/association_loader.rb, line 41 def read_association(record) record.public_send(@association_name) end
validate()
click to toggle source
# File lib/hq/graphql/association_loader.rb, line 31 def validate unless @model.reflect_on_association(@association_name) raise ArgumentError, "No association #{@association_name} on #{@model}" end end