class Enumerator::Product

def size

def size
  total_size = 1
  @__enums.each do |enum|
    return nil unless enum.respond_to?(:size)
    size = enum.size
    return size if size == 0 || size == nil || size == Float::INFINITY || size == -Float::INFINITY
    return nil unless size.is_a?(Integer)
    total_size *= size
  end
  total_size
end