module SPCore
class Limiters
  def self.make_no_limiter
    return lambda do |input|
      return input
    end
  end
    
  def self.make_range_limiter range
    return lambda do |input|
      if input < range.first
        return range.first
      elsif input > range.last
        return range.last
      else
        return input
      end
    end
  end

  def self.make_upper_limiter limit
    return lambda do |input|
      if input > limit
        return limit
      else
        return input
      end
    end
  end

  def self.make_lower_limiter limit
    return lambda do |input|
      if input < limit
        return limit
      else
        return input
      end
    end
  end
  
  def self.make_enum_limiter good_values
    return lambda do |input, current|
      if good_values.include?(input)
        return input
      else
        return current
      end
    end
  end
end
end