module Attributor::Container::ClassMethods

Public Instance Methods

decode_json(value, context = Attributor::DEFAULT_ROOT_CONTEXT) click to toggle source

Decode JSON string that encapsulates an array

@param value [String] JSON string @return [Array] a normal Ruby Array

# File lib/attributor/types/container.rb, line 21
def decode_json(value, context = Attributor::DEFAULT_ROOT_CONTEXT)
  raise Attributor::DeserializationError.new(context: context, from: value.class, encoding: 'JSON', value: value) unless value.is_a? ::String

  # attempt to parse as JSON
  parsed_value = JSON.parse(value)
  unless valid_type?(parsed_value)
    raise Attributor::CoercionError.new(context: context, from: parsed_value.class, to: name, value: parsed_value)
  end

  parsed_value
rescue JSON::JSONError
  raise Attributor::DeserializationError.new(context: context, from: value.class, encoding: 'JSON', value: value)
end
decode_string(_value, context = Attributor::DEFAULT_ROOT_CONTEXT) click to toggle source
# File lib/attributor/types/container.rb, line 12
def decode_string(_value, context = Attributor::DEFAULT_ROOT_CONTEXT)
  raise "#{name}.decode_string is not implemented. (when decoding #{Attributor.humanize_context(context)})"
end