nxt_registry 0.1.1 → 0.1.2

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: 4e448ba3858d3bcce91d1b3974e4d2c1e499b16bae7877af8f49a6b61c0a720d
4
- data.tar.gz: 25d4f5043520610b28d6b500fb7991eaba19be54496a9b5646f87a60468b8d01
3
+ metadata.gz: 6b8c5142f31e6c1d053ea403da1bdbe76b800afb40648a7660a245809cbd4b71
4
+ data.tar.gz: 7bd26fcda427f8fb20033e0ee9d39783c84849fd26d9f70cbee5c32ef5676f72
5
5
  SHA512:
6
- metadata.gz: 367941027e67c9b6c316769cfa31d633e3e84fd590954801ebb8860de66479609334f4421a53d5e7342106d38627cee37aa25f82c87cdf518979b3b091735394
7
- data.tar.gz: 0bca415d8164a8bd2d567b2c4aefb8082842fbcf050c19ee7c72fa822b7ab9022877e02d82ce3ca597c1fc8f8461c5a131a454e899c2acd17634b84129f5f902
6
+ metadata.gz: 8ab7450365d3cb0ece3ae837f42c981d986441ce571cf5122d2cda68925192e20da3fa6fff1e33b379270459edb63715c76e1049043346d423471702df038f38
7
+ data.tar.gz: dd6a35358dc963e63751ac3f34c80ab3c7a665c9551968f8eb8d336d0be6db0aa4c4ce4723af50e06dc79b129b7f310e6fe402e4667c509a80a102265821bd59
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nxt_registry (0.1.1)
4
+ nxt_registry (0.1.2)
5
5
  activesupport
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -21,32 +21,36 @@ Or install it yourself as:
21
21
 
22
22
  ## Usage
23
23
 
24
- ## Restrict attributes to a certain set
24
+ ### Restrict attributes to a certain set
25
25
 
26
26
  Use `attrs` to restrict which attributes can be registered on a specific level.
27
27
 
28
- ## Default values
28
+ ### Default values
29
29
 
30
30
  Use `default` to register a default value that will be resolved in case an attribute was not registered.
31
31
 
32
- ## Block
32
+ ### Blocks
33
33
 
34
34
  When you register a block value that can be called, tt will automatically be called when you resolve the value.
35
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
36
 
37
- ## Memoize
37
+ ### Memoize
38
38
 
39
39
  Values are memoized per default. Switch it off with `default false`
40
40
 
41
- ## Resolver
41
+ ### Resolver
42
42
 
43
43
  You can register a resolver block if you want to lay hands on your values after they have been resolved.
44
44
 
45
- ## Transform keys
45
+ ### Transform keys
46
46
 
47
47
  NxtRegistry uses a plain ruby hash to store values internally. Per default all keys used are transformed with `&:to_s`.
48
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 }`
49
+ or define your own key transformer by assigning a block `transform_keys ->(key) { key.upcase }`
50
+
51
+ ### Customize :raise_key_already_registered_error and :raise_key_not_registered_error
52
+
53
+ Customize what kind of errors are being raised in case a of a key was not registered or was already registered.
50
54
 
51
55
 
52
56
  ```ruby
@@ -57,11 +61,7 @@ class MyClass
57
61
  @passengers ||= begin
58
62
  registry :from do
59
63
  nested :to do
60
- nested :via do
61
- attrs :train, :car, :plane, :horse
62
- default -> { [] }
63
- memoize true
64
- call true
64
+ nested :via, memoize: true, call: true, default: -> { [] }, attrs: %i[train car plane horse] do
65
65
  resolver ->(value) { value } # do something with your registered value here
66
66
  transform_keys ->(key) { key.upcase } # transform keys
67
67
  end
@@ -8,11 +8,11 @@ require "nxt_registry/registry"
8
8
  require "nxt_registry/recursive_registry"
9
9
 
10
10
  module NxtRegistry
11
- def registry(name, &config)
12
- Registry.new(name, &config)
11
+ def registry(name, **options, &config)
12
+ Registry.new(name, **options, &config)
13
13
  end
14
14
 
15
- def recursive_registry(name, &config)
16
- RecursiveRegistry.new(name, &config)
15
+ def recursive_registry(name, **options, &config)
16
+ RecursiveRegistry.new(name, **options, &config)
17
17
  end
18
18
  end
@@ -6,6 +6,7 @@ module NxtRegistry
6
6
  @is_leaf = true
7
7
  @namespace = [parent, self].compact.map(&:name).join('.')
8
8
  @config = config
9
+ @options = options
9
10
  @store = {}
10
11
  @attrs = nil
11
12
 
@@ -100,6 +101,7 @@ module NxtRegistry
100
101
  def configure(&block)
101
102
  define_accessors
102
103
  define_interface
104
+ attrs(*Array(options.fetch(:attrs, [])))
103
105
 
104
106
  if block.present?
105
107
  if block.arity == 1
@@ -112,7 +114,7 @@ module NxtRegistry
112
114
 
113
115
  private
114
116
 
115
- attr_reader :namespace, :parent, :config, :store
117
+ attr_reader :namespace, :parent, :config, :store, :options
116
118
  attr_accessor :is_leaf
117
119
 
118
120
  def is_leaf?
@@ -125,7 +127,7 @@ module NxtRegistry
125
127
  raise ArgumentError, "Not allowed to register values in a registry that contains nested registries" unless is_leaf
126
128
  raise KeyError, "Keys are restricted to #{attrs.keys}" if attribute_not_allowed?(key)
127
129
 
128
- on_key_already_registered.call(key) if store[key] && raise
130
+ on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise
129
131
 
130
132
  store[key] = value
131
133
  end
@@ -140,7 +142,7 @@ module NxtRegistry
140
142
  if default.is_a?(Blank)
141
143
  return unless raise
142
144
 
143
- on_key_not_registered.call(key)
145
+ on_key_not_registered && on_key_not_registered.call(key)
144
146
  else
145
147
  value = resolve_default
146
148
  return value unless memoize
@@ -198,6 +200,7 @@ module NxtRegistry
198
200
  @call = options.fetch(:call) { true }
199
201
  @resolver = options.fetch(:resolver, false)
200
202
  @transform_keys = options.fetch(:transform_keys) { ->(key) { key.to_s } }
203
+
201
204
  @on_key_already_registered = options.fetch(:on_key_already_registered) { ->(key) { raise_key_already_registered_error(key) } }
202
205
  @on_key_not_registered = options.fetch(:on_key_not_registered) { ->(key) { raise_key_not_registered_error(key) } }
203
206
  end
@@ -1,3 +1,3 @@
1
1
  module NxtRegistry
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
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.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Robecke