Class: SyncEnumerator
Overview
SyncEnumerator creates an Enumerable object from multiple Enumerable objects and enumerates them synchronously.
Example
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(', ') }
Instance Method Summary collapse
-
#each ⇒ Object
Enumerates rows of the Enumerable objects.
-
#end?(i = nil) ⇒ Boolean
Returns true if the given nth Enumerable object has reached the end.
-
#initialize(*enums) ⇒ SyncEnumerator
constructor
Creates a new SyncEnumerator which enumerates rows of given Enumerable objects.
-
#length ⇒ Object
Returns the number of enumerated Enumerable objects, i.e.
-
#size ⇒ Object
Returns the number of enumerated Enumerable objects, i.e.
Constructor Details
#initialize(*enums) ⇒ SyncEnumerator
Creates a new SyncEnumerator which enumerates rows of given Enumerable objects.
224 225 226 |
# File 'lib/generator.rb', line 224 def initialize(*enums) @gens = enums.map { |e| Generator.new(e) } end |
Instance Method Details
#each ⇒ Object
Enumerates rows of the Enumerable objects.
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# 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 |
#end?(i = nil) ⇒ Boolean
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.
243 244 245 246 247 248 249 |
# 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 |
#length ⇒ Object
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
236 237 238 |
# File 'lib/generator.rb', line 236 def length @gens.length end |
#size ⇒ Object
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
230 231 232 |
# File 'lib/generator.rb', line 230 def size @gens.size end |