nxt_registry 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|