class Terrestrial::LazyCollection

Attributes

database_enum[R]
loader[R]
queries[R]

Public Class Methods

new(database_enum, loader, queries) click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 8
def initialize(database_enum, loader, queries)
  @database_enum = database_enum
  @loader = loader
  @queries = queries
  @loaded = false
end

Public Instance Methods

each(&block) click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 34
def each(&block)
  enum.each(&block)
end
each_loaded(&block) click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 38
def each_loaded(&block)
  loaded_objects.each(&block)
end
subset(name, *params) click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 22
def subset(name, *params)
  self.class.new(
    queries.execute(database_enum, name, *params),
    loader,
    queries,
  )
end
to_ary() click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 30
def to_ary
  to_a
end
where(criteria) click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 18
def where(criteria)
  self.class.new(database_enum.where(criteria), loader, queries)
end

Private Instance Methods

enum() click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 44
def enum
  @enum ||= Enumerator.new { |yielder|
    loaded_objects.each do |obj|
      yielder.yield(obj)
    end

    loop do
      object_enum.next.tap { |obj|
        loaded_objects.push(obj)
        yielder.yield(obj)
      }
    end
  }
end
inspectable_properties() click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 67
def inspectable_properties
  [
    :database_enum,
    :loaded,
  ]
end
loaded_objects() click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 63
def loaded_objects
  @loaded_objects ||= []
end
object_enum() click to toggle source
# File lib/terrestrial/lazy_collection.rb, line 59
def object_enum
  @object_enum ||= database_enum.lazy.map(&loader)
end