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 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