module SlowEnumeratorTools::Batcher
Public Class Methods
batch(enum)
click to toggle source
# File lib/slow_enumerator_tools/batcher.rb, line 5 def self.batch(enum) queue = Queue.new t = SlowEnumeratorTools::Util.gen_collector_thread(enum, queue) Enumerator.new do |y| loop do res = [] ended = false # pop first elem = queue.pop if SlowEnumeratorTools::Util::STOP_OK.equal?(elem) break elsif SlowEnumeratorTools::Util::STOP_ERR.equal?(elem) raise queue.pop end res << elem loop do # pop remaining begin elem = queue.pop(true) rescue ThreadError break end if SlowEnumeratorTools::Util::STOP_OK.equal?(elem) ended = true break elsif SlowEnumeratorTools::Util::STOP_ERR.equal?(elem) raise queue.pop end res << elem end y << res break if ended end t.join end.lazy end