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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 375f69d800025475bc7dcec1ce58539c4c9f6cd71f672a38f8fdd7fe8bfb7448
4
- data.tar.gz: 8fbaab558bc84ae47d9ecec4b2533b9432d336a0d8b1a7ce54d27262da2dac91
3
+ metadata.gz: 4e448ba3858d3bcce91d1b3974e4d2c1e499b16bae7877af8f49a6b61c0a720d
4
+ data.tar.gz: 25d4f5043520610b28d6b500fb7991eaba19be54496a9b5646f87a60468b8d01
5
5
  SHA512:
6
- metadata.gz: 74407964a5919ffc06cede9a498110cddffcf5c7821471be6d7352ec6b0267c84972c1369c23e6d1560e113cf3487bc4e100b87ea79e46fedd9d0a9a71e15a8f
7
- data.tar.gz: 680c9259e6a733dd580109413274d28a5a1961b7819a60ba20c7b4f84ba60dda899604f71bac74f4aa81ed9e7d0690a898b15884ab890477b9460dc9bd5f0ef4
6
+ metadata.gz: 367941027e67c9b6c316769cfa31d633e3e84fd590954801ebb8860de66479609334f4421a53d5e7342106d38627cee37aa25f82c87cdf518979b3b091735394
7
+ data.tar.gz: 0bca415d8164a8bd2d567b2c4aefb8082842fbcf050c19ee7c72fa822b7ab9022877e02d82ce3ca597c1fc8f8461c5a131a454e899c2acd17634b84129f5f902
@@ -1,14 +1,25 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nxt_registry (0.1.0)
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
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/nxt_registry`. To experiment with that code, run `bin/console` for an interactive prompt.
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
@@ -1,4 +1,4 @@
1
- require 'active_support/all'
1
+ require 'active_support/core_ext'
2
2
  require "nxt_registry/version"
3
3
  require "nxt_registry/blank"
4
4
  require "nxt_registry/attribute"
@@ -153,17 +153,17 @@ module NxtRegistry
153
153
  store[key] ||= default.call
154
154
  end
155
155
 
156
- resolver.call(value)
157
- end
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
- def setup_defaults(options)
160
- @default = options.fetch(:default) { Blank.new }
161
- @memoize = options.fetch(:memoize) { true }
162
- @call = options.fetch(:call) { true }
163
- @resolver = options.fetch(:resolver) { ->(value) { value } }
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|
@@ -1,3 +1,3 @@
1
1
  module NxtRegistry
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -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.0
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