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