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