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 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
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
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