class Terrestrial::CollectionMutabilityProxy

Attributes

added_nodes[R]
collection[R]
deleted_nodes[R]

Public Class Methods

new(collection) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 10
def initialize(collection)
  @collection = collection
  @added_nodes = []
  @deleted_nodes = []
end

Public Instance Methods

delete(node) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 42
def delete(node)
  @deleted_nodes.push(node)
  self
end
each(&block) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 33
def each(&block)
  if block
    enum.each(&block)
    self
  else
    enum
  end
end
each_deleted(&block) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 25
def each_deleted(&block)
  @deleted_nodes.each(&block)
end
each_loaded(&block) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 21
def each_loaded(&block)
  loaded_enum.each(&block)
end
push(node) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 47
def push(node)
  force_load
  @added_nodes.push(node)
end
to_ary() click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 29
def to_ary
  to_a
end

Private Instance Methods

deleted?(node) click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 82
def deleted?(node)
  @deleted_nodes.include?(node)
end
enum() click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 70
def enum
  Enumerator.new do |yielder|
    collection.each do |element|
      yielder.yield(element) unless deleted?(element)
    end

    added_nodes.each do |node|
      yielder.yield(node)
    end
  end
end
force_load() click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 54
def force_load
  to_a
end
loaded_enum() click to toggle source
# File lib/terrestrial/collection_mutability_proxy.rb, line 58
def loaded_enum
  Enumerator.new do |yielder|
    collection.each_loaded do |element|
      yielder.yield(element) unless deleted?(element)
    end

    added_nodes.each do |node|
      yielder.yield(node)
    end
  end
end