class SmartPreloads::Item

Public Class Methods

new(record, loader: nil) click to toggle source
Calls superclass method
# File lib/smart_preloads/item.rb, line 3
def initialize(record, loader: nil)
  super(record)
  @loader = loader || Loader.new([record])
  _override_associations
end

Public Instance Methods

_override_associations() click to toggle source
Calls superclass method
# File lib/smart_preloads/item.rb, line 9
def _override_associations
  __getobj__.class.reflections.each do |key, association|
    body = nil
    loader = @loader
    if %i(has_many has_and_belongs_to_many).include?(association.macro)
      body = lambda do
        List.new(super(), loader: loader.nested(key.to_sym))
      end
    else
      body = lambda do
        loader.load(key.to_sym)
        super()
      end
    end
    __getobj__.define_singleton_method(key, &body)
  end
end