class AmsLazyRelationships::Loaders::Direct

Lazy loads data in a “dumb” way - just executes the provided block when needed

Attributes

load_block[R]
relationship_name[R]

Public Class Methods

new(relationship_name, &load_block) click to toggle source

@param relationship_name [Symbol] used for building cache key. Also if the

`load_block` param is `nil` the loader will just call `relationship_name`
method on the record being processed.

@param load_block [Proc] If present the loader will call this block when

evaluating the data.
# File lib/ams_lazy_relationships/loaders/direct.rb, line 14
def initialize(relationship_name, &load_block)
  @relationship_name = relationship_name
  @load_block = load_block
end

Private Instance Methods

batch_key(record) click to toggle source
# File lib/ams_lazy_relationships/loaders/direct.rb, line 34
def batch_key(record)
  "#{record.class}/#{relationship_name}"
end
calculate_value(record) click to toggle source
# File lib/ams_lazy_relationships/loaders/direct.rb, line 38
def calculate_value(record)
  return record.public_send(relationship_name) unless load_block

  load_block.call(record)
end
load_data(records, loader) click to toggle source
# File lib/ams_lazy_relationships/loaders/direct.rb, line 23
def load_data(records, loader)
  data = []
  records.each do |r|
    value = calculate_value(r)
    data << value
    loader.call(r, value)
  end

  data = data.flatten.compact.uniq
end