class ArcFurnace::Unfold

Public Class Methods

new(source:) click to toggle source
# File lib/arc-furnace/unfold.rb, line 11
def initialize(source:)
  @source = source
  @value = nil
end

Public Instance Methods

advance() click to toggle source
# File lib/arc-furnace/unfold.rb, line 33
def advance
  while (unfolded.nil? || unfolded.empty?) && !source.empty?
    # Use reverse since we want to process in-order, but, #pop is much faster than #unshift
    @unfolded = unfold(source.row.deep_dup)
    unfolded.reverse!
  end
  if unfolded && !unfolded.empty?
    @value = unfolded.pop
  else
    @value = nil
  end
end
empty?() click to toggle source
# File lib/arc-furnace/unfold.rb, line 29
def empty?
  @value.nil? && source.empty?
end
unfold(row) click to toggle source

Given a row from the source, produce the unfolded rows as a result. This method must return an array.

# File lib/arc-furnace/unfold.rb, line 25
def unfold(row)
  raise "Unimplemented!"
end
value() click to toggle source
# File lib/arc-furnace/unfold.rb, line 16
def value
  if @value.nil? && !empty?
    advance
  end
  @value
end