qonfig 0.10.0 → 0.11.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/.gitignore +1 -0
- data/.rspec +1 -1
- data/.rubocop.yml +1 -1
- data/.travis.yml +3 -3
- data/CHANGELOG.md +10 -0
- data/README.md +146 -1
- data/Rakefile +2 -0
- data/lib/qonfig/command_set.rb +53 -55
- data/lib/qonfig/commands/add_nested_option.rb +36 -40
- data/lib/qonfig/commands/add_option.rb +33 -37
- data/lib/qonfig/commands/base.rb +9 -13
- data/lib/qonfig/commands/compose.rb +29 -33
- data/lib/qonfig/commands/expose_yaml.rb +154 -158
- data/lib/qonfig/commands/load_from_env.rb +77 -79
- data/lib/qonfig/commands/load_from_json.rb +52 -56
- data/lib/qonfig/commands/load_from_self.rb +57 -61
- data/lib/qonfig/commands/load_from_yaml.rb +54 -58
- data/lib/qonfig/commands.rb +15 -0
- data/lib/qonfig/configurable.rb +88 -90
- data/lib/qonfig/data_set/class_builder.rb +17 -21
- data/lib/qonfig/data_set.rb +186 -138
- data/lib/qonfig/dsl.rb +106 -108
- data/lib/qonfig/{error.rb → exceptions.rb} +13 -1
- data/lib/qonfig/loaders/basic.rb +30 -32
- data/lib/qonfig/loaders/json.rb +16 -23
- data/lib/qonfig/loaders/yaml.rb +16 -23
- data/lib/qonfig/loaders.rb +9 -0
- data/lib/qonfig/plugins/abstract.rb +7 -11
- data/lib/qonfig/plugins/access_mixin.rb +21 -25
- data/lib/qonfig/plugins/registry.rb +120 -124
- data/lib/qonfig/plugins.rb +56 -54
- data/lib/qonfig/settings/builder.rb +10 -14
- data/lib/qonfig/settings/key_guard.rb +60 -64
- data/lib/qonfig/settings/lock.rb +53 -57
- data/lib/qonfig/settings.rb +392 -354
- data/lib/qonfig/uploaders/base.rb +18 -0
- data/lib/qonfig/uploaders/file.rb +55 -0
- data/lib/qonfig/uploaders/json.rb +35 -0
- data/lib/qonfig/uploaders/yaml.rb +93 -0
- data/lib/qonfig/uploaders.rb +10 -0
- data/lib/qonfig/version.rb +1 -1
- data/lib/qonfig.rb +4 -21
- data/qonfig.gemspec +1 -1
- metadata +13 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc263b67aa4feb6e9c42f6f5f593e61dec61e758e7d7de41f4d36fc40bee18a6
|
4
|
+
data.tar.gz: f2e3e3f49318c392749c742a299edea3e58169bb5fc13930517a1c39cede4c91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46a9fd484859f615746bb5f1c21df8024ebd1766cc40353c313276b759795ec11b61e479306d3fb9f3f3e3764455ec06541746d827c56de0145c13838ccae6de
|
7
|
+
data.tar.gz: 491d96820bd2be04f8dde6d103598643d26dfafbf13a50a150a5b1c8469b8a4a726d02aeb35d9450a5a3785ee8fe3e7cc865c68e6080cd2f74701a20465de304
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -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.11.0] - 2019-05-15
|
5
|
+
### Added
|
6
|
+
- `#save_to_json` - save configurations to a json file (uses native `::JSON.generate` under the hood);
|
7
|
+
- `#save_to_yaml` - save configurations to a yaml file (uses native `::Psych.dump` under the hood);
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
- new `#to_h` signature: `#to_h(key_transformer:, value_transformer:)`
|
11
|
+
- `:key_transformer` - proc object used for key pre-processing (`-> (key) { key }` by default);
|
12
|
+
- `:value_transformer` - proc object used for value pre-processing (`-> (value) { value }` by default);
|
13
|
+
|
4
14
|
## [0.10.0] - 2019-02-26
|
5
15
|
### Added
|
6
16
|
- `#slice_value` - get a slice of config options as a hash set and fetch the required value using the given key set;
|
data/README.md
CHANGED
@@ -22,7 +22,6 @@ require 'qonfig'
|
|
22
22
|
## Usage
|
23
23
|
|
24
24
|
- [Definition and Settings Access](#definition-and-access)
|
25
|
-
- [Dynamic value calculation](???)
|
26
25
|
- [Configuration](#configuration)
|
27
26
|
- [Inheritance](#inheritance)
|
28
27
|
- [Composition](#composition)
|
@@ -36,6 +35,8 @@ require 'qonfig'
|
|
36
35
|
- [Load from JSON file](#load-from-json-file)
|
37
36
|
- [Load from ENV](#load-from-env)
|
38
37
|
- [Load from \_\_END\_\_](#load-from-__end__) (aka `load_from_self`)
|
38
|
+
- [Save to JSON file](#save-to-json-file) (`save_to_json`)
|
39
|
+
- [Save to YAML file](#save-to-yaml-file) (`save_to_yaml`)
|
39
40
|
- [Smart Mixin](#smart-mixin) (`Qonfig::Configurable`)
|
40
41
|
- [Plugins](#plugins)
|
41
42
|
|
@@ -777,6 +778,150 @@ connection_timeout:
|
|
777
778
|
|
778
779
|
---
|
779
780
|
|
781
|
+
### Save to JSON file
|
782
|
+
|
783
|
+
- `#save_to_json` - represents config object as a json structure and saves it to a file:
|
784
|
+
- uses native `::JSON.generate` under the hood;
|
785
|
+
- writes new file (or rewrites existing file);
|
786
|
+
- attributes:
|
787
|
+
- `:path` - (required) - file path;
|
788
|
+
- `:options` - (optional) - native `::JSON.generate` options (from stdlib):
|
789
|
+
- `:indent` - `" "` by default;
|
790
|
+
- `:space` - `" "` by default/
|
791
|
+
- `:object_nl` - `"\n"` by default;
|
792
|
+
- `&value_preprocessor` - (optional) - value pre-processor;
|
793
|
+
|
794
|
+
#### Without value preprocessing (standard usage)
|
795
|
+
|
796
|
+
```ruby
|
797
|
+
class AppConfig < Qonfig::DataSet
|
798
|
+
setting :server do
|
799
|
+
setting :address, 'localhost'
|
800
|
+
setting :port, 12_345
|
801
|
+
end
|
802
|
+
|
803
|
+
setting :enabled, true
|
804
|
+
end
|
805
|
+
|
806
|
+
config = AppConfig.new
|
807
|
+
|
808
|
+
# NOTE: save to json file
|
809
|
+
config.save_to_json(path: 'config.json')
|
810
|
+
```
|
811
|
+
|
812
|
+
```json
|
813
|
+
{
|
814
|
+
"sentry": {
|
815
|
+
"address": "localhost",
|
816
|
+
"port": 12345
|
817
|
+
},
|
818
|
+
"enabled": true
|
819
|
+
}
|
820
|
+
```
|
821
|
+
|
822
|
+
#### With value preprocessing
|
823
|
+
|
824
|
+
```ruby
|
825
|
+
class AppConfig < Qonfig::DataSet
|
826
|
+
setting :server do
|
827
|
+
setting :address, 'localhost'
|
828
|
+
setting :port, 12_345
|
829
|
+
end
|
830
|
+
|
831
|
+
setting :enabled, true
|
832
|
+
setting :dynamic, -> { 1 + 2 }
|
833
|
+
end
|
834
|
+
|
835
|
+
config = AppConfig.new
|
836
|
+
|
837
|
+
# NOTE: save to json file with custom options (no spaces / no new line / no indent; call procs)
|
838
|
+
config.save_to_json(path: 'config.json', options: { indent: '', space: '', object_nl: '' }) do |value|
|
839
|
+
value.is_a?(Proc) ? value.call : value
|
840
|
+
end
|
841
|
+
```
|
842
|
+
|
843
|
+
```json
|
844
|
+
// no spaces / no new line / no indent / calculated "dynamic" setting key
|
845
|
+
{"sentry":{"address":"localhost","port":12345},"enabled":true,"dynamic":3}
|
846
|
+
```
|
847
|
+
|
848
|
+
---
|
849
|
+
|
850
|
+
### Save to YAML file
|
851
|
+
|
852
|
+
- `#save_to_yaml` - represents config object as a yaml structure and saves it to a file:
|
853
|
+
- uses native `::Psych.dump` under the hood;
|
854
|
+
- writes new file (or rewrites existing file);
|
855
|
+
- attributes:
|
856
|
+
- `:path` - (required) - file path;
|
857
|
+
- `:options` - (optional) - native `::Psych.dump` options (from stdlib):
|
858
|
+
- `:indentation` - `2` by default;
|
859
|
+
- `:line_width` - `-1` by default;
|
860
|
+
- `:canonical` - `false` by default;
|
861
|
+
- `:header` - `false` by default;
|
862
|
+
- `:symbolize_keys` - (non-native option) - `false` by default;
|
863
|
+
- `&value_preprocessor` - (optional) - value pre-processor;
|
864
|
+
|
865
|
+
#### Without value preprocessing (standard usage)
|
866
|
+
|
867
|
+
```ruby
|
868
|
+
class AppConfig < Qonfig::DataSet
|
869
|
+
setting :server do
|
870
|
+
setting :address, 'localhost'
|
871
|
+
setting :port, 12_345
|
872
|
+
end
|
873
|
+
|
874
|
+
setting :enabled, true
|
875
|
+
end
|
876
|
+
|
877
|
+
config = AppConfig.new
|
878
|
+
|
879
|
+
# NOTE: save to yaml file
|
880
|
+
config.save_to_yaml(path: 'config.yml')
|
881
|
+
```
|
882
|
+
|
883
|
+
```yaml
|
884
|
+
---
|
885
|
+
server:
|
886
|
+
address: localhost
|
887
|
+
port: 12345
|
888
|
+
enabled: true
|
889
|
+
```
|
890
|
+
|
891
|
+
#### With value preprocessing and custom options
|
892
|
+
|
893
|
+
```ruby
|
894
|
+
class AppConfig < Qonfig::DataSet
|
895
|
+
setting :server do
|
896
|
+
setting :address, 'localhost'
|
897
|
+
setting :port, 12_345
|
898
|
+
end
|
899
|
+
|
900
|
+
setting :enabled, true
|
901
|
+
setting :dynamic, -> { 5 + 5 }
|
902
|
+
end
|
903
|
+
|
904
|
+
config = AppConfig.new
|
905
|
+
|
906
|
+
# NOTE: save to yaml file with custom options (add yaml version header; call procs)
|
907
|
+
config.save_to_yaml(path: 'config.yml', options: { header: true }) do |value|
|
908
|
+
value.is_a?(Proc) ? value.call : value
|
909
|
+
end
|
910
|
+
```
|
911
|
+
|
912
|
+
```yaml
|
913
|
+
# yaml version header / calculated "dynamic" setting key
|
914
|
+
%YAML 1.1
|
915
|
+
---
|
916
|
+
server:
|
917
|
+
address: localhost
|
918
|
+
port: 12345
|
919
|
+
enabled: true
|
920
|
+
dynamic: 10
|
921
|
+
```
|
922
|
+
|
923
|
+
---
|
924
|
+
|
780
925
|
### Smart Mixin
|
781
926
|
|
782
927
|
- class-level:
|
data/Rakefile
CHANGED
@@ -4,6 +4,7 @@ require 'bundler/gem_tasks'
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
5
|
require 'rubocop'
|
6
6
|
require 'rubocop-rspec'
|
7
|
+
require 'rubocop-performance'
|
7
8
|
require 'rubocop/rake_task'
|
8
9
|
|
9
10
|
RuboCop::RakeTask.new(:rubocop) do |t|
|
@@ -11,6 +12,7 @@ RuboCop::RakeTask.new(:rubocop) do |t|
|
|
11
12
|
|
12
13
|
t.options = ['--config', config_path]
|
13
14
|
t.requires << 'rubocop-rspec'
|
15
|
+
t.requires << 'rubocop-performance'
|
14
16
|
end
|
15
17
|
|
16
18
|
RSpec::Core::RakeTask.new(:rspec)
|
data/lib/qonfig/command_set.rb
CHANGED
@@ -1,69 +1,67 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class Qonfig::CommandSet
|
6
|
+
# @return [Array<Qonfig::Commands::Base>]
|
7
|
+
#
|
4
8
|
# @api private
|
5
9
|
# @since 0.1.0
|
6
|
-
|
7
|
-
# @return [Array<Qonfig::Commands::Base>]
|
8
|
-
#
|
9
|
-
# @api private
|
10
|
-
# @since 0.1.0
|
11
|
-
attr_reader :commands
|
10
|
+
attr_reader :commands
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
# @api private
|
13
|
+
# @since 0.1.0
|
14
|
+
def initialize
|
15
|
+
@commands = []
|
16
|
+
@access_lock = Mutex.new
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
19
|
+
# @param command [Qonfig::Commands::Base]
|
20
|
+
# @return [void]
|
21
|
+
#
|
22
|
+
# @api private
|
23
|
+
# @since 0.1.0
|
24
|
+
def add_command(command)
|
25
|
+
thread_safe { commands << command }
|
26
|
+
end
|
27
|
+
alias_method :<<, :add_command
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
# @param block [Proc]
|
30
|
+
# @return [Enumerable]
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
# @since 0.1.0
|
34
|
+
def each(&block)
|
35
|
+
thread_safe { block_given? ? commands.each(&block) : commands.each }
|
36
|
+
end
|
38
37
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
# @param command_set [Qonfig::CommandSet]
|
39
|
+
# @return [void]
|
40
|
+
#
|
41
|
+
# @api private
|
42
|
+
# @since 0.1.0
|
43
|
+
def concat(command_set)
|
44
|
+
thread_safe { commands.concat(command_set.commands) }
|
45
|
+
end
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
47
|
+
# @return [Qonfig::CommandSet]
|
48
|
+
#
|
49
|
+
# @api private
|
50
|
+
# @since 0.2.0
|
51
|
+
def dup
|
52
|
+
thread_safe do
|
53
|
+
self.class.new.tap { |duplicate| duplicate.concat(self) }
|
56
54
|
end
|
55
|
+
end
|
57
56
|
|
58
|
-
|
57
|
+
private
|
59
58
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
59
|
+
# @param block [Proc]
|
60
|
+
# @return [Object]
|
61
|
+
#
|
62
|
+
# @api private
|
63
|
+
# @since 0.2.0
|
64
|
+
def thread_safe(&block)
|
65
|
+
@access_lock.synchronize(&block)
|
68
66
|
end
|
69
67
|
end
|
@@ -1,49 +1,45 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# @since 0.1.0
|
12
|
-
attr_reader :key
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class Qonfig::Commands::AddNestedOption < Qonfig::Commands::Base
|
6
|
+
# @return [Symbol, String]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :key
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
# @return [Class<Qonfig::DataSet>]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
# @since 0.2.0
|
16
|
+
attr_reader :nested_data_set_klass
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
18
|
+
# @param key [Symbol, String]
|
19
|
+
# @param nested_definitions [Proc]
|
20
|
+
#
|
21
|
+
# @raise [Qonfig::ArgumentError]
|
22
|
+
# @raise [Qonfig::CoreMethodIntersectionError]
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
# @since 0.1.0
|
26
|
+
def initialize(key, nested_definitions)
|
27
|
+
Qonfig::Settings::KeyGuard.prevent_incomparabilities!(key)
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
@key = key
|
30
|
+
@nested_data_set_klass = Class.new(Qonfig::DataSet).tap do |data_set|
|
31
|
+
data_set.instance_eval(&nested_definitions)
|
32
|
+
end
|
33
|
+
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
# @param settings [Qonfig::Settings]
|
36
|
+
# @return [void]
|
37
|
+
#
|
38
|
+
# @api private
|
39
|
+
# @since 0.1.0
|
40
|
+
def call(settings)
|
41
|
+
nested_settings = nested_data_set_klass.new.settings
|
44
42
|
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
43
|
+
settings.__define_setting__(key, nested_settings)
|
48
44
|
end
|
49
45
|
end
|
@@ -1,45 +1,41 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# @since 0.1.0
|
12
|
-
attr_reader :key
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class Qonfig::Commands::AddOption < Qonfig::Commands::Base
|
6
|
+
# @return [Symbol, String]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :key
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
12
|
+
# @return [Object]
|
13
|
+
#
|
14
|
+
# @api private
|
15
|
+
# @since 0.1.0
|
16
|
+
attr_reader :value
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
18
|
+
# @param key [Symbol, String]
|
19
|
+
# @param value [Object]
|
20
|
+
#
|
21
|
+
# @raise [Qonfig::ArgumentError]
|
22
|
+
# @raise [Qonfig::CoreMethodIntersectionError]
|
23
|
+
#
|
24
|
+
# @api private
|
25
|
+
# @since 0.1.0
|
26
|
+
def initialize(key, value)
|
27
|
+
Qonfig::Settings::KeyGuard.prevent_incomparabilities!(key)
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
29
|
+
@key = key
|
30
|
+
@value = value
|
31
|
+
end
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
33
|
+
# @param settings [Qonfig::Settings]
|
34
|
+
# @return [void]
|
35
|
+
#
|
36
|
+
# @api private
|
37
|
+
# @since 0.1.0
|
38
|
+
def call(settings)
|
39
|
+
settings.__define_setting__(key, value)
|
44
40
|
end
|
45
41
|
end
|
data/lib/qonfig/commands/base.rb
CHANGED
@@ -1,16 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# @since 0.1.0
|
13
|
-
def call(settings); end
|
14
|
-
end
|
15
|
-
end
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class Qonfig::Commands::Base
|
6
|
+
# @param settings [Qonfig::Settings]
|
7
|
+
# @return [void]
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
# @since 0.1.0
|
11
|
+
def call(settings); end
|
16
12
|
end
|
@@ -1,41 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
# @since 0.1.0
|
12
|
-
attr_reader :data_set_klass
|
3
|
+
# @api private
|
4
|
+
# @since 0.1.0
|
5
|
+
class Qonfig::Commands::Compose < Qonfig::Commands::Base
|
6
|
+
# @return [Qonfig::DataSet]
|
7
|
+
#
|
8
|
+
# @api private
|
9
|
+
# @since 0.1.0
|
10
|
+
attr_reader :data_set_klass
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
12
|
+
# @param data_set_klass [Qonfig::DataSet]
|
13
|
+
#
|
14
|
+
# @raise [Qonfig::ArgumentError]
|
15
|
+
#
|
16
|
+
# @api private
|
17
|
+
# @since 0.1.0
|
18
|
+
def initialize(data_set_klass)
|
19
|
+
raise(
|
20
|
+
Qonfig::ArgumentError,
|
21
|
+
'Composed config class should be a subtype of Qonfig::DataSet'
|
22
|
+
) unless data_set_klass.is_a?(Class) && data_set_klass < Qonfig::DataSet
|
25
23
|
|
26
|
-
|
27
|
-
|
24
|
+
@data_set_klass = data_set_klass
|
25
|
+
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
# @param settings [Qonfig::Settings]
|
28
|
+
# @return [void]
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
# @since 0.1.0
|
32
|
+
def call(settings)
|
33
|
+
composite_settings = data_set_klass.new.settings
|
36
34
|
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
35
|
+
settings.__append_settings__(composite_settings)
|
40
36
|
end
|
41
37
|
end
|