class HypDiff::NodeMap

@api private

Attributes

map[R]

Public Class Methods

for(change_node_tuples, &block) click to toggle source
# File lib/hyp_diff.rb, line 45
def self.for(change_node_tuples, &block)
  new.build(change_node_tuples).map
end
new() click to toggle source
# File lib/hyp_diff.rb, line 51
def initialize
  @map = {}
  @stashed = []
end

Public Instance Methods

append_to_node(node, change) click to toggle source
# File lib/hyp_diff.rb, line 81
def append_to_node(node, change)
  list = (@map[node] ||= [])
  list << change
end
build(change_node_tuples) click to toggle source
# File lib/hyp_diff.rb, line 56
def build(change_node_tuples)
  change_node_tuples.each do |change, node|
    if node
      if @stashed.length > 0
        @stashed.each do |stashed_change|
          append_to_node(node, stashed_change)
        end
        @stashed = []
      end

      append_to_node(node, change)

      @last_processed_node = node
    else
      if @last_processed_node
        append_to_node(@last_processed_node, change)
      else
        @stashed << change
      end
    end
  end

  self
end