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