module Comparable

Public Instance Methods

clamp(min, max) click to toggle source
# File lib/backports/2.4.0/comparable/clamp.rb, line 5
def clamp(min, max)
  if Backports.coerce_to_comparison(min, max) > 0
    raise ArgumentError, "min argument must be smaller than max argument"
  end
  case Backports.coerce_to_comparison(self, min)
  when 0
    self
  when -1
    min
  else
    self > max ? max : self
  end
end
clamp_with_range(range_or_min, max = Backports::Undefined) click to toggle source
# File lib/backports/2.7.0/comparable/clamp.rb, line 8
def clamp_with_range(range_or_min, max = Backports::Undefined)
  return clamp_without_range(range_or_min, max) unless max == Backports::Undefined
  raise TypeError, "wrong argument type #{range_or_min.class} (expected Range)" unless range_or_min.is_a?(Range)

  if range_or_min.end.nil? # 2.6's endless range
    self < range_or_min.begin ? range_or_min.begin : self
  elsif range_or_min.exclude_end?
    raise ArgumentError, 'cannot clamp with an exclusive range'
  else
    clamp_without_range(range_or_min.begin, range_or_min.end)
  end
end