Class: Jinx::MultiEnumerator

Inherits:
Object
  • Object
show all
Includes:
Collection
Defined in:
lib/jinx/helpers/multi_enumerator.rb

Overview

A MultiEnumerator iterates over several Enumerators in sequence. Unlike Array#+, MultiEnumerator reflects changes to the underlying enumerators.

Examples:

a = [1, 2]
b = [4, 5]
ab = MultiEnumerator.new(a, b)
ab.to_a #=> [1, 2, 4, 5]
a << 3; b << 6; ab.to_a #=> [1, 2, 3, 4, 5, 6]

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Enumerable

#collection?, #compact, #compact_map, #detect_value, #detect_with_value, #difference, #empty?, #enumerate, #filter, #first, #flatten, #hashify, #intersect, #join, #last, #partial_sort, #partial_sort_by, #pp_s, #pretty_print, #pretty_print_cycle, #qp, #size, #to_compact_hash, #to_compact_hash_with_index, #to_enum, #to_series, #transform, #transitive_closure, #union

Constructor Details

#initialize(*enums) ⇒ MultiEnumerator

Initializes a new Jinx::MultiEnumerator on the given components.

Parameters:

  • the (<Enumerable>)

    component enumerators to compose



20
21
22
23
24
# File 'lib/jinx/helpers/multi_enumerator.rb', line 20

def initialize(*enums)
  super()
  @components = enums
  @components.compact!
end

Instance Attribute Details

#components<Enumerable> (readonly)

Returns the enumerated collections.

Returns:



15
16
17
# File 'lib/jinx/helpers/multi_enumerator.rb', line 15

def components
  @components
end

Instance Method Details

#eachObject

Iterates over each of this MultiEnumerator’s Enumerators in sequence.



27
28
29
# File 'lib/jinx/helpers/multi_enumerator.rb', line 27

def each
  @components.each { |enum| enum.each { |item| yield item  } }
end