qonfig 0.24.0 → 0.24.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: 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