nxt_registry 0.3.8 → 0.3.9
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/CHANGELOG.md +6 -0
- data/Gemfile.lock +5 -5
- data/README.md +10 -9
- data/lib/nxt_registry/registry.rb +40 -33
- data/lib/nxt_registry/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d8d5b1247dfc045e077ccf9d79cf3ea010c9c56434133f8210f3b77af439d0d
|
4
|
+
data.tar.gz: 9bd0fc656681a64856f6f21996914ebdeca063ea7cd5585746c29840c4f9694e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c136e4279f1fe2907e43ff24f96a28bdec6cf3b095842831c6a1834b468d174e138a370ede137cd318f879c23579c5664a93c5820e7409b6985d4829f7905f30
|
7
|
+
data.tar.gz: 2793ac826854219b0e5017e84264ce3908b28c1c9148cddef1dd37dc70b761445ab07d7bd7185f5f2cd58a220cdc1bcb065f6fe49e359a1716922db85fe4532f
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_registry (0.3.
|
4
|
+
nxt_registry (0.3.9)
|
5
5
|
activesupport
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (6.1.
|
10
|
+
activesupport (6.1.3)
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
12
|
i18n (>= 1.6, < 2)
|
13
13
|
minitest (>= 5.1)
|
@@ -16,11 +16,11 @@ GEM
|
|
16
16
|
coderay (1.1.3)
|
17
17
|
concurrent-ruby (1.1.8)
|
18
18
|
diff-lcs (1.4.4)
|
19
|
-
i18n (1.8.
|
19
|
+
i18n (1.8.9)
|
20
20
|
concurrent-ruby (~> 1.0)
|
21
21
|
method_source (1.0.0)
|
22
|
-
minitest (5.14.
|
23
|
-
pry (0.
|
22
|
+
minitest (5.14.4)
|
23
|
+
pry (0.14.0)
|
24
24
|
coderay (~> 1.1)
|
25
25
|
method_source (~> 1.0)
|
26
26
|
rake (12.3.3)
|
data/README.md
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
|
3
3
|
# NxtRegistry
|
4
4
|
|
5
|
-
`NxtRegistry` is a simple
|
6
|
-
structures.
|
5
|
+
`NxtRegistry` is a simple container that allows you to register and resolve values in nested structures.
|
7
6
|
|
8
7
|
## Installation
|
9
8
|
|
@@ -258,19 +257,21 @@ registry.resolve(:one)
|
|
258
257
|
# => 2020-01-02 23:56:18 +0100
|
259
258
|
```
|
260
259
|
|
261
|
-
###
|
260
|
+
### Resolve callbacks
|
262
261
|
|
263
|
-
You can
|
264
|
-
A
|
262
|
+
You can hook into the before and after resolver callbacks in case you need to lay hands on your values
|
263
|
+
before and / or after resolving. A callback can be anything that implements `:call` to which the value is passed.
|
265
264
|
|
266
265
|
```ruby
|
267
266
|
registry :example do
|
268
|
-
|
269
|
-
|
267
|
+
key_resolver ->(key) { key.strip }
|
268
|
+
resolver ->(value) { value.upcase }
|
269
|
+
|
270
|
+
register(:input, 'output')
|
270
271
|
end
|
271
272
|
|
272
|
-
registry.resolve(
|
273
|
-
# =>
|
273
|
+
registry.resolve(' input ')
|
274
|
+
# => 'OUTPUT'
|
274
275
|
```
|
275
276
|
|
276
277
|
### Transform keys
|
@@ -11,11 +11,12 @@ module NxtRegistry
|
|
11
11
|
@configured = false
|
12
12
|
@patterns = []
|
13
13
|
@config = config
|
14
|
+
@mutex = Mutex.new
|
14
15
|
|
15
16
|
configure(&config)
|
16
17
|
end
|
17
18
|
|
18
|
-
attr_reader :name
|
19
|
+
attr_reader :name, :mutex
|
19
20
|
attr_accessor :configured
|
20
21
|
|
21
22
|
def level(name, **options, &config)
|
@@ -186,51 +187,53 @@ module NxtRegistry
|
|
186
187
|
end
|
187
188
|
|
188
189
|
def __register(key, value, raise_on_key_already_registered: true)
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
190
|
+
mutex.synchronize do
|
191
|
+
key = if key.is_a?(Regexp)
|
192
|
+
patterns << key
|
193
|
+
key
|
194
|
+
else
|
195
|
+
transformed_key(key)
|
196
|
+
end
|
195
197
|
|
196
|
-
|
197
|
-
|
198
|
+
raise ArgumentError, "Not allowed to register values in a registry that contains nested registries" unless is_leaf
|
199
|
+
raise KeyError, "Keys are restricted to #{allowed_keys}" if key_not_allowed?(key)
|
198
200
|
|
199
|
-
|
201
|
+
on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise_on_key_already_registered
|
200
202
|
|
201
|
-
|
203
|
+
store[key] = value
|
204
|
+
end
|
202
205
|
end
|
203
206
|
|
204
207
|
def __resolve(key, raise_on_key_not_registered: true)
|
205
|
-
|
208
|
+
mutex.synchronize do
|
209
|
+
key = transformed_key(key)
|
206
210
|
|
207
|
-
|
208
|
-
|
209
|
-
store.fetch(key)
|
210
|
-
elsif (pattern = matching_pattern(key))
|
211
|
-
store.fetch(pattern)
|
212
|
-
else
|
213
|
-
if is_a_blank?(default)
|
214
|
-
return unless raise_on_key_not_registered
|
211
|
+
value = if is_leaf?
|
212
|
+
resolved_key = key_resolver.call(key)
|
215
213
|
|
216
|
-
|
214
|
+
if store.key?(resolved_key)
|
215
|
+
store.fetch(resolved_key)
|
216
|
+
elsif (pattern = matching_pattern(resolved_key))
|
217
|
+
store.fetch(pattern)
|
217
218
|
else
|
218
|
-
|
219
|
-
|
219
|
+
if is_a_blank?(default)
|
220
|
+
return unless raise_on_key_not_registered
|
220
221
|
|
221
|
-
|
222
|
+
on_key_not_registered && on_key_not_registered.call(key)
|
223
|
+
else
|
224
|
+
value = resolve_default(key)
|
225
|
+
return value unless memoize
|
226
|
+
|
227
|
+
store[key] ||= value
|
228
|
+
end
|
222
229
|
end
|
230
|
+
else
|
231
|
+
store[key] ||= default.call
|
223
232
|
end
|
224
|
-
else
|
225
|
-
store[key] ||= default.call
|
226
|
-
end
|
227
233
|
|
228
|
-
|
234
|
+
value = call_or_value(value, key)
|
229
235
|
|
230
|
-
if resolver
|
231
236
|
resolver.call(value)
|
232
|
-
else
|
233
|
-
value
|
234
237
|
end
|
235
238
|
end
|
236
239
|
|
@@ -293,7 +296,8 @@ module NxtRegistry
|
|
293
296
|
@default = options.fetch(:default) { Blank.new }
|
294
297
|
@memoize = options.fetch(:memoize) { true }
|
295
298
|
@call = options.fetch(:call) { true }
|
296
|
-
@resolver = options.fetch(:resolver,
|
299
|
+
@resolver = options.fetch(:resolver, ->(val) { val })
|
300
|
+
@key_resolver = options.fetch(:key_resolver, ->(val) { val })
|
297
301
|
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.is_a?(Regexp) ? key : key.to_s } }
|
298
302
|
@accessor = options.fetch(:accessor) { name }
|
299
303
|
|
@@ -302,18 +306,20 @@ module NxtRegistry
|
|
302
306
|
end
|
303
307
|
|
304
308
|
def define_accessors
|
305
|
-
%w[default memoize call resolver transform_keys on_key_already_registered on_key_not_registered].each do |attribute|
|
309
|
+
%w[default memoize call resolver key_resolver transform_keys on_key_already_registered on_key_not_registered].each do |attribute|
|
306
310
|
define_singleton_method attribute do |value = Blank.new, &block|
|
307
311
|
value = block if block
|
308
312
|
|
309
313
|
if is_a_blank?(value)
|
310
314
|
instance_variable_get("@#{attribute}")
|
311
315
|
else
|
316
|
+
options[attribute.to_sym] ||= value
|
312
317
|
instance_variable_set("@#{attribute}", value)
|
313
318
|
end
|
314
319
|
end
|
315
320
|
|
316
321
|
define_singleton_method "#{attribute}=" do |value|
|
322
|
+
options[attribute.to_sym] ||= value
|
317
323
|
instance_variable_set("@#{attribute}", value)
|
318
324
|
end
|
319
325
|
end
|
@@ -371,6 +377,7 @@ module NxtRegistry
|
|
371
377
|
def initialize_copy(original)
|
372
378
|
super
|
373
379
|
|
380
|
+
@mutex = Mutex.new
|
374
381
|
containers = %i[store options]
|
375
382
|
variables = %i[patterns required_keys allowed_keys namespace on_key_already_registered on_key_not_registered]
|
376
383
|
|
data/lib/nxt_registry/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nxt_registry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Robecke
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2021-
|
14
|
+
date: 2021-03-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|