Class: NxtSchema::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/nxt_schema/registry.rb

Instance Method Summary collapse

Constructor Details

#initialize(namespace_separator: '::', namespace: '') ⇒ Registry

Returns a new instance of Registry.



3
4
5
6
7
# File 'lib/nxt_schema/registry.rb', line 3

def initialize(namespace_separator: '::', namespace: '')
  @store = ActiveSupport::HashWithIndifferentAccess.new
  @namespace_separator = namespace_separator
  @namespace = namespace
end

Instance Method Details

#register(key, value) ⇒ Object

register(‘strict::string’) Registry.register



14
15
16
17
18
# File 'lib/nxt_schema/registry.rb', line 14

def register(key, value)
  key = key.to_s
  ensure_key_not_registered_already(key)
  namespaced_store(key)[flat_key(key)] = value
end

#resolve(key, *args) ⇒ Object



20
21
22
23
24
25
# File 'lib/nxt_schema/registry.rb', line 20

def resolve(key, *args)
  value = resolve_value(key)
  return value unless value.respond_to?(:call)

  value.call(*args)
end

#resolve_value(key) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/nxt_schema/registry.rb', line 27

def resolve_value(key)
  key = key.to_s
  parts = namespaced_key_parts(key)[0..-2]

  namespaced_store = parts.inject(store) do |acc, key|
    acc.fetch(key)
  rescue KeyError
    raise KeyError, "No registry found at #{key} in #{acc}"
  end

  begin
    namespaced_store.fetch(flat_key(key))
  rescue KeyError
    raise KeyError, "Could not find #{flat_key(key)} in #{namespaced_store}"
  end
end