Class: ParametersValidator

Inherits:
ActiveModel::EachValidator
  • Object
show all
Defined in:
app/validators/parameters_validator.rb

Overview

Validates that attribute's value is Array which is the only valid type signature for serialized parameters.

Constant Summary collapse

TYPE_SIGNATURE_SENTENCE =

Sentence explaining the valid type signature for parameters.

'Valid parameters are an Array<Array(String, String)>.'

Instance Method Summary collapse

Instance Method Details

#validate_each(record, attribute, value) ⇒ void

This method returns an undefined value.

Validates that attribute's value on record is Array<Array(String, String)> which is the only valid type signature for serialized parameters.



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/validators/parameters_validator.rb', line 19

def validate_each(record, attribute, value)
  if value.is_a? Array
    value.each_with_index do |element, index|
      if element.is_a? Array
        if element.length != 2
          extreme = :few

          if element.length > 2
            extreme = :many
          end

          length_error = length_error_at(
              :extreme => extreme,
              :element => element,
              :index => index
          )

          record.errors[attribute] << length_error
        else
          parameter_name = element.first

          if parameter_name.is_a? String
            unless parameter_name.present?
              error = error_at(
                  :element => element,
                  :index => index,
                  :prefix => "has blank parameter name"
              )
              record.errors[attribute] << error
            end
          else
            error = error_at(
                :element => element,
                :index => index,
                :prefix => "has non-String parameter name (#{parameter_name.inspect})"
            )
            record.errors[attribute] << error
          end

          parameter_value = element.second

          unless parameter_value.is_a? String
            error = error_at(
                :element => element,
                :index => index,
                :prefix => "has non-String parameter value (#{parameter_value.inspect})"
            )
            record.errors[attribute] << error
          end
        end
      else
        error = error_at(
            :element => element,
            :index => index,
            :prefix => 'has non-Array'
        )
        record.errors[attribute] << error
      end
    end
  else
    record.errors[attribute] << "is not an Array.  #{TYPE_SIGNATURE_SENTENCE}"
  end
end