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.
186 187 188 |
# File 'lib/generator.rb', line 186 def initialize(*enums) @gens = enums.map { |e| Generator.new(e) } end |
Instance Method Details
#each ⇒ Object
Enumerates rows of the Enumerable objects.
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/generator.rb', line 214 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.
205 206 207 208 209 210 211 |
# File 'lib/generator.rb', line 205 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.
198 199 200 |
# File 'lib/generator.rb', line 198 def length @gens.length end |
#size ⇒ Object
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
192 193 194 |
# File 'lib/generator.rb', line 192 def size @gens.size end |