class ActiveModel::Validations::InclusionValidator

Constants

ERROR_MESSAGE

Public Instance Methods

check_validity!() click to toggle source
# File lib/active_model/validations/inclusion.rb, line 10
def check_validity!
  unless [:include?, :call].any?{ |method| delimiter.respond_to?(method) }
    raise ArgumentError, ERROR_MESSAGE
  end
end
validate_each(record, attribute, value) click to toggle source
# File lib/active_model/validations/inclusion.rb, line 16
def validate_each(record, attribute, value)
  exclusions = delimiter.respond_to?(:call) ? delimiter.call(record) : delimiter
  unless exclusions.send(inclusion_method(exclusions), value)
    record.errors.add(attribute, :inclusion, options.except(:in, :within).merge!(:value => value))
  end
end

Private Instance Methods

delimiter() click to toggle source
# File lib/active_model/validations/inclusion.rb, line 25
def delimiter
  @delimiter ||= options[:in] || options[:within]
end
inclusion_method(enumerable) click to toggle source

In Ruby 1.9 Range#include? on non-numeric ranges checks all possible values in the range for equality, so it may be slow for large ranges. The new Range#cover? uses the previous logic of comparing a value with the range endpoints.

# File lib/active_model/validations/inclusion.rb, line 33
def inclusion_method(enumerable)
  enumerable.is_a?(Range) ? :cover? : :include?
end