Class: ActiveModel::Validations::LengthValidator

### Home Classes Methods

### In Files

- lib/active_model/validations/length.rb

### Parent

EachValidator

### Methods

- ::new
- #check_validity!
- #validate_each

### Class/Module Index

Quicksearch

- ActiveModel
- ActiveModel::AttributeMethods
- ActiveModel::AttributeMethods::ClassMethods
- ActiveModel::AttributeMethods::ClassMethods::AttributeMethodMatcher
- ActiveModel::BlockValidator
- ActiveModel::Callbacks
- ActiveModel::Conversion
- ActiveModel::Dirty
- ActiveModel::EachValidator
- ActiveModel::Errors
- ActiveModel::Lint
- ActiveModel::Lint::Tests
- ActiveModel::MassAssignmentSecurity
- ActiveModel::MassAssignmentSecurity::BlackList
- ActiveModel::MassAssignmentSecurity::ClassMethods
- ActiveModel::MassAssignmentSecurity::Error
- ActiveModel::MassAssignmentSecurity::LoggerSanitizer
- ActiveModel::MassAssignmentSecurity::PermissionSet
- ActiveModel::MassAssignmentSecurity::Sanitizer
- ActiveModel::MassAssignmentSecurity::StrictSanitizer
- ActiveModel::MassAssignmentSecurity::WhiteList
- ActiveModel::MissingAttributeError
- ActiveModel::Name
- ActiveModel::Naming
- ActiveModel::Observer
- ActiveModel::ObserverArray
- ActiveModel::Observing
- ActiveModel::Observing::ClassMethods
- ActiveModel::SecurePassword
- ActiveModel::SecurePassword::ClassMethods
- ActiveModel::SecurePassword::InstanceMethodsOnActivation
- ActiveModel::Serialization
- ActiveModel::Serializers
- ActiveModel::Serializers::JSON
- ActiveModel::Serializers::Xml
- ActiveModel::StrictValidationFailed
- ActiveModel::Translation
- ActiveModel::Validations
- ActiveModel::Validations::AcceptanceValidator
- ActiveModel::Validations::Callbacks
- ActiveModel::Validations::Callbacks::ClassMethods
- ActiveModel::Validations::ClassMethods
- ActiveModel::Validations::ConfirmationValidator
- ActiveModel::Validations::ExclusionValidator
- ActiveModel::Validations::FormatValidator
- ActiveModel::Validations::HelperMethods
- ActiveModel::Validations::InclusionValidator
- ActiveModel::Validations::LengthValidator
- ActiveModel::Validations::NumericalityValidator
- ActiveModel::Validations::PresenceValidator
- ActiveModel::Validations::WithValidator
- ActiveModel::Validator

No matching classes.

# ActiveModel::Validations::LengthValidator

### Constants

CHECKS
MESSAGES
RESERVED_OPTIONS

### Public Class Methods

new(options) click to toggle source

    # File lib/active_model/validations/length.rb, line 12
    def initialize(options)
      if range = (options.delete(:in) || options.delete(:within))
        raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range)
        options[:minimum], options[:maximum] = range.begin, range.end
        options[:maximum] -= 1 if range.exclude_end?
      end

      super
    end

### Public Instance Methods

check_validity!() click to toggle source

    # File lib/active_model/validations/length.rb, line 22
    def check_validity!
      keys = CHECKS.keys & options.keys

      if keys.empty?
        raise ArgumentError, 'Range unspecified. Specify the :in, :within, :maximum, :minimum, or :is option.'
      end

      keys.each do |key|
        value = options[key]

        unless value.is_a?(Integer) && value >= 0
          raise ArgumentError, ":#{key} must be a nonnegative Integer"
        end
      end
    end

validate_each(record, attribute, value) click to toggle source

    # File lib/active_model/validations/length.rb, line 38
    def validate_each(record, attribute, value)
      value = tokenize(value)
      value_length = value.respond_to?(:length) ? value.length : value.to_s.length

      CHECKS.each do |key, validity_check|
        next unless check_value = options[key]
        next if value_length.send(validity_check, check_value)

        errors_options = options.except(*RESERVED_OPTIONS)
        errors_options[:count] = check_value

        default_message = options[MESSAGES[key]]
        errors_options[:message] ||= default_message if default_message

        record.errors.add(attribute, MESSAGES[key], errors_options)
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.