class JsonApiModel::Associations::Preloader

Attributes

objects[RW]
preloads[RW]

Public Class Methods

new( objects, preloads ) click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 13
def initialize( objects, preloads )
  @objects  = Array( objects ).compact
  @preloads = preloads

  validate_homogenity!
end
preload( objects, *preloads ) click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 6
def preload( objects, *preloads )
  new( objects, preloads ).preload
end

Public Instance Methods

preload() click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 20
def preload
  @preloads.each do | preload |
    case preload
    when Hash
      preload.each do | preload, subpreloads |
        preloader = Preloaders.preloader_for( @objects, preload )

        subobjects = preloader.load
        preloader.assign subobjects

        subobjects.preload( subpreloads )
      end
    else
      Preloaders.preloader_for( @objects, preload ).fetch
    end
  end

  @objects
end

Private Instance Methods

homogeneous?() click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 52
def homogeneous?
  @objects.all? do |obj|
    obj.is_a?(object_class)
  end
end
object_class() click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 48
def object_class
  @object_class ||= @objects.first.class
end
validate_homogenity!() click to toggle source
# File lib/json_api_model/associations/preloader.rb, line 42
def validate_homogenity!
  unless homogeneous?
    raise "JsonApiModel::Associations::Preloader.preload called with a heterogeneous array of objects."
  end
end