Class: Grape::Validations::Validators::LengthValidator

Inherits:
Base
  • Object
show all
Defined in:
lib/grape/validations/validators/length_validator.rb

Instance Attribute Summary

Attributes inherited from Base

#attrs

Instance Method Summary collapse

Methods inherited from Base

default_message_key, #fail_fast?, inherited, new, #validate, #validate!

Constructor Details

#initialize(attrs, options, required, scope, opts) ⇒ LengthValidator

Returns a new instance of LengthValidator.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/grape/validations/validators/length_validator.rb', line 7

def initialize(attrs, options, required, scope, opts)
  super

  @min, @max, @is = @options.values_at(:min, :max, :is)
  validate_boundary!(:min, @min)
  validate_boundary!(:max, @max)
  raise ArgumentError, "min #{@min} cannot be greater than max #{@max}" if @min && @max && @min > @max

  return if @is.nil?
  raise ArgumentError, 'is must be an integer greater than zero' unless @is.is_a?(Integer) && @is.positive?
  raise ArgumentError, 'is cannot be combined with min or max' unless @min.nil? && @max.nil?
end

Instance Method Details

#validate_param!(attr_name, params) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/grape/validations/validators/length_validator.rb', line 20

def validate_param!(attr_name, params)
  param = params[attr_name]

  return unless param.respond_to?(:length)

  return unless (!@min.nil? && param.length < @min) || (!@max.nil? && param.length > @max) || (!@is.nil? && param.length != @is)

  validation_error!(attr_name, message do
    if @min && @max
      translate(:length, min: @min, max: @max)
    elsif @min
      translate(:length_min, min: @min)
    elsif @max
      translate(:length_max, max: @max)
    else
      translate(:length_is, is: @is)
    end
  end)
end