module Polyfill::V2_2::Enumerable

Public Instance Methods

max(n = nil) click to toggle source
Calls superclass method
# File lib/polyfill/v2_2/enumerable.rb, line 4
def max(n = nil)
  return block_given? ? super(&::Proc.new) : super() if n.nil? || n == 1

  raise ArgumentError, "negative size (#{n})" if n < 0

  (block_given? ? sort(&::Proc.new) : sort).last(n).reverse
end
max_by(n = nil) click to toggle source
Calls superclass method
# File lib/polyfill/v2_2/enumerable.rb, line 12
def max_by(n = nil)
  if n.nil? || n == 1 || !block_given?
    return block_given? ? super(&::Proc.new) : super()
  end

  raise ArgumentError, "negative size (#{n})" if n < 0

  sort_by(&::Proc.new).last(n).reverse
end
min(n = nil) click to toggle source
Calls superclass method
# File lib/polyfill/v2_2/enumerable.rb, line 22
def min(n = nil)
  return block_given? ? super(&::Proc.new) : super() if n.nil? || n == 1

  raise ArgumentError, "negative size (#{n})" if n < 0

  (block_given? ? sort(&::Proc.new) : sort).first(n)
end
min_by(n = nil) click to toggle source
Calls superclass method
# File lib/polyfill/v2_2/enumerable.rb, line 30
def min_by(n = nil)
  if n.nil? || n == 1 || !block_given?
    return block_given? ? super(&::Proc.new) : super()
  end

  raise ArgumentError, "negative size (#{n})" if n < 0

  sort_by(&::Proc.new).first(n)
end
slice_after(pattern = nil) click to toggle source
# File lib/polyfill/v2_2/enumerable.rb, line 40
def slice_after(pattern = nil)
  raise ArgumentError, 'both pattern and block are given' if pattern && block_given?
  raise ArgumentError, 'wrong number of arguments (given 0, expected 1)' if !pattern && !block_given?

  matcher = pattern || ::Proc.new

  ::Enumerator.new do |yielder|
    output = []
    each do |element, *rest|
      elements = rest.any? ? [element, *rest] : element

      output.push(elements)
      if matcher === output.last # rubocop:disable Style/CaseEquality
        yielder << output
        output = []
      end
    end
    yielder << output unless output.empty?
  end
end
slice_when() click to toggle source
# File lib/polyfill/v2_2/enumerable.rb, line 61
def slice_when
  block = ::Proc.new

  ::Enumerator.new do |yielder|
    output = []
    each do |element, *rest|
      elements = rest.any? ? [element, *rest] : element

      if output.empty? || !block.call(output.last, elements)
        output.push(elements)
      else
        yielder << output
        output = [elements]
      end
    end
    yielder << output unless output.empty?
  end
end