Class: NxtSchema::Registry
- Inherits:
-
Object
- Object
- NxtSchema::Registry
- Defined in:
- lib/nxt_schema/registry.rb
Instance Method Summary collapse
-
#initialize(namespace_separator: '::', namespace: '') ⇒ Registry
constructor
A new instance of Registry.
-
#register(key, value) ⇒ Object
register(‘strict::string’) Registry.register.
- #resolve(key, *args) ⇒ Object
- #resolve_value(key) ⇒ Object
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 |