class Enumerator::Chain
def each(*args, &block)
def each(*args, &block) @enums.each_with_index do |enum, i| @rewindable = i enum.each(*args, &block) end end
def initialize(*enums)
def initialize(*enums) @enums = enums @rewindable = -1 # This self is necessary to pass RubySpec, # See rubyspec/core/enumerator/chain/initialize_spec.rb # ...it checks what call of #initialize on non-initalized object returns self # rubocop:disable Lint/Void end
def inspect
def inspect detail = @enums.map(&:inspect).join(', ') "#<Enumerator::Chain: [#{detail}]>" end
def rewind
def rewind @rewindable.downto(0) do |i| enum = @enums[i] enum.rewind if enum.respond_to? :rewind end self end
def size
def size sum = 0 @enums.each do |enum| s = enum.size return s if s == nil || s == Float::INFINITY sum += s end sum end