Class: ActiveModel::Validations::BytesizeValidator

Inherits:
EachValidator
  • Object
show all
Defined in:
lib/active_model/validations/bytesize.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ BytesizeValidator

Returns a new instance of BytesizeValidator.



6
7
8
9
# File 'lib/active_model/validations/bytesize.rb', line 6

def initialize(options = {})
  super
  @encoding = Encoding.find(options[:encoding]) if options[:encoding]
end

Instance Attribute Details

#encodingObject (readonly)

Returns the value of attribute encoding.



4
5
6
# File 'lib/active_model/validations/bytesize.rb', line 4

def encoding
  @encoding
end

Instance Method Details

#check_validity!Object



11
12
13
14
15
# File 'lib/active_model/validations/bytesize.rb', line 11

def check_validity!
  unless options[:maximum].is_a?(Integer) && options[:maximum] >= 0
    raise ArgumentError, ":maximum must be set to a nonnegative Integer"
  end
end

#validate_each(record, attribute, value) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_model/validations/bytesize.rb', line 17

def validate_each(record, attribute, value)
  string = ActiveRecord::DatabaseValidations::MySQL.value_for_column(value, options[:encoding])

  if string.bytesize > options[:maximum]
    errors_options = options.except(:too_many_bytes, :maximum)
    default_message = options[:too_many_bytes]
    errors_options[:count] = options[:maximum]
    errors_options[:message] ||= default_message if default_message
    record.errors.add(attribute, :too_many_bytes, **errors_options)
  end
end