nxt_registry 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +12 -12
- data/lib/nxt_registry.rb +4 -4
- data/lib/nxt_registry/registry.rb +6 -3
- data/lib/nxt_registry/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b8c5142f31e6c1d053ea403da1bdbe76b800afb40648a7660a245809cbd4b71
|
4
|
+
data.tar.gz: 7bd26fcda427f8fb20033e0ee9d39783c84849fd26d9f70cbee5c32ef5676f72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ab7450365d3cb0ece3ae837f42c981d986441ce571cf5122d2cda68925192e20da3fa6fff1e33b379270459edb63715c76e1049043346d423471702df038f38
|
7
|
+
data.tar.gz: dd6a35358dc963e63751ac3f34c80ab3c7a665c9551968f8eb8d336d0be6db0aa4c4ce4723af50e06dc79b129b7f310e6fe402e4667c509a80a102265821bd59
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -21,32 +21,36 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
-
|
24
|
+
### Restrict attributes to a certain set
|
25
25
|
|
26
26
|
Use `attrs` to restrict which attributes can be registered on a specific level.
|
27
27
|
|
28
|
-
|
28
|
+
### Default values
|
29
29
|
|
30
30
|
Use `default` to register a default value that will be resolved in case an attribute was not registered.
|
31
31
|
|
32
|
-
|
32
|
+
### Blocks
|
33
33
|
|
34
34
|
When you register a block value that can be called, tt will automatically be called when you resolve the value.
|
35
35
|
If that's not what you want, you can configure your registry (on each level) not to call blocks directly by defining `call false`
|
36
36
|
|
37
|
-
|
37
|
+
### Memoize
|
38
38
|
|
39
39
|
Values are memoized per default. Switch it off with `default false`
|
40
40
|
|
41
|
-
|
41
|
+
### Resolver
|
42
42
|
|
43
43
|
You can register a resolver block if you want to lay hands on your values after they have been resolved.
|
44
44
|
|
45
|
-
|
45
|
+
### Transform keys
|
46
46
|
|
47
47
|
NxtRegistry uses a plain ruby hash to store values internally. Per default all keys used are transformed with `&:to_s`.
|
48
48
|
Thus you can use symbols or strings to register and resolve values. If it's not what you want, switch it off with `transform_keys false`
|
49
|
-
or define your own key transformer by assigning a block `transform_keys ->(key) { key.upcase }`
|
49
|
+
or define your own key transformer by assigning a block `transform_keys ->(key) { key.upcase }`
|
50
|
+
|
51
|
+
### Customize :raise_key_already_registered_error and :raise_key_not_registered_error
|
52
|
+
|
53
|
+
Customize what kind of errors are being raised in case a of a key was not registered or was already registered.
|
50
54
|
|
51
55
|
|
52
56
|
```ruby
|
@@ -57,11 +61,7 @@ class MyClass
|
|
57
61
|
@passengers ||= begin
|
58
62
|
registry :from do
|
59
63
|
nested :to do
|
60
|
-
nested :via do
|
61
|
-
attrs :train, :car, :plane, :horse
|
62
|
-
default -> { [] }
|
63
|
-
memoize true
|
64
|
-
call true
|
64
|
+
nested :via, memoize: true, call: true, default: -> { [] }, attrs: %i[train car plane horse] do
|
65
65
|
resolver ->(value) { value } # do something with your registered value here
|
66
66
|
transform_keys ->(key) { key.upcase } # transform keys
|
67
67
|
end
|
data/lib/nxt_registry.rb
CHANGED
@@ -8,11 +8,11 @@ require "nxt_registry/registry"
|
|
8
8
|
require "nxt_registry/recursive_registry"
|
9
9
|
|
10
10
|
module NxtRegistry
|
11
|
-
def registry(name, &config)
|
12
|
-
Registry.new(name, &config)
|
11
|
+
def registry(name, **options, &config)
|
12
|
+
Registry.new(name, **options, &config)
|
13
13
|
end
|
14
14
|
|
15
|
-
def recursive_registry(name, &config)
|
16
|
-
RecursiveRegistry.new(name, &config)
|
15
|
+
def recursive_registry(name, **options, &config)
|
16
|
+
RecursiveRegistry.new(name, **options, &config)
|
17
17
|
end
|
18
18
|
end
|
@@ -6,6 +6,7 @@ module NxtRegistry
|
|
6
6
|
@is_leaf = true
|
7
7
|
@namespace = [parent, self].compact.map(&:name).join('.')
|
8
8
|
@config = config
|
9
|
+
@options = options
|
9
10
|
@store = {}
|
10
11
|
@attrs = nil
|
11
12
|
|
@@ -100,6 +101,7 @@ module NxtRegistry
|
|
100
101
|
def configure(&block)
|
101
102
|
define_accessors
|
102
103
|
define_interface
|
104
|
+
attrs(*Array(options.fetch(:attrs, [])))
|
103
105
|
|
104
106
|
if block.present?
|
105
107
|
if block.arity == 1
|
@@ -112,7 +114,7 @@ module NxtRegistry
|
|
112
114
|
|
113
115
|
private
|
114
116
|
|
115
|
-
attr_reader :namespace, :parent, :config, :store
|
117
|
+
attr_reader :namespace, :parent, :config, :store, :options
|
116
118
|
attr_accessor :is_leaf
|
117
119
|
|
118
120
|
def is_leaf?
|
@@ -125,7 +127,7 @@ module NxtRegistry
|
|
125
127
|
raise ArgumentError, "Not allowed to register values in a registry that contains nested registries" unless is_leaf
|
126
128
|
raise KeyError, "Keys are restricted to #{attrs.keys}" if attribute_not_allowed?(key)
|
127
129
|
|
128
|
-
on_key_already_registered.call(key) if store[key] && raise
|
130
|
+
on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise
|
129
131
|
|
130
132
|
store[key] = value
|
131
133
|
end
|
@@ -140,7 +142,7 @@ module NxtRegistry
|
|
140
142
|
if default.is_a?(Blank)
|
141
143
|
return unless raise
|
142
144
|
|
143
|
-
on_key_not_registered.call(key)
|
145
|
+
on_key_not_registered && on_key_not_registered.call(key)
|
144
146
|
else
|
145
147
|
value = resolve_default
|
146
148
|
return value unless memoize
|
@@ -198,6 +200,7 @@ module NxtRegistry
|
|
198
200
|
@call = options.fetch(:call) { true }
|
199
201
|
@resolver = options.fetch(:resolver, false)
|
200
202
|
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.to_s } }
|
203
|
+
|
201
204
|
@on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
|
202
205
|
@on_key_not_registered = options.fetch(:on_key_not_registered) { ->(key) { raise_key_not_registered_error(key) } }
|
203
206
|
end
|
data/lib/nxt_registry/version.rb
CHANGED