qonfig 0.24.0 → 0.24.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: 43bd1182137cdfc1dbba1156fb39daa755a0e0aa4fa8cd9a58e9ee62afd8a682
4
- data.tar.gz: 983d47af7e7d3edceff06ccdc5e17dfe18befa6768496c8dfbdbd909c7746beb
3
+ metadata.gz: 6d1999e0aae940158d50623dcf308d0cc37456f2f88fb3a2fea1b6f3e595c102
4
+ data.tar.gz: 9e80d958e30a13850712353ee6b624cccb7666e39b91c13d0c5308f9e6988e7a
5
5
  SHA512:
6
- metadata.gz: 544c1f4704f5cd33e08354bb47f202f8fe5356e698577eb15d176827e24fff77ecbc5d9fab19e79a1550c6d6771a70f8bec3228c2478737c24e15b49bf812986
7
- data.tar.gz: 59fb280050df43e2af4b37e548073083fdcce19f7250778e8c5db596a0c2fbd373b4f479dea721531c39b3a51ed0fe643e08b3251b93d2ea31952609db1241c4
6
+ metadata.gz: 94637e644c352e6c972c9387b773687212553bbc1dc88da8498dc07bd212edda281173d5d793df4d47ebf5f1e03f4ba65e3fb48bb89a85a24048ff6f25d379b1
7
+ data.tar.gz: ef6f5f2d6ef534f07daade1be1ba6f39ca4fee282ea1c082688e6e6c23aff257613349a4fefbad7582a1e907246c47f291c6e235ed5b0a95399e7e7ed5f1bcc4
@@ -1,6 +1,16 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.24.1] - 2020-03-10
5
+ ### Changed
6
+ - Enhanced dot-notated key resolving algorithm: now it goes through the all dot-notated key parts
7
+ until it finds the required setting key (or fails with `Qonfig::UnknowSettingKeyError`);
8
+
9
+ ### Fixed
10
+ - (**Pretty-Print Plugin**):
11
+ - dot-noted setting keys can not be pretty-printed (they raise `Qonfig::UnknownSettingKeyError`);
12
+ - added `set` and `pp` dependnecy as pre-reloaded dependencies;
13
+
4
14
  ## [0.24.0] - 2019-12-29
5
15
  ### Added
6
16
  - Support for **Ruby@2.7**;
data/README.md CHANGED
@@ -1001,6 +1001,8 @@ config.root_keys
1001
1001
  - method signature: `#reload!(configurations = {}, &configuration)`;
1002
1002
 
1003
1003
  ```ruby
1004
+ # -- config example ---
1005
+
1004
1006
  class Config < Qonfig::DataSet
1005
1007
  setting :db do
1006
1008
  setting :adapter, 'postgresql'
@@ -1013,6 +1015,10 @@ config = Config.new
1013
1015
 
1014
1016
  config.settings.db.adapter # => 'postgresql'
1015
1017
  config.settings.logger # => #<Logger:0x00007ff9>
1018
+ ```
1019
+
1020
+ ```ruby
1021
+ # --- redefine some settings (or add a new one) --
1016
1022
 
1017
1023
  config.configure { |conf| conf.logger = nil } # redefine some settings (will be reloaded)
1018
1024
 
@@ -1024,6 +1030,10 @@ class Config
1024
1030
 
1025
1031
  setting :enable_api, false # append new setting
1026
1032
  end
1033
+ ```
1034
+
1035
+ ```ruby
1036
+ # --- reload ---
1027
1037
 
1028
1038
  # reload settings
1029
1039
  config.reload!
@@ -3207,12 +3217,13 @@ config = Config.new
3207
3217
  ## Roadmap
3208
3218
 
3209
3219
  - **Major**:
3210
- - distributed configuration server;
3211
- - cli toolchain;
3212
3220
  - support for Rails-like secrets;
3213
3221
  - support for persistent data storages (we want to store configs in multiple databases and files);
3214
- - Rails reload plugin;
3222
+ - rails plugin;
3223
+ - support for pattern matching;
3215
3224
  - **Minor**:
3225
+ - An ability to flag `Qonfig::Configurable`'s config object as `compacted` (`Qonfig::Compacted`);
3226
+ - External validation class with an importing api for better custom validations;
3216
3227
 
3217
3228
  ## Build
3218
3229
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'set'
3
4
  require 'yaml'
4
5
  require 'json'
5
6
  require 'erb'
@@ -16,6 +16,7 @@ class Qonfig::Plugins::PrettyPrint < Qonfig::Plugins::Abstract
16
16
  end
17
17
  # :nocov:
18
18
 
19
+ require_relative 'pretty_print/requirements'
19
20
  require_relative 'pretty_print/mixin'
20
21
  require_relative 'pretty_print/data_set'
21
22
  require_relative 'pretty_print/settings'
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pp'
@@ -507,6 +507,7 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
507
507
  raise(initial_error) if key_set.size == 1
508
508
 
509
509
  begin
510
+ # TODO: rewrite with __deep_access__-like key resolving functionality
510
511
  setting_value = __get_value__(key_set.first)
511
512
  required_key = key_set[1..-1].join(DOT_NOTATION_SEPARATOR)
512
513
  setting_value[required_key] = value # NOTE: pseudo-recoursive assignment
@@ -557,11 +558,23 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
557
558
  #
558
559
  # @api private
559
560
  # @since 0.2.0
560
- def __deep_access__(*keys)
561
+ def __deep_access__(*keys) # rubocop:disable Metrics/AbcSize
561
562
  ::Kernel.raise(Qonfig::ArgumentError, 'Key list can not be empty') if keys.empty?
562
563
 
563
- result = __get_value__(keys.first)
564
- rest_keys = Array(keys[1..-1])
564
+ result = nil
565
+ rest_keys = nil
566
+ key_parts_boundary = keys.size - 1
567
+
568
+ 0.upto(key_parts_boundary) do |key_parts_slice_boundary|
569
+ begin
570
+ setting_key = keys[0..key_parts_slice_boundary].join(DOT_NOTATION_SEPARATOR)
571
+ result = __get_value__(setting_key)
572
+ rest_keys = Array(keys[(key_parts_slice_boundary + 1)..-1])
573
+ break
574
+ rescue Qonfig::UnknownSettingError => error
575
+ key_parts_boundary == key_parts_slice_boundary ? raise(error) : next
576
+ end
577
+ end
565
578
 
566
579
  case
567
580
  when rest_keys.empty?
@@ -5,5 +5,5 @@ module Qonfig
5
5
  #
6
6
  # @api public
7
7
  # @since 0.1.0
8
- VERSION = '0.24.0'
8
+ VERSION = '0.24.1'
9
9
  end
@@ -29,9 +29,9 @@ Gem::Specification.new do |spec|
29
29
  f.match(%r{^(test|spec|features)/})
30
30
  end
31
31
 
32
- spec.add_development_dependency 'simplecov', '~> 0.17'
32
+ spec.add_development_dependency 'simplecov', '~> 0.18'
33
33
  spec.add_development_dependency 'rspec', '~> 3.9'
34
- spec.add_development_dependency 'armitage-rubocop', '~> 0.78'
34
+ spec.add_development_dependency 'armitage-rubocop', '~> 0.79'
35
35
 
36
36
  spec.add_development_dependency 'bundler'
37
37
  spec.add_development_dependency 'rake', '>= 13'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qonfig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.0
4
+ version: 0.24.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rustam Ibragimov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-29 00:00:00.000000000 Z
11
+ date: 2020-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.17'
19
+ version: '0.18'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.17'
26
+ version: '0.18'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.78'
47
+ version: '0.79'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.78'
54
+ version: '0.79'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -169,6 +169,7 @@ files:
169
169
  - lib/qonfig/plugins/pretty_print/compacted.rb
170
170
  - lib/qonfig/plugins/pretty_print/data_set.rb
171
171
  - lib/qonfig/plugins/pretty_print/mixin.rb
172
+ - lib/qonfig/plugins/pretty_print/requirements.rb
172
173
  - lib/qonfig/plugins/pretty_print/ruby_2_7_basic_object_pp_patch.rb
173
174
  - lib/qonfig/plugins/pretty_print/settings.rb
174
175
  - lib/qonfig/plugins/registry.rb