Class: SyncEnumerator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/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

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

#eachObject

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.

Returns:

  • (Boolean)


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

#lengthObject

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

#sizeObject

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