module Errapi::Validations::Clusivity

Constants

DELIMITER_METHOD_CHECKS

Private Instance Methods

check_delimiter!(option_desc) click to toggle source
# File lib/errapi/validations/clusivity.rb, line 7
def check_delimiter! option_desc
  unless @delimiter.respond_to?(:include?) || callable_option_value?(@delimiter)
    raise callable_option_type_error option_desc, "an object with the #include? method", @delimiter
  end
end
include?(members, value) click to toggle source
# File lib/errapi/validations/clusivity.rb, line 23
def include? members, value
  members.send inclusion_method(members), value
end
inclusion_method(enumerable) click to toggle source

From rails/activemodel/lib/active_model/validations/clusivity.rb: In Ruby 1.9 Range#include? on non-number-or-time-ish ranges checks all possible values in the range for equality, which is slower but more accurate. Range#cover? uses the previous logic of comparing a value with the range endpoints, which is fast but is only accurate on Numeric, Time, or DateTime ranges.

# File lib/errapi/validations/clusivity.rb, line 32
def inclusion_method enumerable
  if enumerable.is_a? Range
    case enumerable.first
    when Numeric, Time, DateTime
      :cover?
    else
      :include?
    end
  else
    :include?
  end
end
members(option_desc, options = {}) click to toggle source
# File lib/errapi/validations/clusivity.rb, line 13
def members option_desc, options = {}
  enumerable = actual_option_value @delimiter, options

  unless enumerable.respond_to? :include?
    raise callable_option_value_error option_desc, "an object with the #include? method", @delimiter
  end

  enumerable
end