class Marso::FiberProjectionMany
Public Class Methods
new(process, source={})
click to toggle source
# File lib/marso/toolbelt/fiberpiping.rb, line 130 def initialize(process, source={}) @src = source @process = process @is_inside_inner_enumerate = false @fiber_delegate = Fiber.new do output = [] while input = Fiber.yield(output) output = process.call(input) @is_inside_inner_enumerate = true output.each { |o| Fiber.yield(o) } @is_inside_inner_enumerate = false end end @fiber_delegate.resume end
Public Instance Methods
resume()
click to toggle source
# File lib/marso/toolbelt/fiberpiping.rb, line 153 def resume if @src.is_a?(Marso::Enumerate) && !@is_inside_inner_enumerate output = @fiber_delegate.resume(@src.resume) output = @fiber_delegate.resume(@src.resume) if output.is_a?(Array) && output.empty? return output else output = @fiber_delegate.resume output = @fiber_delegate.resume(@src.resume) unless @is_inside_inner_enumerate output = @fiber_delegate.resume(@src.resume) if output.is_a?(Array) && output.empty? return output end end
source(other_source)
click to toggle source
# File lib/marso/toolbelt/fiberpiping.rb, line 166 def source(other_source) FiberProjectionMany.new(@process, other_source) end