Class: AMA::Entity::Mapper::Type::Registry

Inherits:
Object
  • Object
show all
Includes:
Mixin::Errors
Defined in:
lib/ama-entity-mapper/type/registry.rb

Overview

Holds all registered types

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Mixin::Errors

#compliance_error, #mapping_error, #raise_if_internal, #validation_error

Constructor Details

#initializeRegistry

Returns a new instance of Registry.



24
25
26
# File 'lib/ama-entity-mapper/type/registry.rb', line 24

def initialize
  @types = {}
end

Instance Attribute Details

#typesObject

Returns the value of attribute types.



22
23
24
# File 'lib/ama-entity-mapper/type/registry.rb', line 22

def types
  @types
end

Instance Method Details

#[](klass) ⇒ Object

Parameters:

  • klass (Class, Module)


44
45
46
# File 'lib/ama-entity-mapper/type/registry.rb', line 44

def [](klass)
  @types[klass]
end

#find(klass) ⇒ AMA::Entity::Mapper::Type, NilClass

Parameters:

  • klass (Class, Module)

Returns:



71
72
73
74
# File 'lib/ama-entity-mapper/type/registry.rb', line 71

def find(klass)
  candidates = select(klass)
  candidates.empty? ? nil : candidates.first
end

#find!(klass) ⇒ AMA::Entity::Mapper::Type

Parameters:

  • klass (Class, Module)

Returns:



78
79
80
81
82
83
# File 'lib/ama-entity-mapper/type/registry.rb', line 78

def find!(klass)
  candidate = find(klass)
  return candidate if candidate
  message = "Could not find any registered type for class #{klass}"
  compliance_error(message)
end

#key?(klass) ⇒ Boolean Also known as: registered?

Parameters:

  • klass (Class)

Returns:

  • (Boolean)


54
55
56
# File 'lib/ama-entity-mapper/type/registry.rb', line 54

def key?(klass)
  @types.key?(klass)
end

#register(type) ⇒ Object

Parameters:



49
50
51
# File 'lib/ama-entity-mapper/type/registry.rb', line 49

def register(type)
  @types[type.type] = type
end

#resolvable?(klass) ⇒ TrueClass, FalseClass

Parameters:

  • klass (Class, Module)

Returns:

  • (TrueClass, FalseClass)


87
88
89
# File 'lib/ama-entity-mapper/type/registry.rb', line 87

def resolvable?(klass)
  !select(klass).empty?
end

#select(klass) ⇒ Array<AMA::Entity::Mapper::Type>

Parameters:

  • klass (Class, Module)

Returns:



62
63
64
65
66
67
# File 'lib/ama-entity-mapper/type/registry.rb', line 62

def select(klass)
  types = class_hierarchy(klass).map do |entry|
    @types[entry]
  end
  types.reject(&:nil?)
end

#with_default_typesAMA::Entity::Mapper::Type::Registry



29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ama-entity-mapper/type/registry.rb', line 29

def with_default_types
  register(BuiltIn::EnumerableType::INSTANCE)
  register(BuiltIn::ArrayType::INSTANCE)
  register(BuiltIn::HashType::INSTANCE)
  register(BuiltIn::SetType::INSTANCE)
  register(BuiltIn::HashTupleType::INSTANCE)
  register(BuiltIn::RationalType::INSTANCE)
  register(BuiltIn::DateTimeType::INSTANCE)
  BuiltIn::PrimitiveType::ALL.each do |type|
    register(type)
  end
  self
end