class Grape::Validations::Types::Json

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.

Public Instance Methods

coerce(input) click to toggle source

Coerce the input into a JSON-like data structure.

@param input [String] a JSON-encoded parameter value @return [Hash,Array<Hash>,nil]

# 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) click to toggle source

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

@param value [Object] result of {#coerce} @return [true,false]

# File lib/grape/validations/types/json.rb, line 29
def value_coerced?(value)
  value.is_a?(::Hash) || coerced_collection?(value)
end

Protected Instance Methods

coerced_collection?(value) click to toggle source

Is the value an array of JSON-like objects?

@param value [Object] result of {#coerce} @return [true,false]

# File lib/grape/validations/types/json.rb, line 39
def coerced_collection?(value)
  value.is_a?(::Array) && value.all? { |i| i.is_a? ::Hash }
end