Module: Attributor::Container::ClassMethods

Defined in:
lib/attributor/types/container.rb

Instance Method Summary collapse

Instance Method Details

#decode_json(value, context = Attributor::DEFAULT_ROOT_CONTEXT) ⇒ Array

Decode JSON string that encapsulates an array

Parameters:

  • value (String)

    JSON string

Returns:

  • (Array)

    a normal Ruby Array



21
22
23
24
25
26
27
28
29
30
31
32
33
# 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) ⇒ Object



12
13
14
# 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