class JsonapiActions::EagerLoader

Attributes

includes[R]
records[R]
serializer[R]

Public Class Methods

new(records, serializer, includes) click to toggle source

@param records [ActiveRecord::Relation] @param serializer @param includes [Array<Symbol>]

# File lib/jsonapi_actions/eager_loader.rb, line 8
def initialize(records, serializer, includes)
  @records = records
  @serializer = serializer
  @includes = includes
end

Public Instance Methods

eager_load() click to toggle source

@return [ActiveRecord::Relation]

# File lib/jsonapi_actions/eager_loader.rb, line 15
def eager_load
  serializer.relationships_to_serialize&.each do |rel|
    next if @records.eager_load_values.include?(rel[0])
    @records = @records.eager_load(rel[0])
  end

  includes.each do |include|
    rel = path_to_relationship(include.to_s.split('.'))
    next if @records.eager_load_values.include?(rel)
    @records = records.eager_load(rel)
  end

  @records
end

Private Instance Methods

path_to_relationship(parts) click to toggle source
# File lib/jsonapi_actions/eager_loader.rb, line 32
def path_to_relationship(parts)
  if parts.length == 1
    parts[0].to_sym
  else parts.length == 2
  { parts[0].to_sym => path_to_relationship(parts[1..-1]) }
  end
end