class Umwelt::History::Trace

Public Class Methods

new() click to toggle source
# File lib/umwelt/history/trace.rb, line 7
def initialize
  @queue = Queue.new # for phases
  @phases_index = {}
  @continuity = []
  @timeline = {}
end

Public Instance Methods

call(history, phase_id) click to toggle source
# File lib/umwelt/history/trace.rb, line 14
def call(history, phase_id)
  to_index(history.phases)

  @queue.push from_index(phase_id)

  loop do
    break if @queue.empty?

    process(@queue.pop)
  end

  @continuity = @timeline.values
end
enqueue(phase) click to toggle source
# File lib/umwelt/history/trace.rb, line 33
def enqueue(phase)
  @queue.push from_index(phase.merge_id) unless phase.merge_id.nil?
  @queue.push from_index(phase.parent_id) unless phase.parent_id.nil?
end
from_index(phase_id) click to toggle source
# File lib/umwelt/history/trace.rb, line 38
def from_index(phase_id)
  phase = @phases_index[phase_id]
  phase || error!("Phase with ID #{phase_id} not exist, but referenced")
end
process(phase) click to toggle source
# File lib/umwelt/history/trace.rb, line 28
def process(phase)
  @timeline[phase[:id]] = phase
  enqueue(phase)
end
to_index(phases) click to toggle source
# File lib/umwelt/history/trace.rb, line 43
def to_index(phases)
  phases.each do |phase|
    @phases_index[phase[:id]] = phase
  end
end