nxt_registry 0.3.0 → 0.3.5
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 +21 -0
- data/Gemfile.lock +15 -15
- data/README.md +56 -9
- data/lib/nxt_registry.rb +30 -18
- data/lib/nxt_registry/registry.rb +83 -35
- data/lib/nxt_registry/singleton.rb +15 -0
- data/lib/nxt_registry/version.rb +1 -1
- data/nxt_registry.gemspec +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3c1e56b8913dea9833ea5fac4b1b837389de5df7aa269f3b2f04977f2ddceb3
|
4
|
+
data.tar.gz: 782bcb6ecce2753f77b488c29806bf1b2127714fe82aeed8ab2564297a43b95b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e512d832f3d40ae60ffcfad8578589138c1f00479c2d2dab797c7e9faa6a37cec77da419d671715af55629e0efeac09ef5761bf39afcafe077c0d6f6af740a0
|
7
|
+
data.tar.gz: 3f17bfcc73233107e2daa4db54905115aea50e6f926b8e7ed10aea6d098ff418a4f39ced0e688b02a0a207e0562f02274bdfd9f59d568734485454afe7e1f06d
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
# v0.3.5 2020-12-04
|
2
|
+
|
3
|
+
- Allow patterns as keys
|
4
|
+
|
5
|
+
# v0.3.4 2020-12-04
|
6
|
+
|
7
|
+
- Bring back Singleton
|
8
|
+
- Fix mistakes in readme
|
9
|
+
|
10
|
+
# v0.3.3 2020-11-24
|
11
|
+
|
12
|
+
- Fix: Pass key to resolver instead of value
|
13
|
+
|
14
|
+
# v0.3.2 2020-09-29
|
15
|
+
|
16
|
+
- Fix interface definition
|
17
|
+
|
18
|
+
# v0.3.1 2020-09-23
|
19
|
+
|
20
|
+
- Allow to define custom accessors for registries
|
21
|
+
|
1
22
|
# v0.3.0 2020-09-10
|
2
23
|
|
3
24
|
### Breaking Changes
|
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.5)
|
5
5
|
activesupport
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (6.0.3.
|
10
|
+
activesupport (6.0.3.4)
|
11
11
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
12
|
i18n (>= 0.7, < 2)
|
13
13
|
minitest (~> 5.1)
|
@@ -24,25 +24,25 @@ GEM
|
|
24
24
|
coderay (~> 1.1)
|
25
25
|
method_source (~> 1.0)
|
26
26
|
rake (12.3.3)
|
27
|
-
rspec (3.
|
28
|
-
rspec-core (~> 3.
|
29
|
-
rspec-expectations (~> 3.
|
30
|
-
rspec-mocks (~> 3.
|
31
|
-
rspec-core (3.
|
32
|
-
rspec-support (~> 3.
|
33
|
-
rspec-expectations (3.
|
27
|
+
rspec (3.10.0)
|
28
|
+
rspec-core (~> 3.10.0)
|
29
|
+
rspec-expectations (~> 3.10.0)
|
30
|
+
rspec-mocks (~> 3.10.0)
|
31
|
+
rspec-core (3.10.0)
|
32
|
+
rspec-support (~> 3.10.0)
|
33
|
+
rspec-expectations (3.10.0)
|
34
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
-
rspec-support (~> 3.
|
36
|
-
rspec-mocks (3.
|
35
|
+
rspec-support (~> 3.10.0)
|
36
|
+
rspec-mocks (3.10.0)
|
37
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
38
|
-
rspec-support (~> 3.
|
39
|
-
rspec-support (3.
|
38
|
+
rspec-support (~> 3.10.0)
|
39
|
+
rspec-support (3.10.0)
|
40
40
|
rspec_junit_formatter (0.4.1)
|
41
41
|
rspec-core (>= 2, < 4, != 2.12.0)
|
42
42
|
thread_safe (0.3.6)
|
43
|
-
tzinfo (1.2.
|
43
|
+
tzinfo (1.2.8)
|
44
44
|
thread_safe (~> 0.1)
|
45
|
-
zeitwerk (2.4.
|
45
|
+
zeitwerk (2.4.2)
|
46
46
|
|
47
47
|
PLATFORMS
|
48
48
|
ruby
|
data/README.md
CHANGED
@@ -27,24 +27,23 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
## Instance Level
|
29
29
|
|
30
|
-
|
30
|
+
If you simply need a single global instance of a registry include `NxtRegistry::Singleton`:
|
31
31
|
|
32
32
|
```ruby
|
33
33
|
class Example
|
34
|
-
include NxtRegistry
|
34
|
+
include NxtRegistry::Singleton
|
35
35
|
|
36
|
-
registry
|
36
|
+
registry do
|
37
37
|
register(:ruby, 'Stone')
|
38
38
|
register(:python, 'Snake')
|
39
39
|
register(:javascript, 'undefined')
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
|
44
|
-
example.registry(:languages).resolve(:ruby) # => 'Stone'
|
43
|
+
Example.resolve(:ruby) # => 'Stone'
|
45
44
|
```
|
46
45
|
|
47
|
-
Alternatively you can
|
46
|
+
Alternatively you can simply create instances of `NxtRegistry::Registry`:
|
48
47
|
|
49
48
|
```ruby
|
50
49
|
registry = NxtRegistry::Registry.new do
|
@@ -59,7 +58,7 @@ registry.resolve(:aki) # => 'Aki'
|
|
59
58
|
|
60
59
|
## Class Level
|
61
60
|
|
62
|
-
You can
|
61
|
+
You can also add registries on the class level simply by extending your class with `NxtRegistry`
|
63
62
|
|
64
63
|
```ruby
|
65
64
|
class OtherExample
|
@@ -83,6 +82,30 @@ OtherExample.registry(:errors).resolve(KeyError)
|
|
83
82
|
OtherExample.registry(:country_codes).resolve(:germany)
|
84
83
|
# => :de
|
85
84
|
```
|
85
|
+
|
86
|
+
## Register Patterns
|
87
|
+
|
88
|
+
You can also register values with patterns as keys. Non pattern keys are always evaluated first and then patterns
|
89
|
+
will be tried to match by definition sequence.
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
class Example
|
93
|
+
extend NxtRegistry
|
94
|
+
|
95
|
+
registry :status_codes do
|
96
|
+
register(/\A4\d{2}\z/, 'Client errors')
|
97
|
+
register(/\A5.*\z/, 'Server errors')
|
98
|
+
register('422', 'Unprocessable Entity')
|
99
|
+
register(:'503', 'Internal Server Error')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
Example.registry(:status_codes).resolve('503') # => "Internal Server Error"
|
104
|
+
Example.registry(:status_codes).resolve(503) # => "Internal Server Error"
|
105
|
+
Example.registry(:status_codes).resolve(422) # => "Unprocessable Entity"
|
106
|
+
Example.registry(:status_codes).resolve(404) # => "Client Errors"
|
107
|
+
```
|
108
|
+
|
86
109
|
### Readers
|
87
110
|
|
88
111
|
Access your defined registries with the `registry(:country_code)` method.
|
@@ -130,17 +153,41 @@ class Layer
|
|
130
153
|
end
|
131
154
|
end
|
132
155
|
|
156
|
+
# On every upper level every resolve returns a registry
|
133
157
|
Layer.registry(:from) # => Registry[from]
|
134
|
-
|
135
158
|
Layer.registry(:from).resolve(:munich) # => Registry[to] -> {}
|
136
159
|
Layer.registry(:from).resolve(:amsterdam) # => Registry[to] -> {}
|
137
160
|
Layer.registry(:from).resolve(:any_key) # => Registry[to] -> {}
|
138
|
-
|
139
161
|
Layer.registry(:from).resolve(:munich, :amsterdam) # => Registry[via] -> {}
|
162
|
+
|
163
|
+
# Register a value on the bottom level
|
140
164
|
Layer.registry(:from).resolve(:munich, :amsterdam).register(:train, -> { 'train' })
|
165
|
+
# Resolve the complete path
|
141
166
|
Layer.registry(:from).resolve(:munich, :amsterdam, :train) # => 'train'
|
142
167
|
```
|
143
168
|
|
169
|
+
For registries with multiple levels the normal syntax for registering and resolving becomes quite weird and unreadable. This is why
|
170
|
+
every registry can be accessed through it's name or a custom accessor. The above example then can be simplified as follows.
|
171
|
+
|
172
|
+
```ruby
|
173
|
+
class Layer
|
174
|
+
extend NxtRegistry
|
175
|
+
|
176
|
+
registry :path, accessor: :from do # registry named path, can be accessed with .from(...)
|
177
|
+
level :to do
|
178
|
+
level :via
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# Register a value
|
184
|
+
Layer.registry(:path).from(:munich).to(:amsterdam).via(:train, -> { 'train' })
|
185
|
+
# Resolve the complete path
|
186
|
+
Layer.registry(:path).from(:munich).to(:amsterdam).via(:train) # => 'train'
|
187
|
+
```
|
188
|
+
|
189
|
+
*Note that this feature is also available for registries with a single level only.*
|
190
|
+
|
144
191
|
### Restrict attributes to a certain set
|
145
192
|
|
146
193
|
Use `attrs` to restrict which attributes can be registered on a specific level.
|
data/lib/nxt_registry.rb
CHANGED
@@ -1,32 +1,44 @@
|
|
1
1
|
require 'active_support/core_ext'
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
2
|
+
require 'nxt_registry/version'
|
3
|
+
require 'nxt_registry/blank'
|
4
|
+
require 'nxt_registry/attribute'
|
5
|
+
require 'nxt_registry/errors'
|
6
|
+
require 'nxt_registry/registry_builder'
|
7
|
+
require 'nxt_registry/registry'
|
8
|
+
require 'nxt_registry/recursive_registry'
|
9
|
+
require 'nxt_registry/singleton'
|
9
10
|
|
10
11
|
module NxtRegistry
|
11
12
|
def registry(name, **options, &config)
|
12
|
-
|
13
|
-
|
14
|
-
registry = Registry.new(name, **options, &config)
|
15
|
-
registries[name] ||= registry
|
16
|
-
registry
|
13
|
+
build_registry(Registry, name, **options, &config)
|
17
14
|
end
|
18
15
|
|
19
16
|
def recursive_registry(name, **options, &config)
|
20
|
-
|
21
|
-
|
22
|
-
registry = RecursiveRegistry.new(name, **options, &config)
|
23
|
-
registries[name] ||= registry
|
24
|
-
registry
|
17
|
+
build_registry(RecursiveRegistry, name, **options, &config)
|
25
18
|
end
|
26
19
|
|
27
20
|
private
|
28
21
|
|
22
|
+
def build_registry(registry_class, name, **options, &config)
|
23
|
+
registry = registries.resolve(name)
|
24
|
+
|
25
|
+
if registry.present?
|
26
|
+
if registry.configured
|
27
|
+
return registry
|
28
|
+
else
|
29
|
+
raise_unconfigured_registry_accessed(name)
|
30
|
+
end
|
31
|
+
else
|
32
|
+
registry = registry_class.new(name, **options, &config)
|
33
|
+
registries.register(name, registry)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def raise_unconfigured_registry_accessed(name)
|
38
|
+
raise ArgumentError, "The registry #{name} must be configured before accessed!"
|
39
|
+
end
|
40
|
+
|
29
41
|
def registries
|
30
|
-
@registries ||=
|
42
|
+
@registries ||= Registry.new(:registries)
|
31
43
|
end
|
32
44
|
end
|
@@ -1,25 +1,28 @@
|
|
1
1
|
module NxtRegistry
|
2
2
|
class Registry
|
3
3
|
def initialize(name = object_id.to_s, **options, &config)
|
4
|
+
@options = options
|
4
5
|
@name = name
|
5
6
|
@parent = options[:parent]
|
6
7
|
@is_leaf = true
|
7
8
|
@namespace = build_namespace
|
8
9
|
@config = config
|
9
|
-
@options = options
|
10
10
|
@store = {}
|
11
11
|
@attrs = nil
|
12
|
+
@configured = false
|
13
|
+
@patterns = []
|
12
14
|
|
13
15
|
setup_defaults(options)
|
14
16
|
configure(&config)
|
15
17
|
end
|
16
18
|
|
17
19
|
attr_reader :name
|
20
|
+
attr_accessor :configured
|
18
21
|
|
19
22
|
def level(name, **options, &config)
|
20
23
|
options = options.merge(parent: self)
|
21
24
|
|
22
|
-
if
|
25
|
+
if is_a_blank?(default)
|
23
26
|
self.is_leaf = false
|
24
27
|
|
25
28
|
self.default = RegistryBuilder.new do
|
@@ -36,13 +39,13 @@ module NxtRegistry
|
|
36
39
|
end
|
37
40
|
|
38
41
|
def registry(name, **options, &config)
|
39
|
-
|
40
|
-
register(name, Registry.new(name, **
|
42
|
+
opts = options.merge(parent: self)
|
43
|
+
register(name, Registry.new(name, **opts, &config))
|
41
44
|
end
|
42
45
|
|
43
46
|
def registry!(name, **options, &config)
|
44
|
-
|
45
|
-
register!(name, Registry.new(name, **
|
47
|
+
opts = options.merge(parent: self)
|
48
|
+
register!(name, Registry.new(name, **opts, &config))
|
46
49
|
end
|
47
50
|
|
48
51
|
def attr(name)
|
@@ -61,37 +64,37 @@ module NxtRegistry
|
|
61
64
|
|
62
65
|
def register(key = Blank.new, value = Blank.new, **options, &block)
|
63
66
|
if block_given?
|
64
|
-
if
|
67
|
+
if is_a_blank?(value)
|
65
68
|
registry(key, **options, &block)
|
66
69
|
else
|
67
70
|
raise_register_argument_error
|
68
71
|
end
|
69
72
|
else
|
70
|
-
__register(key, value,
|
73
|
+
__register(key, value, raise_on_key_already_registered: true)
|
71
74
|
end
|
72
75
|
end
|
73
76
|
|
74
77
|
def register!(key = Blank.new, value = Blank.new, **options, &block)
|
75
78
|
if block_given?
|
76
|
-
if
|
79
|
+
if is_a_blank?(value)
|
77
80
|
registry!(key, **options, &block)
|
78
81
|
else
|
79
82
|
raise_register_argument_error
|
80
83
|
end
|
81
84
|
else
|
82
|
-
__register(key, value,
|
85
|
+
__register(key, value, raise_on_key_already_registered: false)
|
83
86
|
end
|
84
87
|
end
|
85
88
|
|
86
89
|
def resolve!(*keys)
|
87
90
|
keys.inject(self) do |current_registry, key|
|
88
|
-
current_registry.send(:__resolve, key,
|
91
|
+
current_registry.send(:__resolve, key, raise_on_key_not_registered: true)
|
89
92
|
end
|
90
93
|
end
|
91
94
|
|
92
95
|
def resolve(*keys)
|
93
96
|
keys.inject(self) do |current_registry, key|
|
94
|
-
current_registry.send(:__resolve, key,
|
97
|
+
current_registry.send(:__resolve, key, raise_on_key_not_registered: false) || break
|
95
98
|
end
|
96
99
|
end
|
97
100
|
|
@@ -124,7 +127,8 @@ module NxtRegistry
|
|
124
127
|
end
|
125
128
|
|
126
129
|
def fetch(key, *args, &block)
|
127
|
-
|
130
|
+
key = matching_key(key)
|
131
|
+
store.fetch(key, *args, &block)
|
128
132
|
end
|
129
133
|
|
130
134
|
delegate :size, :values, :each, :freeze, to: :store
|
@@ -141,6 +145,8 @@ module NxtRegistry
|
|
141
145
|
instance_exec(&block)
|
142
146
|
end
|
143
147
|
end
|
148
|
+
|
149
|
+
self.configured = true
|
144
150
|
end
|
145
151
|
|
146
152
|
def to_s
|
@@ -151,33 +157,40 @@ module NxtRegistry
|
|
151
157
|
|
152
158
|
private
|
153
159
|
|
154
|
-
attr_reader :namespace, :parent, :config, :store, :options
|
155
|
-
attr_accessor :is_leaf
|
160
|
+
attr_reader :namespace, :parent, :config, :store, :options, :accessor, :patterns
|
161
|
+
attr_accessor :is_leaf, :interface_defined
|
156
162
|
|
157
163
|
def is_leaf?
|
158
164
|
@is_leaf
|
159
165
|
end
|
160
166
|
|
161
|
-
def __register(key, value,
|
162
|
-
key =
|
167
|
+
def __register(key, value, raise_on_key_already_registered: true)
|
168
|
+
key = if key.is_a?(Regexp)
|
169
|
+
patterns << key
|
170
|
+
key
|
171
|
+
else
|
172
|
+
transformed_key(key)
|
173
|
+
end
|
163
174
|
|
164
175
|
raise ArgumentError, "Not allowed to register values in a registry that contains nested registries" unless is_leaf
|
165
176
|
raise KeyError, "Keys are restricted to #{attrs.keys}" if attribute_not_allowed?(key)
|
166
177
|
|
167
|
-
on_key_already_registered && on_key_already_registered.call(key) if store[key] &&
|
178
|
+
on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise_on_key_already_registered
|
168
179
|
|
169
180
|
store[key] = value
|
170
181
|
end
|
171
182
|
|
172
|
-
def __resolve(key,
|
183
|
+
def __resolve(key, raise_on_key_not_registered: true)
|
173
184
|
key = transformed_key(key)
|
174
185
|
|
175
186
|
value = if is_leaf?
|
176
187
|
if store.key?(key)
|
177
188
|
store.fetch(key)
|
189
|
+
elsif (pattern = matching_pattern(key))
|
190
|
+
store.fetch(pattern)
|
178
191
|
else
|
179
|
-
if
|
180
|
-
return unless
|
192
|
+
if is_a_blank?(default)
|
193
|
+
return unless raise_on_key_not_registered
|
181
194
|
|
182
195
|
on_key_not_registered && on_key_not_registered.call(key)
|
183
196
|
else
|
@@ -191,11 +204,7 @@ module NxtRegistry
|
|
191
204
|
store[key] ||= default.call
|
192
205
|
end
|
193
206
|
|
194
|
-
value =
|
195
|
-
value.call(*[value].take(value.arity))
|
196
|
-
else
|
197
|
-
value
|
198
|
-
end
|
207
|
+
value = call_or_value(value, key)
|
199
208
|
|
200
209
|
if resolver
|
201
210
|
resolver.call(value)
|
@@ -204,30 +213,59 @@ module NxtRegistry
|
|
204
213
|
end
|
205
214
|
end
|
206
215
|
|
216
|
+
def matching_key(key)
|
217
|
+
key = transformed_key(key)
|
218
|
+
# if key is present it always wins over patterns
|
219
|
+
return key if store.key?(key)
|
220
|
+
|
221
|
+
matching_pattern(key) || key
|
222
|
+
end
|
223
|
+
|
224
|
+
def call_or_value(value, key)
|
225
|
+
return value unless call
|
226
|
+
return value if value.is_a?(NxtRegistry::Registry)
|
227
|
+
return value unless value.respond_to?(:call)
|
228
|
+
|
229
|
+
args = [key, value]
|
230
|
+
value.call(*args.take(value.arity))
|
231
|
+
end
|
232
|
+
|
233
|
+
def matching_pattern(key)
|
234
|
+
patterns.find { |pattern| key.match?(pattern) }
|
235
|
+
end
|
236
|
+
|
207
237
|
def define_interface
|
208
|
-
|
209
|
-
|
238
|
+
return if interface_defined
|
239
|
+
|
240
|
+
raise_invalid_accessor_name(accessor) if respond_to?(accessor.to_s)
|
241
|
+
accessor_with_bang = "#{accessor}!"
|
242
|
+
raise_invalid_accessor_name(accessor_with_bang) if respond_to?(accessor_with_bang)
|
243
|
+
|
244
|
+
define_singleton_method accessor.to_s do |key = Blank.new, value = Blank.new|
|
245
|
+
return self if is_a_blank?(key)
|
210
246
|
|
211
247
|
key = transformed_key(key)
|
212
248
|
|
213
|
-
if
|
249
|
+
if is_a_blank?(value)
|
214
250
|
resolve(key)
|
215
251
|
else
|
216
252
|
register(key, value)
|
217
253
|
end
|
218
254
|
end
|
219
255
|
|
220
|
-
define_singleton_method
|
221
|
-
return self if
|
256
|
+
define_singleton_method accessor_with_bang do |key = Blank.new, value = Blank.new|
|
257
|
+
return self if is_a_blank?(key)
|
222
258
|
|
223
259
|
key = transformed_key(key)
|
224
260
|
|
225
|
-
if
|
261
|
+
if is_a_blank?(value)
|
226
262
|
resolve!(key)
|
227
263
|
else
|
228
264
|
register!(key, value)
|
229
265
|
end
|
230
266
|
end
|
267
|
+
|
268
|
+
self.interface_defined = true
|
231
269
|
end
|
232
270
|
|
233
271
|
def setup_defaults(options)
|
@@ -235,7 +273,8 @@ module NxtRegistry
|
|
235
273
|
@memoize = options.fetch(:memoize) { true }
|
236
274
|
@call = options.fetch(:call) { true }
|
237
275
|
@resolver = options.fetch(:resolver, false)
|
238
|
-
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.to_s } }
|
276
|
+
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.is_a?(Regexp) ? key : key.to_s } }
|
277
|
+
@accessor = options.fetch(:accessor) { name }
|
239
278
|
|
240
279
|
@on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
|
241
280
|
@on_key_not_registered = options.fetch(:on_key_not_registered) { ->(key) { raise_key_not_registered_error(key) } }
|
@@ -246,7 +285,7 @@ module NxtRegistry
|
|
246
285
|
define_singleton_method attribute do |value = Blank.new, &block|
|
247
286
|
value = block if block
|
248
287
|
|
249
|
-
if
|
288
|
+
if is_a_blank?(value)
|
250
289
|
instance_variable_get("@#{attribute}")
|
251
290
|
else
|
252
291
|
instance_variable_set("@#{attribute}", value)
|
@@ -284,7 +323,7 @@ module NxtRegistry
|
|
284
323
|
def transformed_key(key)
|
285
324
|
@transformed_key ||= {}
|
286
325
|
@transformed_key[key] ||= begin
|
287
|
-
if transform_keys && !
|
326
|
+
if transform_keys && !is_a_blank?(key)
|
288
327
|
transform_keys.call(key)
|
289
328
|
else
|
290
329
|
key
|
@@ -296,6 +335,7 @@ module NxtRegistry
|
|
296
335
|
super
|
297
336
|
@store = original.send(:store).deep_dup
|
298
337
|
@options = original.send(:options).deep_dup
|
338
|
+
@patterns = original.send(:patterns).dup
|
299
339
|
end
|
300
340
|
|
301
341
|
def build_namespace
|
@@ -305,5 +345,13 @@ module NxtRegistry
|
|
305
345
|
def raise_register_argument_error
|
306
346
|
raise ArgumentError, 'Either provide a key value pair or a block to register'
|
307
347
|
end
|
348
|
+
|
349
|
+
def is_a_blank?(value)
|
350
|
+
value.is_a?(Blank)
|
351
|
+
end
|
352
|
+
|
353
|
+
def raise_invalid_accessor_name(name)
|
354
|
+
raise ArgumentError, "#{self} already implements a method named: #{name}. Please choose a different accessor name"
|
355
|
+
end
|
308
356
|
end
|
309
357
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module NxtRegistry
|
2
|
+
module Singleton
|
3
|
+
include NxtRegistry
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.extend(self)
|
7
|
+
end
|
8
|
+
|
9
|
+
def registry(type = Registry, **options, &config)
|
10
|
+
@registry ||= build_registry(type, self.class.name, **options, &config)
|
11
|
+
end
|
12
|
+
|
13
|
+
delegate_missing_to :registry
|
14
|
+
end
|
15
|
+
end
|
data/lib/nxt_registry/version.rb
CHANGED
data/nxt_registry.gemspec
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "nxt_registry"
|
7
7
|
spec.version = NxtRegistry::VERSION
|
8
8
|
spec.authors = ["Andreas Robecke", "Nils Sommer", "Raphael Kallensee", "Lütfi Demirci"]
|
9
|
-
spec.email = [
|
9
|
+
spec.email = ['a.robecke@hellogetsafe.com', 'andreas@robecke.de']
|
10
10
|
|
11
11
|
spec.summary = %q{nxt_registry is a simple implementation of the container pattern}
|
12
12
|
spec.homepage = "https://github.com/nxt-insurance"
|
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.5
|
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: 2020-
|
14
|
+
date: 2020-12-04 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -85,7 +85,8 @@ dependencies:
|
|
85
85
|
version: '0'
|
86
86
|
description:
|
87
87
|
email:
|
88
|
-
- a.robecke@
|
88
|
+
- a.robecke@hellogetsafe.com
|
89
|
+
- andreas@robecke.de
|
89
90
|
executables: []
|
90
91
|
extensions: []
|
91
92
|
extra_rdoc_files: []
|
@@ -111,6 +112,7 @@ files:
|
|
111
112
|
- lib/nxt_registry/recursive_registry.rb
|
112
113
|
- lib/nxt_registry/registry.rb
|
113
114
|
- lib/nxt_registry/registry_builder.rb
|
115
|
+
- lib/nxt_registry/singleton.rb
|
114
116
|
- lib/nxt_registry/version.rb
|
115
117
|
- nxt_registry.gemspec
|
116
118
|
homepage: https://github.com/nxt-insurance
|