nxt_registry 0.1.0 → 0.1.1
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 +16 -1
- data/README.md +46 -3
- data/lib/nxt_registry.rb +1 -1
- data/lib/nxt_registry/registry.rb +20 -10
- data/lib/nxt_registry/version.rb +1 -1
- data/nxt_registry.gemspec +2 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e448ba3858d3bcce91d1b3974e4d2c1e499b16bae7877af8f49a6b61c0a720d
|
4
|
+
data.tar.gz: 25d4f5043520610b28d6b500fb7991eaba19be54496a9b5646f87a60468b8d01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 367941027e67c9b6c316769cfa31d633e3e84fd590954801ebb8860de66479609334f4421a53d5e7342106d38627cee37aa25f82c87cdf518979b3b091735394
|
7
|
+
data.tar.gz: 0bca415d8164a8bd2d567b2c4aefb8082842fbcf050c19ee7c72fa822b7ab9022877e02d82ce3ca597c1fc8f8461c5a131a454e899c2acd17634b84129f5f902
|
data/Gemfile.lock
CHANGED
@@ -1,14 +1,25 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_registry (0.1.
|
4
|
+
nxt_registry (0.1.1)
|
5
|
+
activesupport
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
10
|
+
activesupport (6.0.2.1)
|
11
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
+
i18n (>= 0.7, < 2)
|
13
|
+
minitest (~> 5.1)
|
14
|
+
tzinfo (~> 1.1)
|
15
|
+
zeitwerk (~> 2.2)
|
9
16
|
coderay (1.1.2)
|
17
|
+
concurrent-ruby (1.1.5)
|
10
18
|
diff-lcs (1.3)
|
19
|
+
i18n (1.7.0)
|
20
|
+
concurrent-ruby (~> 1.0)
|
11
21
|
method_source (0.9.2)
|
22
|
+
minitest (5.13.0)
|
12
23
|
pry (0.12.2)
|
13
24
|
coderay (~> 1.1.0)
|
14
25
|
method_source (~> 0.9.0)
|
@@ -26,6 +37,10 @@ GEM
|
|
26
37
|
diff-lcs (>= 1.2.0, < 2.0)
|
27
38
|
rspec-support (~> 3.9.0)
|
28
39
|
rspec-support (3.9.0)
|
40
|
+
thread_safe (0.3.6)
|
41
|
+
tzinfo (1.2.6)
|
42
|
+
thread_safe (~> 0.1)
|
43
|
+
zeitwerk (2.2.2)
|
29
44
|
|
30
45
|
PLATFORMS
|
31
46
|
ruby
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
# NxtRegistry
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
NxtRegistry is a simple implementation of the container pattern. It allows you to register and resolve values.
|
4
|
+
It allows to register and resolve values in nested structures by allowing to nest registries into each other.
|
6
5
|
|
7
6
|
## Installation
|
8
7
|
|
@@ -22,6 +21,34 @@ Or install it yourself as:
|
|
22
21
|
|
23
22
|
## Usage
|
24
23
|
|
24
|
+
## Restrict attributes to a certain set
|
25
|
+
|
26
|
+
Use `attrs` to restrict which attributes can be registered on a specific level.
|
27
|
+
|
28
|
+
## Default values
|
29
|
+
|
30
|
+
Use `default` to register a default value that will be resolved in case an attribute was not registered.
|
31
|
+
|
32
|
+
## Block
|
33
|
+
|
34
|
+
When you register a block value that can be called, tt will automatically be called when you resolve the value.
|
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
|
+
|
37
|
+
## Memoize
|
38
|
+
|
39
|
+
Values are memoized per default. Switch it off with `default false`
|
40
|
+
|
41
|
+
## Resolver
|
42
|
+
|
43
|
+
You can register a resolver block if you want to lay hands on your values after they have been resolved.
|
44
|
+
|
45
|
+
## Transform keys
|
46
|
+
|
47
|
+
NxtRegistry uses a plain ruby hash to store values internally. Per default all keys used are transformed with `&:to_s`.
|
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 }`
|
50
|
+
|
51
|
+
|
25
52
|
```ruby
|
26
53
|
class MyClass
|
27
54
|
include NxtRegistry
|
@@ -35,6 +62,8 @@ class MyClass
|
|
35
62
|
default -> { [] }
|
36
63
|
memoize true
|
37
64
|
call true
|
65
|
+
resolver ->(value) { value } # do something with your registered value here
|
66
|
+
transform_keys ->(key) { key.upcase } # transform keys
|
38
67
|
end
|
39
68
|
end
|
40
69
|
end
|
@@ -51,6 +80,20 @@ subject.passengers.from(:a).to(:b).via(:plane) << 'Rapha'
|
|
51
80
|
subject.passengers.from(:a).to(:b).via(:plane) # => ['Nils', 'Rapha']
|
52
81
|
|
53
82
|
subject.passengers.from(:a).to(:b).via(:hyperloop) # => KeyError
|
83
|
+
|
84
|
+
|
85
|
+
class MyClass
|
86
|
+
extend NxtRegistry
|
87
|
+
|
88
|
+
REGISTRY = registry(:errors) do
|
89
|
+
register(KeyError, ->(error) { puts 'KeyError handler' } )
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
MyClass::REGISTRY.resolve(KeyError)
|
94
|
+
# KeyError handler
|
95
|
+
# => nil
|
96
|
+
|
54
97
|
```
|
55
98
|
|
56
99
|
## Development
|
data/lib/nxt_registry.rb
CHANGED
@@ -153,17 +153,17 @@ module NxtRegistry
|
|
153
153
|
store[key] ||= default.call
|
154
154
|
end
|
155
155
|
|
156
|
-
|
157
|
-
|
156
|
+
value = if value.respond_to?(:call) && call && !value.is_a?(NxtRegistry::Registry)
|
157
|
+
value.call(*[value].take(value.arity))
|
158
|
+
else
|
159
|
+
value
|
160
|
+
end
|
158
161
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.to_s } }
|
165
|
-
@on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
|
166
|
-
@on_key_not_registered = options.fetch(:on_key_not_registered) { ->(key) { raise_key_not_registered_error(key) } }
|
162
|
+
if resolver
|
163
|
+
resolver.call(value)
|
164
|
+
else
|
165
|
+
value
|
166
|
+
end
|
167
167
|
end
|
168
168
|
|
169
169
|
def define_interface
|
@@ -192,6 +192,16 @@ module NxtRegistry
|
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
|
+
def setup_defaults(options)
|
196
|
+
@default = options.fetch(:default) { Blank.new }
|
197
|
+
@memoize = options.fetch(:memoize) { true }
|
198
|
+
@call = options.fetch(:call) { true }
|
199
|
+
@resolver = options.fetch(:resolver, false)
|
200
|
+
@transform_keys = options.fetch(:transform_keys) { ->(key) { key.to_s } }
|
201
|
+
@on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
|
202
|
+
@on_key_not_registered = options.fetch(:on_key_not_registered) { ->(key) { raise_key_not_registered_error(key) } }
|
203
|
+
end
|
204
|
+
|
195
205
|
def define_accessors
|
196
206
|
%w[default memoize call resolver transform_keys on_key_already_registered on_key_not_registered].each do |attribute|
|
197
207
|
define_singleton_method attribute do |value = Blank.new, &block|
|
data/lib/nxt_registry/version.rb
CHANGED
data/nxt_registry.gemspec
CHANGED
@@ -32,6 +32,8 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
33
|
spec.require_paths = ["lib"]
|
34
34
|
|
35
|
+
spec.add_dependency "activesupport"
|
36
|
+
|
35
37
|
spec.add_development_dependency "bundler", "~> 2.0"
|
36
38
|
spec.add_development_dependency "rake", "~> 10.0"
|
37
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
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.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Robecke
|
@@ -13,6 +13,20 @@ bindir: exe
|
|
13
13
|
cert_chain: []
|
14
14
|
date: 2020-01-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: activesupport
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
16
30
|
- !ruby/object:Gem::Dependency
|
17
31
|
name: bundler
|
18
32
|
requirement: !ruby/object:Gem::Requirement
|