Class: Grape::Validations::Types::Json

Inherits:
Virtus::Attribute
  • Object
show all
Defined in:
lib/grape/validations/types/json.rb

Overview

+Virtus::Attribute+ implementation that handles coercion and type checking for parameters that are complex types given as JSON-encoded strings. It accepts both JSON objects and arrays of objects, and will coerce the input to a +Hash+ or +Array+ object respectively. In either case the Grape validation system will apply nested validation rules to all returned objects.

Direct Known Subclasses

JsonArray

Instance Method Summary collapse

Instance Method Details

#coerce(input) ⇒ Hash, ...

Coerce the input into a JSON-like data structure.

Parameters:

  • input (String)

    a JSON-encoded parameter value

Returns:

  • (Hash, Array<Hash>, nil)

18
19
20
21
22
# File 'lib/grape/validations/types/json.rb', line 18

def coerce(input)
  # Allow nulls and blank strings
  return if input.nil? || input =~ /^\s*$/
  JSON.parse(input, symbolize_names: true)
end

#value_coerced?(value) ⇒ true, false

Checks that the input was parsed successfully and isn't something odd such as an array of primitives.

Parameters:

  • value (Object)

    result of #coerce

Returns:

  • (true, false)

29
30
31
# File 'lib/grape/validations/types/json.rb', line 29

def value_coerced?(value)
  value.is_a?(::Hash) || coerced_collection?(value)
end