class GraphQL::Schema::Validator::LengthValidator
Use this to enforce a ‘.length` restriction on incoming values. It works for both Strings and Lists.
@example Allow no more than 10 IDs
argument :ids, [ID], required: true, validates: { length: { maximum: 10 } }
@example Require three selections
argument :ice_cream_preferences, [ICE_CREAM_FLAVOR], required: true, validates: { length: { is: 3 } }
Public Class Methods
new( maximum: nil, too_long: "%{validated} is too long (maximum is %{count})", minimum: nil, too_short: "%{validated} is too short (minimum is %{count})", is: nil, within: nil, wrong_length: "%{validated} is the wrong length (should be %{count})", message: nil, **default_options )
click to toggle source
@param maximum [Integer] @param too_long [String] Used when ‘maximum` is exceeded or value is greater than `within` @param minimum [Integer] @param too_short [String] Used with value is less than `minimum` or less than `within` @param is [Integer] Exact length requirement @param wrong_length [String] Used when value doesn’t match ‘is` @param within [Range] An allowed range (becomes `minimum:` and `maximum:` under the hood) @param message [String]
Calls superclass method
GraphQL::Schema::Validator::new
# File lib/graphql/schema/validator/length_validator.rb, line 25 def initialize( maximum: nil, too_long: "%{validated} is too long (maximum is %{count})", minimum: nil, too_short: "%{validated} is too short (minimum is %{count})", is: nil, within: nil, wrong_length: "%{validated} is the wrong length (should be %{count})", message: nil, **default_options ) if within && (minimum || maximum) raise ArgumentError, "`length: { ... }` may include `within:` _or_ `minimum:`/`maximum:`, but not both" end # Under the hood, `within` is decomposed into `minimum` and `maximum` @maximum = maximum || (within && within.max) @too_long = message || too_long @minimum = minimum || (within && within.min) @too_short = message || too_short @is = is @wrong_length = message || wrong_length super(**default_options) end
Public Instance Methods
validate(_object, _context, value)
click to toggle source
# File lib/graphql/schema/validator/length_validator.rb, line 45 def validate(_object, _context, value) return if permitted_empty_value?(value) # pass in this case length = value.nil? ? 0 : value.length if @maximum && length > @maximum partial_format(@too_long, { count: @maximum }) elsif @minimum && length < @minimum partial_format(@too_short, { count: @minimum }) elsif @is && length != @is partial_format(@wrong_length, { count: @is }) end end