class IknowParams::Serializer::HashOf

Serialize a hash structure of application types to JSON types. Does not support fully rendering to/from a JSON string.

Attributes

key_serializer[R]
value_serializer[R]

Public Class Methods

new(key_serializer, value_serializer) click to toggle source
Calls superclass method IknowParams::Serializer::new
# File lib/iknow_params/serializer/hash_of.rb, line 9
def initialize(key_serializer, value_serializer)
  super(::Hash)
  @key_serializer   = key_serializer
  @value_serializer = value_serializer
end

Public Instance Methods

dump(structure, json: true) click to toggle source
# File lib/iknow_params/serializer/hash_of.rb, line 30
def dump(structure, json: true)
  matches_type!(structure)
  structure.each_with_object({}) do |(key, value), result|
    jkey   = key_serializer.dump(key, json: false)
    jvalue = value_serializer.dump(value, json: json)
    result[jkey] = jvalue
  end
end
load(jstructure) click to toggle source
# File lib/iknow_params/serializer/hash_of.rb, line 15
def load(jstructure)
  jstructure = jstructure.to_unsafe_h if jstructure.is_a?(ActionController::Parameters)

  unless jstructure.is_a?(Hash)
    raise IknowParams::Serializer::LoadError.new(
            "Incorrect type for HashOf: #{jstructure.inspect}:#{jstructure.class.name} is not a hash")
  end

  jstructure.each_with_object({}) do |(jkey, jvalue), result|
    key   = key_serializer.load(jkey)
    value = value_serializer.load(jvalue)
    result[key] = value
  end
end
matches_type?(vals) click to toggle source
Calls superclass method IknowParams::Serializer#matches_type?
# File lib/iknow_params/serializer/hash_of.rb, line 39
def matches_type?(vals)
  super(vals) && vals.all? do |k_val, v_val|
    key_serializer.matches_type?(k_val) && value_serializer.matches_type?(v_val)
  end
end