module NoBrainer::Document::Association::EagerLoader
Public Instance Methods
eager_load(docs, what)
click to toggle source
# File lib/no_brainer/document/association/eager_loader.rb, line 59 def eager_load(docs, what) case what when Hash then what.each do |k,v| if v.is_a?(NoBrainer::Criteria) v = v.dup nested_preloads, v.options[:eager_load] = v.options[:eager_load], [] eager_load(eager_load_association(docs, k, v), nested_preloads) else eager_load(eager_load_association(docs, k), v) end end when Array then what.each { |v| eager_load(docs, v) } when nil then; else eager_load_association(docs, what) # String and Symbol end true end
eager_load_association(docs, association_name, criteria=nil)
click to toggle source
# File lib/no_brainer/document/association/eager_loader.rb, line 46 def eager_load_association(docs, association_name, criteria=nil) docs = docs.compact return [] if docs.empty? meta = docs.first.class.association_metadata root_meta = docs.first.root_class.association_metadata association = meta[association_name.to_sym] || root_meta[association_name.to_sym] || meta[association_name.to_s.singularize.to_sym] || root_meta[association_name.to_s.singularize.to_sym] raise "Unknown association #{association_name}" unless association association.eager_load(docs, criteria) end