Class | SyncEnumerator |
In: |
lib/generator.rb
|
Parent: | Object |
SyncEnumerator creates an Enumerable object from multiple Enumerable objects and enumerates them synchronously.
require 'generator' s = SyncEnumerator.new([1,2,3], ['a', 'b', 'c']) # Yields [1, 'a'], [2, 'b'], and [3,'c'] s.each { |row| puts row.join(', ') }
Creates a new SyncEnumerator which enumerates rows of given Enumerable objects.
# File lib/generator.rb, line 224 def initialize(*enums) @gens = enums.map { |e| Generator.new(e) } end
Enumerates rows of the Enumerable objects.
# File lib/generator.rb, line 252 def each @gens.each { |g| g.rewind } loop do count = 0 ret = @gens.map { |g| if g.end? count += 1 nil else g.next end } if count == @gens.size break end yield ret end self end
Returns true if the given nth Enumerable object has reached the end. If no argument is given, returns true if any of the Enumerable objects has reached the end.
# File lib/generator.rb, line 243 def end?(i = nil) if i.nil? @gens.detect { |g| g.end? } ? true : false else @gens[i].end? end end
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
# File lib/generator.rb, line 236 def length @gens.length end
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
# File lib/generator.rb, line 230 def size @gens.size end