Class: GraphQL::Schema::Validator::NumericalityValidator

Inherits:
GraphQL::Schema::Validator show all
Defined in:
lib/graphql/schema/validator/numericality_validator.rb

Overview

Use this to assert numerical comparisons hold true for inputs.

Examples:

Require a number between 0 and 1


argument :batting_average, Float, required: true, validates: { numericality: { within: 0..1 } }

Require the number 42


argument :the_answer, Integer, required: true, validates: { numericality: { equal_to: 42 } }

Require a real number


argument :items_count, Integer, required: true, validates: { numericality: { greater_than_or_equal_to: 0 } }

Constant Summary

Constants included from FindInheritedValue::EmptyObjects

FindInheritedValue::EmptyObjects::EMPTY_ARRAY, FindInheritedValue::EmptyObjects::EMPTY_HASH

Instance Attribute Summary

Attributes inherited from GraphQL::Schema::Validator

#validated

Instance Method Summary collapse

Methods inherited from GraphQL::Schema::Validator

from_config, install, #partial_format, #permitted_empty_value?, uninstall, validate!

Constructor Details

#initialize(greater_than: nil, greater_than_or_equal_to: nil, less_than: nil, less_than_or_equal_to: nil, equal_to: nil, other_than: nil, odd: nil, even: nil, within: nil, message: "%{validated} must be %{comparison} %{target}", null_message: Validator::AllowNullValidator::MESSAGE, **default_options) ⇒ NumericalityValidator

Returns a new instance of NumericalityValidator.

Parameters:

  • greater_than (Integer) (defaults to: nil)
  • greater_than_or_equal_to (Integer) (defaults to: nil)
  • less_than (Integer) (defaults to: nil)
  • less_than_or_equal_to (Integer) (defaults to: nil)
  • equal_to (Integer) (defaults to: nil)
  • other_than (Integer) (defaults to: nil)
  • odd (Boolean) (defaults to: nil)
  • even (Boolean) (defaults to: nil)
  • within (Range) (defaults to: nil)
  • message (String) (defaults to: "%{validated} must be %{comparison} %{target}")

    used for all validation failures


30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/graphql/schema/validator/numericality_validator.rb', line 30

def initialize(
    greater_than: nil, greater_than_or_equal_to: nil,
    less_than: nil, less_than_or_equal_to: nil,
    equal_to: nil, other_than: nil,
    odd: nil, even: nil, within: nil,
    message: "%{validated} must be %{comparison} %{target}",
    null_message: Validator::AllowNullValidator::MESSAGE,
    **default_options
  )

  @greater_than = greater_than
  @greater_than_or_equal_to = greater_than_or_equal_to
  @less_than = less_than
  @less_than_or_equal_to = less_than_or_equal_to
  @equal_to = equal_to
  @other_than = other_than
  @odd = odd
  @even = even
  @within = within
  @message = message
  @null_message = null_message
  super(**default_options)
end

Instance Method Details

#validate(object, context, value) ⇒ Object


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
# File 'lib/graphql/schema/validator/numericality_validator.rb', line 54

def validate(object, context, value)
  if permitted_empty_value?(value)
    # pass in this case
  elsif value.nil? # @allow_null is handled in the parent class
    @null_message
  elsif @greater_than && value <= @greater_than
    partial_format(@message, { comparison: "greater than", target: @greater_than })
  elsif @greater_than_or_equal_to && value < @greater_than_or_equal_to
    partial_format(@message, { comparison: "greater than or equal to", target: @greater_than_or_equal_to })
  elsif @less_than && value >= @less_than
    partial_format(@message, { comparison: "less than", target: @less_than })
  elsif @less_than_or_equal_to && value > @less_than_or_equal_to
    partial_format(@message, { comparison: "less than or equal to", target: @less_than_or_equal_to })
  elsif @equal_to && value != @equal_to
    partial_format(@message, { comparison: "equal to", target: @equal_to })
  elsif @other_than && value == @other_than
    partial_format(@message, { comparison: "something other than", target: @other_than })
  elsif @even && !value.even?
    (partial_format(@message, { comparison: "even", target: "" })).strip
  elsif @odd && !value.odd?
    (partial_format(@message, { comparison: "odd", target: "" })).strip
  elsif @within && !@within.include?(value)
    partial_format(@message, { comparison: "within", target: @within })
  end
end