Method: Generator#initialize

Defined in:
lib/thread_generator.rb

#initialize(enum = nil, &block) ⇒ Generator

Creates a new generator either from an Enumerable object or from a block.

In the former, block is ignored even if given.

In the latter, the given block is called with the generator itself, and expected to call the yield method for each element.



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/thread_generator.rb', line 66

def initialize(enum = nil, &block)
  if enum
    @block = proc{|g| enum.each{|value| g.yield value}}
  else
    @block = block
  end
  @index = 0
  @queue = []
  @main_thread = nil
  @loop_thread.kill if defined?(@loop_thread)
  @loop_thread = Thread.new do
    Thread.stop
    begin
      @block.call(self)
    rescue
      @main_thread.raise $!
    ensure
      @main_thread.wakeup
    end
  end
  Thread.pass until @loop_thread.stop?
  self
end