qonfig 0.15.0 → 0.16.0
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 +4 -4
- data/.rubocop.yml +1 -1
- data/.travis.yml +6 -6
- data/CHANGELOG.md +6 -1
- data/README.md +66 -4
- data/lib/qonfig/data_set.rb +20 -0
- data/lib/qonfig/settings.rb +37 -0
- data/lib/qonfig/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d31eafd74da18cba4ef82848b5046df61c5804a1913b5355b76a31a35baaede0
|
4
|
+
data.tar.gz: 6b8d69f450b342d5a825de242fff11c016aadbcd0063c801e7d07e7c28508110
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08ad599216433bc7e81a679d02d2cfd81162ca1895698f3086a174e559744c816cc3a171be925846ad3e84cee5234eb4e9701acc8be13323d1e24eab3572f893'
|
7
|
+
data.tar.gz: 3d83aaa571007f9502810f58d1eecdcaa92a0a5a202708ef35191f39f5c283f923a3c87ba91d5aaf4b42e3c45a9ade01a70eb53a843d53ed88f0ab4ef317e775
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -5,13 +5,13 @@ matrix:
|
|
5
5
|
- rvm: 2.3.8
|
6
6
|
gemfile: gemfiles/with_external_deps.gemfile
|
7
7
|
env: TEST_PLUGINS=true
|
8
|
-
- rvm: 2.4.
|
8
|
+
- rvm: 2.4.7
|
9
9
|
gemfile: gemfiles/with_external_deps.gemfile
|
10
10
|
env: TEST_PLUGINS=true
|
11
|
-
- rvm: 2.5.
|
11
|
+
- rvm: 2.5.6
|
12
12
|
gemfile: gemfiles/with_external_deps.gemfile
|
13
13
|
env: TEST_PLUGINS=true
|
14
|
-
- rvm: 2.6.
|
14
|
+
- rvm: 2.6.4
|
15
15
|
gemfile: gemfiles/with_external_deps.gemfile
|
16
16
|
env: TEST_PLUGINS=true
|
17
17
|
- rvm: ruby-head
|
@@ -22,11 +22,11 @@ matrix:
|
|
22
22
|
env: TEST_PLUGINS=true
|
23
23
|
- rvm: 2.3.8
|
24
24
|
gemfile: gemfiles/without_external_deps.gemfile
|
25
|
-
- rvm: 2.4.
|
25
|
+
- rvm: 2.4.7
|
26
26
|
gemfile: gemfiles/without_external_deps.gemfile
|
27
|
-
- rvm: 2.5.
|
27
|
+
- rvm: 2.5.6
|
28
28
|
gemfile: gemfiles/without_external_deps.gemfile
|
29
|
-
- rvm: 2.6.
|
29
|
+
- rvm: 2.6.4
|
30
30
|
gemfile: gemfiles/without_external_deps.gemfile
|
31
31
|
- rvm: ruby-head
|
32
32
|
gemfile: gemfiles/without_external_deps.gemfile
|
data/CHANGELOG.md
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## [0.16.0] - 2019-09-13
|
5
|
+
### Added
|
6
|
+
- `Qonfig::DataSet.build(&config_klass_definitions)` - build config instance immidietly without `Qonfig::DataSet`-class definition;
|
7
|
+
- `#subset` - get a subset of config settings represented as a hash;
|
8
|
+
|
4
9
|
## [0.15.0] - 2019-09-02
|
5
10
|
### Added
|
6
|
-
- `:format`-option for `load_from_self` and `expose_self` commands
|
11
|
+
- `:format`-option for `load_from_self` and `expose_self` commands that identifies which data format
|
7
12
|
should be chosen for parsing;
|
8
13
|
|
9
14
|
## [0.14.0] - 2019-08-28
|
data/README.md
CHANGED
@@ -24,11 +24,18 @@ require 'qonfig'
|
|
24
24
|
|
25
25
|
- [Definition](#definition)
|
26
26
|
- [Definition and Settings Access](#definition-and-access)
|
27
|
+
- [access via method](#access-via-method)
|
28
|
+
- [index-method](#index-method)
|
29
|
+
- [.dig](#dig)
|
30
|
+
- [.slice](#slice)
|
31
|
+
- [.slice_value](#slice_value)
|
32
|
+
- [.subset](#subset)
|
27
33
|
- [Configuration](#configuration)
|
28
34
|
- [Inheritance](#inheritance)
|
29
35
|
- [Composition](#composition)
|
30
36
|
- [Hash representation](#hash-representation)
|
31
37
|
- [Smart Mixin](#smart-mixin) (`Qonfig::Configurable`)
|
38
|
+
- [Instantiation without class definition](#instantiation-without-class-definition) (`Qonfig::DataSet.build(&definitions)`)
|
32
39
|
- [Interaction](#interaction)
|
33
40
|
- [Iteration over setting keys](#iteration-over-setting-keys) (`#each_setting`, `#deep_each_setting`)
|
34
41
|
- [Config reloading](#config-reloading) (reload config definitions and option values)
|
@@ -86,18 +93,32 @@ class Config < Qonfig::DataSet
|
|
86
93
|
setting :vendor_api do
|
87
94
|
setting :user, 'test_user'
|
88
95
|
end
|
96
|
+
|
97
|
+
# deep nesting
|
98
|
+
setting :credentials do
|
99
|
+
setting :user do
|
100
|
+
setting :login, 'D@iVeR'
|
101
|
+
setting :password, 'test123'
|
102
|
+
end
|
103
|
+
end
|
89
104
|
end
|
90
105
|
|
91
106
|
config = Config.new # your configuration object instance
|
107
|
+
```
|
92
108
|
|
93
|
-
|
109
|
+
#### access via method
|
94
110
|
|
111
|
+
```ruby
|
95
112
|
# get option value via method
|
96
113
|
config.settings.project_id # => nil
|
97
114
|
config.settings.vendor_api.host # => 'app.service.com'
|
98
115
|
config.settings.vendor_api.user # => 'test_user'
|
99
116
|
config.settings.enable_graphql # => false
|
117
|
+
```
|
100
118
|
|
119
|
+
#### index-method []
|
120
|
+
|
121
|
+
```ruby
|
101
122
|
# get option value via index (with indifferent (string / symbol / mixed) access)
|
102
123
|
config.settings[:project_id] # => nil
|
103
124
|
config.settings[:vendor_api][:host] # => 'app.service.com'
|
@@ -115,24 +136,51 @@ config['project_id'] # => nil
|
|
115
136
|
config['enable_graphql'] # => false
|
116
137
|
config[:project_id] # => nil
|
117
138
|
config[:enable_graphql] # => false
|
139
|
+
```
|
140
|
+
|
141
|
+
#### .dig
|
118
142
|
|
119
|
-
|
143
|
+
```ruby
|
144
|
+
# get option value in Hash#dig manner (and fail when the required key does not exist);
|
120
145
|
config.dig(:vendor_api, :host) # => 'app.service.com' # (key exists)
|
121
146
|
config.dig(:vendor_api, :port) # => Qonfig::UnknownSettingError # (key does not exist)
|
147
|
+
```
|
122
148
|
|
123
|
-
|
149
|
+
#### .slice
|
150
|
+
|
151
|
+
```ruby
|
152
|
+
# get a hash slice of setting options (and fail when the required key does not exist);
|
124
153
|
config.slice(:vendor_api) # => { 'vendor_api' => { 'host' => 'app_service', 'user' => 'test_user' } }
|
125
154
|
config.slice(:vendor_api, :user) # => { 'user' => 'test_user' }
|
126
155
|
config.slice(:project_api) # => Qonfig::UnknownSettingError # (key does not exist)
|
127
156
|
config.slice(:vendor_api, :port) # => Qonfig::UnknownSettingError # (key does not exist)
|
157
|
+
```
|
158
|
+
|
159
|
+
#### .slice_value
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
# get value from the slice of setting options using the given key set
|
163
|
+
# (and fail when the required key does not exist) (works in slice manner);
|
128
164
|
|
129
|
-
# get value from the slice of setting options using the given key set (and fail when the required key does not exist) (works in slice manner)
|
130
165
|
config.slice_value(:vendor_api) # => { 'host' => 'app_service', 'user' => 'test_user' }
|
131
166
|
config.slice_value(:vendor_api, :user) # => 'test_user'
|
132
167
|
config.slice_value(:project_api) # => Qonfig::UnknownSettingError # (key does not exist)
|
133
168
|
config.slice_value(:vendor_api, :port) # => Qonfig::UnknownSettingError # (key does not exist)
|
134
169
|
```
|
135
170
|
|
171
|
+
#### .subset
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
# - get a subset (a set of sets) of config settings represented as a hash;
|
175
|
+
# - each key (or key set) represents a requirement of a certain setting key;
|
176
|
+
|
177
|
+
config.subet(:vendor_api, :enable_graphql)
|
178
|
+
# => { 'vendor_api' => { 'user' => ..., 'host' => ... }, 'enable_graphql' => false }
|
179
|
+
|
180
|
+
config.subset(:project_id, [:vendor_api, :host], [:credentials, :user, :login])
|
181
|
+
# => { 'project_id' => nil, 'host' => 'app.service.com', 'login' => 'D@iVeR' }
|
182
|
+
```
|
183
|
+
|
136
184
|
---
|
137
185
|
|
138
186
|
### Configuration
|
@@ -407,6 +455,20 @@ GeneralApplication.config.to_h
|
|
407
455
|
# and etc... (all Qonfig-related features)
|
408
456
|
```
|
409
457
|
|
458
|
+
### Instantiation without class definition
|
459
|
+
|
460
|
+
```ruby
|
461
|
+
config = Qonfig::DataSet.build do
|
462
|
+
setting :user, 'D@iVeR'
|
463
|
+
setting :password, 'test123'
|
464
|
+
end
|
465
|
+
|
466
|
+
config.is_a?(Qonfig::DataSet) # => true
|
467
|
+
|
468
|
+
config.settings.user # => 'D@iVeR'
|
469
|
+
config.settings.password # => 'test123'
|
470
|
+
```
|
471
|
+
|
410
472
|
---
|
411
473
|
|
412
474
|
## Interaction
|
data/lib/qonfig/data_set.rb
CHANGED
@@ -12,6 +12,17 @@ class Qonfig::DataSet # rubocop:disable Metrics/ClassLength
|
|
12
12
|
# @since 0.13.0
|
13
13
|
extend Qonfig::Validator::DSL
|
14
14
|
|
15
|
+
class << self
|
16
|
+
# @param config_klass_definitions [Proc]
|
17
|
+
# @return [Qonfig::DataSet]
|
18
|
+
#
|
19
|
+
# @api public
|
20
|
+
# @since 0.16.0
|
21
|
+
def build(&config_klass_definitions)
|
22
|
+
Class.new(self, &config_klass_definitions).new
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
15
26
|
# @return [Qonfig::Settings]
|
16
27
|
#
|
17
28
|
# @api private
|
@@ -164,6 +175,15 @@ class Qonfig::DataSet # rubocop:disable Metrics/ClassLength
|
|
164
175
|
thread_safe_access { settings.__slice_value__(*keys) }
|
165
176
|
end
|
166
177
|
|
178
|
+
# @param keys [Array<String, Symbol, Array<String, Symbol>>]
|
179
|
+
# @return [Hash]
|
180
|
+
#
|
181
|
+
# @api private
|
182
|
+
# @since 0.16.0
|
183
|
+
def subset(*keys)
|
184
|
+
thread_safe_access { settings.__subset__(*keys) }
|
185
|
+
end
|
186
|
+
|
167
187
|
# @return [void]
|
168
188
|
#
|
169
189
|
# @api public
|
data/lib/qonfig/settings.rb
CHANGED
@@ -176,6 +176,15 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
|
|
176
176
|
__lock__.thread_safe_access { __deep_slice_value__(*keys) }
|
177
177
|
end
|
178
178
|
|
179
|
+
# @param keys [Array<String, Symbol, Array<String, Symbol>>]
|
180
|
+
# @return [Hash]
|
181
|
+
#
|
182
|
+
# @api private
|
183
|
+
# @since 0.16.0
|
184
|
+
def __subset__(*keys)
|
185
|
+
__lock__.thread_safe_access { __deep_subset__(*keys) }
|
186
|
+
end
|
187
|
+
|
179
188
|
# @option transform_key [Proc]
|
180
189
|
# @option transform_value [Proc]
|
181
190
|
# @return [Hash]
|
@@ -467,6 +476,34 @@ class Qonfig::Settings # NOTE: Layout/ClassStructure is disabled only for CORE_M
|
|
467
476
|
__deep_slice__(*keys)[required_key]
|
468
477
|
end
|
469
478
|
|
479
|
+
# @param keys [Array<String, Symbol, Array<String, Symbol>>]
|
480
|
+
# @return [Hash]
|
481
|
+
#
|
482
|
+
# @api private
|
483
|
+
# @since 0.16.0
|
484
|
+
def __deep_subset__(*keys)
|
485
|
+
{}.tap do |result|
|
486
|
+
keys.each do |key_set|
|
487
|
+
required_keys =
|
488
|
+
case key_set
|
489
|
+
when String, Symbol
|
490
|
+
# TODO: support for patterns
|
491
|
+
__indifferently_accessable_option_key__(key_set)
|
492
|
+
when Array
|
493
|
+
key_set.map(&method(:__indifferently_accessable_option_key__))
|
494
|
+
else
|
495
|
+
raise(
|
496
|
+
Qonfig::ArgumentError,
|
497
|
+
'All setting keys should be a symbol/string or an array of symbols/strings!'
|
498
|
+
)
|
499
|
+
end
|
500
|
+
|
501
|
+
required_options = __deep_slice__(*required_keys)
|
502
|
+
result.merge!(required_options)
|
503
|
+
end
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
470
507
|
# @param options_part [Hash]
|
471
508
|
# @option transform_key [Proc]
|
472
509
|
# @option transform_value [Proc]
|
data/lib/qonfig/version.rb
CHANGED
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.
|
4
|
+
version: 0.16.0
|
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-09-
|
11
|
+
date: 2019-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: coveralls
|