Class: SyncEnumerator
- Inherits:
-
Object
- Object
- SyncEnumerator
- Includes:
- Enumerable
- Defined in:
- lib/rubysl/generator/generator.rb
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.
190 191 192 |
# File 'lib/rubysl/generator/generator.rb', line 190 def initialize(*enums) @gens = enums.map { |e| Generator.new(e) } end |
Instance Method Details
#each ⇒ Object
Enumerates rows of the Enumerable objects.
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/rubysl/generator/generator.rb', line 218 def each @gens.each { |g| g.rewind } while true count = 0 ret = @gens.map { |g| if g.end? count += 1 nil else g.next end } break if count == @gens.size 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.
209 210 211 212 213 214 215 |
# File 'lib/rubysl/generator/generator.rb', line 209 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.
202 203 204 |
# File 'lib/rubysl/generator/generator.rb', line 202 def length @gens.length end |
#size ⇒ Object
Returns the number of enumerated Enumerable objects, i.e. the size of each row.
196 197 198 |
# File 'lib/rubysl/generator/generator.rb', line 196 def size @gens.size end |