class AMA::Entity::Mapper::Type::BuiltIn::HashType
Predefined type for Hash class
Constants
- INSTANCE
Public Class Methods
new()
click to toggle source
Calls superclass method
AMA::Entity::Mapper::Type::new
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 20 def initialize super(::Hash) define_attribute define_enumerator define_injector define_normalizer define_denormalizer end
Private Instance Methods
define_attribute()
click to toggle source
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 31 def define_attribute type = HashTupleType.new type = type.resolve( type.parameter!(:K) => parameter!(:K), type.parameter!(:V) => parameter!(:V) ) attribute!(:_tuple, type, virtual: true) end
define_denormalizer()
click to toggle source
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 58 def define_denormalizer denormalizer_block do |input, type, context = nil, *| input = input.to_h if input.respond_to?(:to_h) break input if input.is_a?(Hash) message = "Expected to receive hash, #{input.class} received" type.mapping_error(message, context: context) end end
define_enumerator()
click to toggle source
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 40 def define_enumerator enumerator_block do |entity, type, *| ::Enumerator.new do |yielder| entity.each do |key, value| tuple = Aux::HashTuple.new(key: key, value: value) attribute = type.attributes[:_tuple] yielder << [attribute, tuple, Path::Segment.index(key)] end end end end
define_injector()
click to toggle source
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 52 def define_injector injector_block do |entity, _, _, tuple, *| entity[tuple.key] = tuple.value end end
define_normalizer()
click to toggle source
# File lib/ama-entity-mapper/type/builtin/hash_type.rb, line 67 def define_normalizer normalizer_block do |entity, *| intermediate = entity.map do |key, value| [key, value] end Hash[intermediate] end end