nxt_registry 0.3.6 → 0.3.7
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.
Potentially problematic release.
This version of nxt_registry might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/Gemfile.lock +10 -10
 - data/README.md +12 -3
 - data/lib/nxt_registry.rb +0 -1
 - data/lib/nxt_registry/errors.rb +2 -0
 - data/lib/nxt_registry/registry.rb +32 -23
 - data/lib/nxt_registry/version.rb +1 -1
 - metadata +2 -3
 - data/lib/nxt_registry/attribute.rb +0 -17
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 37082d21252a90b6499fb9923dc228789b759b50744049510eaf0397a42e1909
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 48ca6d6309ad748386ea97c9ad6d09b7f0badc321c594a5de7f173d5f1d5bfe2
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 2df942dfd06fb598b1fd5142023e2809c0ce0ff0f07cf06c2511fa8b3c870a4990a15c2fcb30b269d8d31fc29dd04866f9d812b03c69dcb6723be90a2e80ef4c
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 889b9339a28ce2ce88e162e5d90fc93d3d17f84a697f043cf4ef4c02779856e4476f7a866f66eb891c9d642d2690f4a1173871bb22bf5f3b25ee738849205146
         
     | 
    
        data/Gemfile.lock
    CHANGED
    
    | 
         @@ -1,25 +1,25 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            PATH
         
     | 
| 
       2 
2 
     | 
    
         
             
              remote: .
         
     | 
| 
       3 
3 
     | 
    
         
             
              specs:
         
     | 
| 
       4 
     | 
    
         
            -
                nxt_registry (0.3. 
     | 
| 
      
 4 
     | 
    
         
            +
                nxt_registry (0.3.7)
         
     | 
| 
       5 
5 
     | 
    
         
             
                  activesupport
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            GEM
         
     | 
| 
       8 
8 
     | 
    
         
             
              remote: https://rubygems.org/
         
     | 
| 
       9 
9 
     | 
    
         
             
              specs:
         
     | 
| 
       10 
     | 
    
         
            -
                activesupport (6.1. 
     | 
| 
      
 10 
     | 
    
         
            +
                activesupport (6.1.1)
         
     | 
| 
       11 
11 
     | 
    
         
             
                  concurrent-ruby (~> 1.0, >= 1.0.2)
         
     | 
| 
       12 
12 
     | 
    
         
             
                  i18n (>= 1.6, < 2)
         
     | 
| 
       13 
13 
     | 
    
         
             
                  minitest (>= 5.1)
         
     | 
| 
       14 
14 
     | 
    
         
             
                  tzinfo (~> 2.0)
         
     | 
| 
       15 
15 
     | 
    
         
             
                  zeitwerk (~> 2.3)
         
     | 
| 
       16 
16 
     | 
    
         
             
                coderay (1.1.3)
         
     | 
| 
       17 
     | 
    
         
            -
                concurrent-ruby (1.1. 
     | 
| 
      
 17 
     | 
    
         
            +
                concurrent-ruby (1.1.8)
         
     | 
| 
       18 
18 
     | 
    
         
             
                diff-lcs (1.4.4)
         
     | 
| 
       19 
     | 
    
         
            -
                i18n (1.8. 
     | 
| 
      
 19 
     | 
    
         
            +
                i18n (1.8.7)
         
     | 
| 
       20 
20 
     | 
    
         
             
                  concurrent-ruby (~> 1.0)
         
     | 
| 
       21 
21 
     | 
    
         
             
                method_source (1.0.0)
         
     | 
| 
       22 
     | 
    
         
            -
                minitest (5.14. 
     | 
| 
      
 22 
     | 
    
         
            +
                minitest (5.14.3)
         
     | 
| 
       23 
23 
     | 
    
         
             
                pry (0.13.1)
         
     | 
| 
       24 
24 
     | 
    
         
             
                  coderay (~> 1.1)
         
     | 
| 
       25 
25 
     | 
    
         
             
                  method_source (~> 1.0)
         
     | 
| 
         @@ -28,15 +28,15 @@ GEM 
     | 
|
| 
       28 
28 
     | 
    
         
             
                  rspec-core (~> 3.10.0)
         
     | 
| 
       29 
29 
     | 
    
         
             
                  rspec-expectations (~> 3.10.0)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  rspec-mocks (~> 3.10.0)
         
     | 
| 
       31 
     | 
    
         
            -
                rspec-core (3.10. 
     | 
| 
      
 31 
     | 
    
         
            +
                rspec-core (3.10.1)
         
     | 
| 
       32 
32 
     | 
    
         
             
                  rspec-support (~> 3.10.0)
         
     | 
| 
       33 
     | 
    
         
            -
                rspec-expectations (3.10. 
     | 
| 
      
 33 
     | 
    
         
            +
                rspec-expectations (3.10.1)
         
     | 
| 
       34 
34 
     | 
    
         
             
                  diff-lcs (>= 1.2.0, < 2.0)
         
     | 
| 
       35 
35 
     | 
    
         
             
                  rspec-support (~> 3.10.0)
         
     | 
| 
       36 
     | 
    
         
            -
                rspec-mocks (3.10. 
     | 
| 
      
 36 
     | 
    
         
            +
                rspec-mocks (3.10.1)
         
     | 
| 
       37 
37 
     | 
    
         
             
                  diff-lcs (>= 1.2.0, < 2.0)
         
     | 
| 
       38 
38 
     | 
    
         
             
                  rspec-support (~> 3.10.0)
         
     | 
| 
       39 
     | 
    
         
            -
                rspec-support (3.10. 
     | 
| 
      
 39 
     | 
    
         
            +
                rspec-support (3.10.1)
         
     | 
| 
       40 
40 
     | 
    
         
             
                rspec_junit_formatter (0.4.1)
         
     | 
| 
       41 
41 
     | 
    
         
             
                  rspec-core (>= 2, < 4, != 2.12.0)
         
     | 
| 
       42 
42 
     | 
    
         
             
                tzinfo (2.0.4)
         
     | 
| 
         @@ -56,4 +56,4 @@ DEPENDENCIES 
     | 
|
| 
       56 
56 
     | 
    
         
             
              rspec_junit_formatter
         
     | 
| 
       57 
57 
     | 
    
         | 
| 
       58 
58 
     | 
    
         
             
            BUNDLED WITH
         
     | 
| 
       59 
     | 
    
         
            -
               2.2. 
     | 
| 
      
 59 
     | 
    
         
            +
               2.2.4
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -205,12 +205,21 @@ Layer.registry(:path).from(:munich).to(:amsterdam).via(:train) #  => 'train' 
     | 
|
| 
       205 
205 
     | 
    
         | 
| 
       206 
206 
     | 
    
         
             
            *Note that this feature is also available for registries with a single level only.*
         
     | 
| 
       207 
207 
     | 
    
         | 
| 
       208 
     | 
    
         
            -
            ### Restrict  
     | 
| 
      
 208 
     | 
    
         
            +
            ### Restrict keys to a certain set
         
     | 
| 
       209 
209 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
            Use ` 
     | 
| 
      
 210 
     | 
    
         
            +
            Use `allowed_keys` to restrict which keys can be registered on a specific level.
         
     | 
| 
       211 
211 
     | 
    
         | 
| 
       212 
212 
     | 
    
         
             
            ```ruby
         
     | 
| 
       213 
     | 
    
         
            -
            registry :example,  
     | 
| 
      
 213 
     | 
    
         
            +
            registry :example, allowed_keys: %w[one two three]
         
     | 
| 
      
 214 
     | 
    
         
            +
            ```
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            ### Require a certain set of keys to be registered
         
     | 
| 
      
 217 
     | 
    
         
            +
             
     | 
| 
      
 218 
     | 
    
         
            +
            Use `required_keys` to enforce a certain set of keys to be registered on a specific level. This is especially helpful
         
     | 
| 
      
 219 
     | 
    
         
            +
            if you use registries in multiple places and you want to ensure they all register the same set of keys. 
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 222 
     | 
    
         
            +
            registry :example, required_keys: %w[one two three]
         
     | 
| 
       214 
223 
     | 
    
         
             
            ```
         
     | 
| 
       215 
224 
     | 
    
         | 
| 
       216 
225 
     | 
    
         
             
            ### Default values
         
     | 
    
        data/lib/nxt_registry.rb
    CHANGED
    
    
    
        data/lib/nxt_registry/errors.rb
    CHANGED
    
    
| 
         @@ -8,11 +8,10 @@ module NxtRegistry 
     | 
|
| 
       8 
8 
     | 
    
         
             
                  @namespace = build_namespace
         
     | 
| 
       9 
9 
     | 
    
         
             
                  @config = config
         
     | 
| 
       10 
10 
     | 
    
         
             
                  @store = {}
         
     | 
| 
       11 
     | 
    
         
            -
                  @attrs = nil
         
     | 
| 
       12 
11 
     | 
    
         
             
                  @configured = false
         
     | 
| 
       13 
12 
     | 
    
         
             
                  @patterns = []
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @config = config
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                  setup_defaults(options)
         
     | 
| 
       16 
15 
     | 
    
         
             
                  configure(&config)
         
     | 
| 
       17 
16 
     | 
    
         
             
                end
         
     | 
| 
       18 
17 
     | 
    
         | 
| 
         @@ -48,18 +47,24 @@ module NxtRegistry 
     | 
|
| 
       48 
47 
     | 
    
         
             
                  register!(name, Registry.new(name, **opts, &config))
         
     | 
| 
       49 
48 
     | 
    
         
             
                end
         
     | 
| 
       50 
49 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
                def  
     | 
| 
       52 
     | 
    
         
            -
                   
     | 
| 
       53 
     | 
    
         
            -
                   
     | 
| 
      
 50 
     | 
    
         
            +
                def required_keys(*keys)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @required_keys ||= []
         
     | 
| 
      
 52 
     | 
    
         
            +
                  return @required_keys if keys.empty?
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                  @required_keys += keys.map { |key| transformed_key(key) }
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def allowed_keys(*keys)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  @allowed_keys ||= []
         
     | 
| 
      
 59 
     | 
    
         
            +
                  return @allowed_keys if keys.empty?
         
     | 
| 
       54 
60 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                   
     | 
| 
      
 61 
     | 
    
         
            +
                  @allowed_keys += keys.map { |key| transformed_key(key) }
         
     | 
| 
       56 
62 
     | 
    
         
             
                end
         
     | 
| 
       57 
63 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                 
     | 
| 
       59 
     | 
    
         
            -
                  @attrs ||= {}
         
     | 
| 
       60 
     | 
    
         
            -
                  return @attrs unless args.any?
         
     | 
| 
      
 64 
     | 
    
         
            +
                alias attrs allowed_keys # @deprecated
         
     | 
| 
       61 
65 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
      
 66 
     | 
    
         
            +
                def attr(key)
         
     | 
| 
      
 67 
     | 
    
         
            +
                  allowed_keys(key) # @deprecated
         
     | 
| 
       63 
68 
     | 
    
         
             
                end
         
     | 
| 
       64 
69 
     | 
    
         | 
| 
       65 
70 
     | 
    
         
             
                def register(key = Blank.new, value = Blank.new, **options, &block)
         
     | 
| 
         @@ -134,9 +139,11 @@ module NxtRegistry 
     | 
|
| 
       134 
139 
     | 
    
         
             
                delegate :size, :values, :each, :freeze, to: :store
         
     | 
| 
       135 
140 
     | 
    
         | 
| 
       136 
141 
     | 
    
         
             
                def configure(&block)
         
     | 
| 
      
 142 
     | 
    
         
            +
                  setup_defaults(options)
         
     | 
| 
       137 
143 
     | 
    
         
             
                  define_accessors
         
     | 
| 
       138 
144 
     | 
    
         
             
                  define_interface
         
     | 
| 
       139 
     | 
    
         
            -
                   
     | 
| 
      
 145 
     | 
    
         
            +
                  allowed_keys(*Array(options.fetch(:allowed_keys, [])))
         
     | 
| 
      
 146 
     | 
    
         
            +
                  required_keys(*Array(options.fetch(:required_keys, [])))
         
     | 
| 
       140 
147 
     | 
    
         | 
| 
       141 
148 
     | 
    
         
             
                  if block.present?
         
     | 
| 
       142 
149 
     | 
    
         
             
                    if block.arity == 1
         
     | 
| 
         @@ -146,6 +153,7 @@ module NxtRegistry 
     | 
|
| 
       146 
153 
     | 
    
         
             
                    end
         
     | 
| 
       147 
154 
     | 
    
         
             
                  end
         
     | 
| 
       148 
155 
     | 
    
         | 
| 
      
 156 
     | 
    
         
            +
                  validate_required_keys_given
         
     | 
| 
       149 
157 
     | 
    
         
             
                  self.configured = true
         
     | 
| 
       150 
158 
     | 
    
         
             
                end
         
     | 
| 
       151 
159 
     | 
    
         | 
| 
         @@ -153,7 +161,7 @@ module NxtRegistry 
     | 
|
| 
       153 
161 
     | 
    
         
             
                  "Registry[#{name}] -> #{store.to_s}"
         
     | 
| 
       154 
162 
     | 
    
         
             
                end
         
     | 
| 
       155 
163 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
                 
     | 
| 
      
 164 
     | 
    
         
            +
                alias inspect to_s
         
     | 
| 
       157 
165 
     | 
    
         | 
| 
       158 
166 
     | 
    
         
             
                private
         
     | 
| 
       159 
167 
     | 
    
         | 
| 
         @@ -165,6 +173,14 @@ module NxtRegistry 
     | 
|
| 
       165 
173 
     | 
    
         
             
                  base.merge(opts).merge(parent: self)
         
     | 
| 
       166 
174 
     | 
    
         
             
                end
         
     | 
| 
       167 
175 
     | 
    
         | 
| 
      
 176 
     | 
    
         
            +
                def validate_required_keys_given
         
     | 
| 
      
 177 
     | 
    
         
            +
                  required_keys.each do |key|
         
     | 
| 
      
 178 
     | 
    
         
            +
                    next if store.key?(key)
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                    raise Errors::RequiredKeyMissing, "Required key '#{key}' missing in #{self}"
         
     | 
| 
      
 181 
     | 
    
         
            +
                  end
         
     | 
| 
      
 182 
     | 
    
         
            +
                end
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
       168 
184 
     | 
    
         
             
                def is_leaf?
         
     | 
| 
       169 
185 
     | 
    
         
             
                  @is_leaf
         
     | 
| 
       170 
186 
     | 
    
         
             
                end
         
     | 
| 
         @@ -178,7 +194,7 @@ module NxtRegistry 
     | 
|
| 
       178 
194 
     | 
    
         
             
                  end
         
     | 
| 
       179 
195 
     | 
    
         | 
| 
       180 
196 
     | 
    
         
             
                  raise ArgumentError, "Not allowed to register values in a registry that contains nested registries" unless is_leaf
         
     | 
| 
       181 
     | 
    
         
            -
                  raise KeyError, "Keys are restricted to #{ 
     | 
| 
      
 197 
     | 
    
         
            +
                  raise KeyError, "Keys are restricted to #{allowed_keys}" if key_not_allowed?(key)
         
     | 
| 
       182 
198 
     | 
    
         | 
| 
       183 
199 
     | 
    
         
             
                  on_key_already_registered && on_key_already_registered.call(key) if store[key] && raise_on_key_already_registered
         
     | 
| 
       184 
200 
     | 
    
         | 
| 
         @@ -303,10 +319,10 @@ module NxtRegistry 
     | 
|
| 
       303 
319 
     | 
    
         
             
                  end
         
     | 
| 
       304 
320 
     | 
    
         
             
                end
         
     | 
| 
       305 
321 
     | 
    
         | 
| 
       306 
     | 
    
         
            -
                def  
     | 
| 
       307 
     | 
    
         
            -
                  return if  
     | 
| 
      
 322 
     | 
    
         
            +
                def key_not_allowed?(key)
         
     | 
| 
      
 323 
     | 
    
         
            +
                  return if allowed_keys.empty?
         
     | 
| 
       308 
324 
     | 
    
         | 
| 
       309 
     | 
    
         
            -
                   
     | 
| 
      
 325 
     | 
    
         
            +
                  allowed_keys.exclude?(transformed_key(key))
         
     | 
| 
       310 
326 
     | 
    
         
             
                end
         
     | 
| 
       311 
327 
     | 
    
         | 
| 
       312 
328 
     | 
    
         
             
                def resolve_default(key)
         
     | 
| 
         @@ -336,13 +352,6 @@ module NxtRegistry 
     | 
|
| 
       336 
352 
     | 
    
         
             
                  end
         
     | 
| 
       337 
353 
     | 
    
         
             
                end
         
     | 
| 
       338 
354 
     | 
    
         | 
| 
       339 
     | 
    
         
            -
                def initialize_copy(original)
         
     | 
| 
       340 
     | 
    
         
            -
                  super
         
     | 
| 
       341 
     | 
    
         
            -
                  @store = original.send(:store).deep_dup
         
     | 
| 
       342 
     | 
    
         
            -
                  @options = original.send(:options).deep_dup
         
     | 
| 
       343 
     | 
    
         
            -
                  @patterns = original.send(:patterns).dup
         
     | 
| 
       344 
     | 
    
         
            -
                end
         
     | 
| 
       345 
     | 
    
         
            -
             
     | 
| 
       346 
355 
     | 
    
         
             
                def build_namespace
         
     | 
| 
       347 
356 
     | 
    
         
             
                  parent ? name.to_s.prepend("#{parent.send(:namespace)}.") : name.to_s
         
     | 
| 
       348 
357 
     | 
    
         
             
                end
         
     | 
    
        data/lib/nxt_registry/version.rb
    CHANGED
    
    
    
        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.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.3.7
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Andreas Robecke
         
     | 
| 
         @@ -11,7 +11,7 @@ authors: 
     | 
|
| 
       11 
11 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       12 
12 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       13 
13 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       14 
     | 
    
         
            -
            date:  
     | 
| 
      
 14 
     | 
    
         
            +
            date: 2021-01-30 00:00:00.000000000 Z
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies:
         
     | 
| 
       16 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       17 
17 
     | 
    
         
             
              name: activesupport
         
     | 
| 
         @@ -106,7 +106,6 @@ files: 
     | 
|
| 
       106 
106 
     | 
    
         
             
            - bin/console
         
     | 
| 
       107 
107 
     | 
    
         
             
            - bin/setup
         
     | 
| 
       108 
108 
     | 
    
         
             
            - lib/nxt_registry.rb
         
     | 
| 
       109 
     | 
    
         
            -
            - lib/nxt_registry/attribute.rb
         
     | 
| 
       110 
109 
     | 
    
         
             
            - lib/nxt_registry/blank.rb
         
     | 
| 
       111 
110 
     | 
    
         
             
            - lib/nxt_registry/errors.rb
         
     | 
| 
       112 
111 
     | 
    
         
             
            - lib/nxt_registry/recursive_registry.rb
         
     | 
| 
         @@ -1,17 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module NxtRegistry
         
     | 
| 
       2 
     | 
    
         
            -
              class Attribute
         
     | 
| 
       3 
     | 
    
         
            -
                def initialize(name, registry, **options)
         
     | 
| 
       4 
     | 
    
         
            -
                  @name = name
         
     | 
| 
       5 
     | 
    
         
            -
                  @registry = registry
         
     | 
| 
       6 
     | 
    
         
            -
                  @namespace = [name, registry.send(:namespace)].join('.')
         
     | 
| 
       7 
     | 
    
         
            -
                end
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
                def eql?(other)
         
     | 
| 
       10 
     | 
    
         
            -
                  { name => registry.object_id } == { other.send(:name) => other.send(:registry).object_id }
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                private
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
                attr_reader :name, :registry
         
     | 
| 
       16 
     | 
    
         
            -
              end
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     |