nxt_registry 0.3.4 → 0.3.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/Gemfile.lock +18 -18
- data/README.md +63 -12
- data/lib/nxt_registry.rb +1 -1
- data/lib/nxt_registry/errors.rb +2 -0
- data/lib/nxt_registry/registry.rb +105 -48
- data/lib/nxt_registry/version.rb +1 -1
- metadata +7 -8
- data/lib/nxt_registry/attribute.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3263cdc8c48171dfc6ecfe2bbe2eedb97d72e0ab8d367945ed04ec2480b2caa0
|
4
|
+
data.tar.gz: a7f48fa6c75182d1489cdcb28f19127892bd63b3de655e3e0db40e1b81204031
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 672c5855be89793548452a157d5c196b7a79271269ff43d056b18a2711b2c6ce7fb7cccca11892e05161fcf682eed15b55d7194bc27968d0d99b1066ae8b5ecc
|
7
|
+
data.tar.gz: ae6e5c77734afc4d9f732e7179fa62ef1f4b96c5a1278632cb91ce79ea33b803bd22b83f4084711d674698b786f6749033349ed541b152c05b43532936d53df3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
# v0.3.10 2021-03-30
|
2
|
+
- Do not synchronize resolve with mutex
|
3
|
+
|
4
|
+
# v0.3.9 2021-03-10
|
5
|
+
|
6
|
+
- Synchronize access with Mutex
|
7
|
+
- Add key_resolver
|
8
|
+
- Fix: Inherit options set through accessors
|
9
|
+
|
10
|
+
# v0.3.5 2020-12-23
|
11
|
+
|
12
|
+
- Allow to inherit options in nested registries
|
13
|
+
|
14
|
+
# v0.3.5 2020-12-04
|
15
|
+
|
16
|
+
- Allow patterns as keys
|
17
|
+
|
1
18
|
# v0.3.4 2020-12-04
|
2
19
|
|
3
20
|
- Bring back Singleton
|
data/Gemfile.lock
CHANGED
@@ -1,26 +1,26 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_registry (0.3.
|
4
|
+
nxt_registry (0.3.10)
|
5
5
|
activesupport
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (6.
|
10
|
+
activesupport (6.1.3.2)
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
-
i18n (>=
|
13
|
-
minitest (
|
14
|
-
tzinfo (~>
|
15
|
-
zeitwerk (~> 2.
|
12
|
+
i18n (>= 1.6, < 2)
|
13
|
+
minitest (>= 5.1)
|
14
|
+
tzinfo (~> 2.0)
|
15
|
+
zeitwerk (~> 2.3)
|
16
16
|
coderay (1.1.3)
|
17
|
-
concurrent-ruby (1.1.
|
17
|
+
concurrent-ruby (1.1.8)
|
18
18
|
diff-lcs (1.4.4)
|
19
|
-
i18n (1.8.
|
19
|
+
i18n (1.8.10)
|
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.1)
|
24
24
|
coderay (~> 1.1)
|
25
25
|
method_source (~> 1.0)
|
26
26
|
rake (12.3.3)
|
@@ -28,24 +28,24 @@ GEM
|
|
28
28
|
rspec-core (~> 3.10.0)
|
29
29
|
rspec-expectations (~> 3.10.0)
|
30
30
|
rspec-mocks (~> 3.10.0)
|
31
|
-
rspec-core (3.10.
|
31
|
+
rspec-core (3.10.1)
|
32
32
|
rspec-support (~> 3.10.0)
|
33
|
-
rspec-expectations (3.10.
|
33
|
+
rspec-expectations (3.10.1)
|
34
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
35
|
rspec-support (~> 3.10.0)
|
36
|
-
rspec-mocks (3.10.
|
36
|
+
rspec-mocks (3.10.1)
|
37
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
38
38
|
rspec-support (~> 3.10.0)
|
39
|
-
rspec-support (3.10.
|
39
|
+
rspec-support (3.10.1)
|
40
40
|
rspec_junit_formatter (0.4.1)
|
41
41
|
rspec-core (>= 2, < 4, != 2.12.0)
|
42
|
-
|
43
|
-
|
44
|
-
thread_safe (~> 0.1)
|
42
|
+
tzinfo (2.0.4)
|
43
|
+
concurrent-ruby (~> 1.0)
|
45
44
|
zeitwerk (2.4.2)
|
46
45
|
|
47
46
|
PLATFORMS
|
48
47
|
ruby
|
48
|
+
x86_64-darwin-19
|
49
49
|
|
50
50
|
DEPENDENCIES
|
51
51
|
bundler (~> 2.0)
|
@@ -56,4 +56,4 @@ DEPENDENCIES
|
|
56
56
|
rspec_junit_formatter
|
57
57
|
|
58
58
|
BUNDLED WITH
|
59
|
-
2.
|
59
|
+
2.2.4
|
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
|
|
@@ -82,6 +81,30 @@ OtherExample.registry(:errors).resolve(KeyError)
|
|
82
81
|
OtherExample.registry(:country_codes).resolve(:germany)
|
83
82
|
# => :de
|
84
83
|
```
|
84
|
+
|
85
|
+
## Register Patterns
|
86
|
+
|
87
|
+
You can also register values with patterns as keys. Non pattern keys are always evaluated first and then patterns
|
88
|
+
will be tried to match by definition sequence.
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
class Example
|
92
|
+
extend NxtRegistry
|
93
|
+
|
94
|
+
registry :status_codes do
|
95
|
+
register(/\A4\d{2}\z/, 'Client errors')
|
96
|
+
register(/\A5.*\z/, 'Server errors')
|
97
|
+
register('422', 'Unprocessable Entity')
|
98
|
+
register(:'503', 'Internal Server Error')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
Example.registry(:status_codes).resolve('503') # => "Internal Server Error"
|
103
|
+
Example.registry(:status_codes).resolve(503) # => "Internal Server Error"
|
104
|
+
Example.registry(:status_codes).resolve(422) # => "Unprocessable Entity"
|
105
|
+
Example.registry(:status_codes).resolve(404) # => "Client Errors"
|
106
|
+
```
|
107
|
+
|
85
108
|
### Readers
|
86
109
|
|
87
110
|
Access your defined registries with the `registry(:country_code)` method.
|
@@ -111,6 +134,23 @@ Nested.registry(:developers).resolve(:frontend, :igor)
|
|
111
134
|
# => 'Igor'
|
112
135
|
```
|
113
136
|
|
137
|
+
#### Inherit options in nested registries
|
138
|
+
|
139
|
+
```ruby
|
140
|
+
class Nested
|
141
|
+
extend NxtRegistry
|
142
|
+
|
143
|
+
registry :developers, default: 'options can be inherited' do
|
144
|
+
register(:frontend, inherit_options: true) do
|
145
|
+
register(:igor, 'Igor')
|
146
|
+
register(:ben, 'Ben')
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
Nested.registry(:developers).resolve(:frontend, :blank)
|
152
|
+
# => 'options can be inherited'
|
153
|
+
```
|
114
154
|
|
115
155
|
### Defining specific nesting levels of a registry
|
116
156
|
|
@@ -164,12 +204,21 @@ Layer.registry(:path).from(:munich).to(:amsterdam).via(:train) # => 'train'
|
|
164
204
|
|
165
205
|
*Note that this feature is also available for registries with a single level only.*
|
166
206
|
|
167
|
-
### Restrict
|
207
|
+
### Restrict keys to a certain set
|
168
208
|
|
169
|
-
Use `
|
209
|
+
Use `allowed_keys` to restrict which keys can be registered on a specific level.
|
170
210
|
|
171
211
|
```ruby
|
172
|
-
registry :example,
|
212
|
+
registry :example, allowed_keys: %w[one two three]
|
213
|
+
```
|
214
|
+
|
215
|
+
### Require a certain set of keys to be registered
|
216
|
+
|
217
|
+
Use `required_keys` to enforce a certain set of keys to be registered on a specific level. This is especially helpful
|
218
|
+
if you use registries in multiple places and you want to ensure they all register the same set of keys.
|
219
|
+
|
220
|
+
```ruby
|
221
|
+
registry :example, required_keys: %w[one two three]
|
173
222
|
```
|
174
223
|
|
175
224
|
### Default values
|
@@ -208,19 +257,21 @@ registry.resolve(:one)
|
|
208
257
|
# => 2020-01-02 23:56:18 +0100
|
209
258
|
```
|
210
259
|
|
211
|
-
###
|
260
|
+
### Resolve callbacks
|
212
261
|
|
213
|
-
You can
|
214
|
-
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.
|
215
264
|
|
216
265
|
```ruby
|
217
266
|
registry :example do
|
218
|
-
|
219
|
-
|
267
|
+
key_resolver ->(key) { key.strip }
|
268
|
+
resolver ->(value) { value.upcase }
|
269
|
+
|
270
|
+
register(:input, 'output')
|
220
271
|
end
|
221
272
|
|
222
|
-
registry.resolve(
|
223
|
-
# =>
|
273
|
+
registry.resolve(' input ')
|
274
|
+
# => 'OUTPUT'
|
224
275
|
```
|
225
276
|
|
226
277
|
### Transform keys
|
data/lib/nxt_registry.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
+
require 'active_support'
|
1
2
|
require 'active_support/core_ext'
|
2
3
|
require 'nxt_registry/version'
|
3
4
|
require 'nxt_registry/blank'
|
4
|
-
require 'nxt_registry/attribute'
|
5
5
|
require 'nxt_registry/errors'
|
6
6
|
require 'nxt_registry/registry_builder'
|
7
7
|
require 'nxt_registry/registry'
|
data/lib/nxt_registry/errors.rb
CHANGED
@@ -8,14 +8,15 @@ module NxtRegistry
|
|
8
8
|
@namespace = build_namespace
|
9
9
|
@config = config
|
10
10
|
@store = {}
|
11
|
-
@attrs = nil
|
12
11
|
@configured = false
|
12
|
+
@patterns = []
|
13
|
+
@config = config
|
14
|
+
@mutex = Mutex.new
|
13
15
|
|
14
|
-
setup_defaults(options)
|
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)
|
@@ -38,27 +39,33 @@ module NxtRegistry
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def registry(name, **options, &config)
|
41
|
-
opts = options
|
42
|
+
opts = conditionally_inherit_options(options)
|
42
43
|
register(name, Registry.new(name, **opts, &config))
|
43
44
|
end
|
44
45
|
|
45
46
|
def registry!(name, **options, &config)
|
46
|
-
opts = options
|
47
|
+
opts = conditionally_inherit_options(options)
|
47
48
|
register!(name, Registry.new(name, **opts, &config))
|
48
49
|
end
|
49
50
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
51
|
+
def required_keys(*keys)
|
52
|
+
@required_keys ||= []
|
53
|
+
return @required_keys if keys.empty?
|
54
|
+
|
55
|
+
@required_keys += keys.map { |key| transformed_key(key) }
|
56
|
+
end
|
57
|
+
|
58
|
+
def allowed_keys(*keys)
|
59
|
+
@allowed_keys ||= []
|
60
|
+
return @allowed_keys if keys.empty?
|
53
61
|
|
54
|
-
|
62
|
+
@allowed_keys += keys.map { |key| transformed_key(key) }
|
55
63
|
end
|
56
64
|
|
57
|
-
|
58
|
-
@attrs ||= {}
|
59
|
-
return @attrs unless args.any?
|
65
|
+
alias attrs allowed_keys # @deprecated
|
60
66
|
|
61
|
-
|
67
|
+
def attr(key)
|
68
|
+
allowed_keys(key) # @deprecated
|
62
69
|
end
|
63
70
|
|
64
71
|
def register(key = Blank.new, value = Blank.new, **options, &block)
|
@@ -126,15 +133,18 @@ module NxtRegistry
|
|
126
133
|
end
|
127
134
|
|
128
135
|
def fetch(key, *args, &block)
|
129
|
-
|
136
|
+
key = matching_key(key)
|
137
|
+
store.fetch(key, *args, &block)
|
130
138
|
end
|
131
139
|
|
132
140
|
delegate :size, :values, :each, :freeze, to: :store
|
133
141
|
|
134
142
|
def configure(&block)
|
143
|
+
setup_defaults(options)
|
135
144
|
define_accessors
|
136
145
|
define_interface
|
137
|
-
|
146
|
+
allowed_keys(*Array(options.fetch(:allowed_keys, [])))
|
147
|
+
required_keys(*Array(options.fetch(:required_keys, [])))
|
138
148
|
|
139
149
|
if block.present?
|
140
150
|
if block.arity == 1
|
@@ -144,6 +154,7 @@ module NxtRegistry
|
|
144
154
|
end
|
145
155
|
end
|
146
156
|
|
157
|
+
validate_required_keys_given
|
147
158
|
self.configured = true
|
148
159
|
end
|
149
160
|
|
@@ -151,34 +162,59 @@ module NxtRegistry
|
|
151
162
|
"Registry[#{name}] -> #{store.to_s}"
|
152
163
|
end
|
153
164
|
|
154
|
-
|
165
|
+
alias inspect to_s
|
155
166
|
|
156
167
|
private
|
157
168
|
|
158
|
-
attr_reader :namespace, :parent, :config, :store, :options, :accessor
|
169
|
+
attr_reader :namespace, :parent, :config, :store, :options, :accessor, :patterns
|
159
170
|
attr_accessor :is_leaf, :interface_defined
|
160
171
|
|
172
|
+
def conditionally_inherit_options(opts)
|
173
|
+
base = opts.delete(:inherit_options) ? options : {}
|
174
|
+
base.merge(opts).merge(parent: self)
|
175
|
+
end
|
176
|
+
|
177
|
+
def validate_required_keys_given
|
178
|
+
required_keys.each do |key|
|
179
|
+
next if store.key?(key)
|
180
|
+
|
181
|
+
raise Errors::RequiredKeyMissing, "Required key '#{key}' missing in #{self}"
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
161
185
|
def is_leaf?
|
162
186
|
@is_leaf
|
163
187
|
end
|
164
188
|
|
165
189
|
def __register(key, value, raise_on_key_already_registered: true)
|
166
|
-
|
190
|
+
mutex.synchronize do
|
191
|
+
key = if key.is_a?(Regexp)
|
192
|
+
patterns << key
|
193
|
+
key
|
194
|
+
else
|
195
|
+
transformed_key(key)
|
196
|
+
end
|
167
197
|
|
168
|
-
|
169
|
-
|
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)
|
170
200
|
|
171
|
-
|
201
|
+
on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise_on_key_already_registered
|
172
202
|
|
173
|
-
|
203
|
+
store[key] = value
|
204
|
+
end
|
174
205
|
end
|
175
206
|
|
176
207
|
def __resolve(key, raise_on_key_not_registered: true)
|
208
|
+
|
177
209
|
key = transformed_key(key)
|
178
210
|
|
179
211
|
value = if is_leaf?
|
180
|
-
|
181
|
-
|
212
|
+
resolved_key = key_resolver.call(key)
|
213
|
+
|
214
|
+
if store.key?(resolved_key)
|
215
|
+
store.fetch(resolved_key)
|
216
|
+
elsif (pattern = matching_pattern(resolved_key))
|
217
|
+
store.fetch(pattern)
|
182
218
|
else
|
183
219
|
if is_a_blank?(default)
|
184
220
|
return unless raise_on_key_not_registered
|
@@ -195,27 +231,40 @@ module NxtRegistry
|
|
195
231
|
store[key] ||= default.call
|
196
232
|
end
|
197
233
|
|
198
|
-
value =
|
199
|
-
value.call(*[key].take(value.arity))
|
200
|
-
else
|
201
|
-
value
|
202
|
-
end
|
234
|
+
value = call_or_value(value, key)
|
203
235
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
236
|
+
resolver.call(value)
|
237
|
+
end
|
238
|
+
|
239
|
+
def matching_key(key)
|
240
|
+
key = transformed_key(key)
|
241
|
+
# if key is present it always wins over patterns
|
242
|
+
return key if store.key?(key)
|
243
|
+
|
244
|
+
matching_pattern(key) || key
|
245
|
+
end
|
246
|
+
|
247
|
+
def call_or_value(value, key)
|
248
|
+
return value unless call
|
249
|
+
return value if value.is_a?(NxtRegistry::Registry)
|
250
|
+
return value unless value.respond_to?(:call)
|
251
|
+
|
252
|
+
args = [key, value]
|
253
|
+
value.call(*args.take(value.arity))
|
254
|
+
end
|
255
|
+
|
256
|
+
def matching_pattern(key)
|
257
|
+
patterns.find { |pattern| key.match?(pattern) }
|
209
258
|
end
|
210
259
|
|
211
260
|
def define_interface
|
212
261
|
return if interface_defined
|
213
262
|
|
214
|
-
raise_invalid_accessor_name(accessor) if respond_to?(accessor)
|
263
|
+
raise_invalid_accessor_name(accessor) if respond_to?(accessor.to_s)
|
215
264
|
accessor_with_bang = "#{accessor}!"
|
216
265
|
raise_invalid_accessor_name(accessor_with_bang) if respond_to?(accessor_with_bang)
|
217
266
|
|
218
|
-
define_singleton_method accessor do |key = Blank.new, value = Blank.new|
|
267
|
+
define_singleton_method accessor.to_s do |key = Blank.new, value = Blank.new|
|
219
268
|
return self if is_a_blank?(key)
|
220
269
|
|
221
270
|
key = transformed_key(key)
|
@@ -246,8 +295,9 @@ module NxtRegistry
|
|
246
295
|
@default = options.fetch(:default) { Blank.new }
|
247
296
|
@memoize = options.fetch(:memoize) { true }
|
248
297
|
@call = options.fetch(:call) { true }
|
249
|
-
@resolver = options.fetch(:resolver,
|
250
|
-
@
|
298
|
+
@resolver = options.fetch(:resolver, ->(val) { val })
|
299
|
+
@key_resolver = options.fetch(:key_resolver, ->(val) { val })
|
300
|
+
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.is_a?(Regexp) ? key : key.to_s } }
|
251
301
|
@accessor = options.fetch(:accessor) { name }
|
252
302
|
|
253
303
|
@on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
|
@@ -255,27 +305,29 @@ module NxtRegistry
|
|
255
305
|
end
|
256
306
|
|
257
307
|
def define_accessors
|
258
|
-
%w[default memoize call resolver transform_keys on_key_already_registered on_key_not_registered].each do |attribute|
|
308
|
+
%w[default memoize call resolver key_resolver transform_keys on_key_already_registered on_key_not_registered].each do |attribute|
|
259
309
|
define_singleton_method attribute do |value = Blank.new, &block|
|
260
310
|
value = block if block
|
261
311
|
|
262
312
|
if is_a_blank?(value)
|
263
313
|
instance_variable_get("@#{attribute}")
|
264
314
|
else
|
315
|
+
options[attribute.to_sym] ||= value
|
265
316
|
instance_variable_set("@#{attribute}", value)
|
266
317
|
end
|
267
318
|
end
|
268
319
|
|
269
320
|
define_singleton_method "#{attribute}=" do |value|
|
321
|
+
options[attribute.to_sym] ||= value
|
270
322
|
instance_variable_set("@#{attribute}", value)
|
271
323
|
end
|
272
324
|
end
|
273
325
|
end
|
274
326
|
|
275
|
-
def
|
276
|
-
return if
|
327
|
+
def key_not_allowed?(key)
|
328
|
+
return if allowed_keys.empty?
|
277
329
|
|
278
|
-
|
330
|
+
allowed_keys.exclude?(transformed_key(key))
|
279
331
|
end
|
280
332
|
|
281
333
|
def resolve_default(key)
|
@@ -305,12 +357,6 @@ module NxtRegistry
|
|
305
357
|
end
|
306
358
|
end
|
307
359
|
|
308
|
-
def initialize_copy(original)
|
309
|
-
super
|
310
|
-
@store = original.send(:store).deep_dup
|
311
|
-
@options = original.send(:options).deep_dup
|
312
|
-
end
|
313
|
-
|
314
360
|
def build_namespace
|
315
361
|
parent ? name.to_s.prepend("#{parent.send(:namespace)}.") : name.to_s
|
316
362
|
end
|
@@ -326,5 +372,16 @@ module NxtRegistry
|
|
326
372
|
def raise_invalid_accessor_name(name)
|
327
373
|
raise ArgumentError, "#{self} already implements a method named: #{name}. Please choose a different accessor name"
|
328
374
|
end
|
375
|
+
|
376
|
+
def initialize_copy(original)
|
377
|
+
super
|
378
|
+
|
379
|
+
@mutex = Mutex.new
|
380
|
+
containers = %i[store options]
|
381
|
+
variables = %i[patterns required_keys allowed_keys namespace on_key_already_registered on_key_not_registered]
|
382
|
+
|
383
|
+
containers.each { |c| instance_variable_set("@#{c}", original.send(c).deep_dup) }
|
384
|
+
variables.each { |v| instance_variable_set("@#{v}", original.send(v).dup) }
|
385
|
+
end
|
329
386
|
end
|
330
387
|
end
|
data/lib/nxt_registry/version.rb
CHANGED
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Robecke
|
8
8
|
- Nils Sommer
|
9
9
|
- Raphael Kallensee
|
10
10
|
- Lütfi Demirci
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2021-06-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -83,7 +83,7 @@ dependencies:
|
|
83
83
|
- - ">="
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
|
-
description:
|
86
|
+
description:
|
87
87
|
email:
|
88
88
|
- a.robecke@hellogetsafe.com
|
89
89
|
- andreas@robecke.de
|
@@ -106,7 +106,6 @@ files:
|
|
106
106
|
- bin/console
|
107
107
|
- bin/setup
|
108
108
|
- lib/nxt_registry.rb
|
109
|
-
- lib/nxt_registry/attribute.rb
|
110
109
|
- lib/nxt_registry/blank.rb
|
111
110
|
- lib/nxt_registry/errors.rb
|
112
111
|
- lib/nxt_registry/recursive_registry.rb
|
@@ -122,7 +121,7 @@ metadata:
|
|
122
121
|
allowed_push_host: https://rubygems.org
|
123
122
|
homepage_uri: https://github.com/nxt-insurance
|
124
123
|
source_code_uri: https://github.com/nxt-insurance/nxt_registry
|
125
|
-
post_install_message:
|
124
|
+
post_install_message:
|
126
125
|
rdoc_options: []
|
127
126
|
require_paths:
|
128
127
|
- lib
|
@@ -137,8 +136,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
136
|
- !ruby/object:Gem::Version
|
138
137
|
version: '0'
|
139
138
|
requirements: []
|
140
|
-
rubygems_version: 3.
|
141
|
-
signing_key:
|
139
|
+
rubygems_version: 3.2.15
|
140
|
+
signing_key:
|
142
141
|
specification_version: 4
|
143
142
|
summary: nxt_registry is a simple implementation of the container pattern
|
144
143
|
test_files: []
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module NxtRegistry
|
2
|
-
class Attribute
|
3
|
-
def initialize(name, registry, **options)
|
4
|
-
@name = name
|
5
|
-
@registry = registry
|
6
|
-
@namespace = [name, registry.send(:namespace)].join('.')
|
7
|
-
end
|
8
|
-
|
9
|
-
def eql?(other)
|
10
|
-
{ name => registry.object_id } == { other.send(:name) => other.send(:registry).object_id }
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
attr_reader :name, :registry
|
16
|
-
end
|
17
|
-
end
|