Class: Hashcraft::Generic::Registry

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Singleton
Defined in:
lib/hashcraft/generic/registry.rb

Overview

A general data structure that can register and resolve objects by name. It also will act as a pass-thru if a non-string or non-symbol is passed through.

Direct Known Subclasses

Mutators, Transformers

Instance Method Summary collapse

Constructor Details

#initialize(map = {}) ⇒ Registry

Returns a new instance of Registry.



26
27
28
29
30
31
32
# File 'lib/hashcraft/generic/registry.rb', line 26

def initialize(map = {})
  @map = {}

  register_all(map)

  freeze
end

Instance Method Details

#register(name, value) ⇒ Object



40
41
42
43
44
# File 'lib/hashcraft/generic/registry.rb', line 40

def register(name, value)
  @map[name.to_s] = value

  self
end

#register_all(map) ⇒ Object



34
35
36
37
38
# File 'lib/hashcraft/generic/registry.rb', line 34

def register_all(map)
  (map || {}).each { |k, v| register(k, v) }

  self
end

#resolve(value) ⇒ Object



46
47
48
49
50
# File 'lib/hashcraft/generic/registry.rb', line 46

def resolve(value)
  return value unless lookup?(value)

  map[value.to_s] || raise(ArgumentError, "registration: #{value} not found")
end