class Terrestrial::LazyObjectProxy

TODO: This should do a better job of showing what will be loaded when it is inspected

Attributes

object_loader[R]

Public Class Methods

new(object_loader, key_fields) click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 6
def initialize(object_loader, key_fields)
  @object_loader = object_loader
  @key_fields = key_fields
  @lazy_object = nil
end

Public Instance Methods

__getobj__() click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 27
def __getobj__
  lazy_object
end
__key_fields() click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 35
def __key_fields
  @key_fields
end
each_loaded(&block) click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 31
def each_loaded(&block)
  [self].each(&block)
end
loaded?() click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 23
def loaded?
  !!@lazy_object
end
method_missing(method_id, *args, &block) click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 15
def method_missing(method_id, *args, &block)
  if args.empty? && __key_fields.include?(method_id)
    __key_fields.fetch(method_id)
  else
    lazy_object.public_send(method_id, *args, &block)
  end
end

Private Instance Methods

inspectable_properties() click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 49
def inspectable_properties
  [
    :key_fields,
    :lazy_object,
  ]
end
lazy_object() click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 45
def lazy_object
  @lazy_object ||= object_loader.call
end
respond_to_missing?(method_id, _include_private = false) click to toggle source
# File lib/terrestrial/lazy_object_proxy.rb, line 41
def respond_to_missing?(method_id, _include_private = false)
  __key_fields.include?(method_id) || lazy_object.respond_to?(method_id)
end