Class: Marso::FiberProjectionMany
- Defined in:
- lib/marso/toolbelt/fiberpiping.rb
Constant Summary
Constants inherited from Enumerate
Instance Attribute Summary
Attributes inherited from Enumerate
Instance Method Summary collapse
-
#initialize(process, source = {}) ⇒ FiberProjectionMany
constructor
A new instance of FiberProjectionMany.
- #resume ⇒ Object
- #source(other_source) ⇒ Object
Methods inherited from Enumerate
#clone, #execute, from, #select, #select_many, #to_a, #where, #|
Constructor Details
#initialize(process, source = {}) ⇒ FiberProjectionMany
Returns a new instance of FiberProjectionMany.
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# 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 |
Instance Method Details
#resume ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 |
# 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) ⇒ Object
166 167 168 |
# File 'lib/marso/toolbelt/fiberpiping.rb', line 166 def source(other_source) FiberProjectionMany.new(@process, other_source) end |