class Enumerator::Product

Public Class Methods

new(*enums) click to toggle source

rubocop:disable Lint/MissingSuper

# File lib/backports/3.2.0/enumerator/product.rb, line 30
def initialize(*enums)
  @__enums = enums
end

Public Instance Methods

each(&block) click to toggle source
# File lib/backports/3.2.0/enumerator/product.rb, line 36
def each(&block)
  return self unless block
  __execute(block, [], @__enums)
end
rewind() click to toggle source
# File lib/backports/3.2.0/enumerator/product.rb, line 66
def rewind
  @__enums.each do |enum|
    enum.rewind if enum.respond_to?(:rewind)
  end
  self
end
size() click to toggle source
# File lib/backports/3.2.0/enumerator/product.rb, line 54
def size
  total_size = 1
  @__enums.each do |enum|
    return nil unless enum.respond_to?(:size)
    size = enum.size
    return size if size == nil || size == Float::INFINITY || size == 0
    return nil unless size.is_a?(Integer)
    total_size *= size
  end
  total_size
end

Private Instance Methods

__execute(block, values, enums) click to toggle source
# File lib/backports/3.2.0/enumerator/product.rb, line 41
def __execute(block, values, enums)
  if enums.empty?
    block.yield values
  else
    enum, *enums = enums
    enum.each do |val|
      __execute(block, [*values, val], enums)
    end
  end
  nil
end