class JsonApiResource::Associations::Preloader

Constants

PREOLOADERS_FOR_ASSOCIATIONS

Public Class Methods

preload( objects, preloads ) click to toggle source
# File lib/json_api_resource/associations/preloader.rb, line 7
def preload ( objects, preloads )
  objects  = Array(objects)
  preloads = Array(preloads)

  return objects if objects.empty?
  
  preloads.each do |preload|

    association = association_for objects, preload
    
    preloader   = preloader_for association

    preloader.preload( objects )

  end
end

Private Class Methods

association_for( objects, preload ) click to toggle source
# File lib/json_api_resource/associations/preloader.rb, line 26
def association_for( objects, preload )
  # let's assert the objects are of a single class
  verify_object_homogenity!(objects)

  obj_class   = objects.first.class
  association = obj_class._associations[preload]
  
  raise_if association.nil?, "'#{preload}' is not a valid association on #{obj_class}"

  association
end
preloader_for( association ) click to toggle source
# File lib/json_api_resource/associations/preloader.rb, line 38
def preloader_for( association )
  preloader_class = PREOLOADERS_FOR_ASSOCIATIONS[association.type]
  preloader_class.new association
end
verify_object_homogenity!( objects ) click to toggle source
# File lib/json_api_resource/associations/preloader.rb, line 43
def verify_object_homogenity!( objects )
  obj_class = objects.first.class
  
  objects.each do |obj|
    raise_unless obj.is_a?(obj_class), "JsonApiResource::Associations::Preloader.preload called with a heterogenious array of objects."
  end
end