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