qonfig 0.24.0 → 0.27.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/.github/workflows/test.yml +62 -0
- data/.gitignore +0 -2
- data/.rubocop.yml +19 -1
- data/CHANGELOG.md +53 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +129 -0
- data/LICENSE.txt +1 -1
- data/README.md +115 -5
- data/Rakefile +0 -1
- data/gemfiles/with_external_deps.gemfile +2 -0
- data/gemfiles/with_external_deps.gemfile.lock +123 -0
- data/gemfiles/without_external_deps.gemfile.lock +113 -0
- data/lib/qonfig/commands/definition/load_from_env/value_converter.rb +2 -0
- data/lib/qonfig/commands/definition/load_from_env.rb +2 -0
- data/lib/qonfig/data_set.rb +3 -0
- data/lib/qonfig/imports/direct_key.rb +8 -2
- data/lib/qonfig/imports/mappings.rb +8 -2
- data/lib/qonfig/loaders/basic.rb +2 -0
- data/lib/qonfig/loaders/json.rb +2 -1
- data/lib/qonfig/loaders/yaml.rb +3 -1
- data/lib/qonfig/plugins/pretty_print/requirements.rb +3 -0
- data/lib/qonfig/plugins/pretty_print.rb +1 -0
- data/lib/qonfig/plugins/toml/commands/definition/expose_toml.rb +3 -3
- data/lib/qonfig/plugins/vault/commands/definition/expose_vault.rb +142 -0
- data/lib/qonfig/plugins/vault/commands/definition/load_from_vault.rb +53 -0
- data/lib/qonfig/plugins/vault/dsl.rb +35 -0
- data/lib/qonfig/plugins/vault/errors.rb +9 -0
- data/lib/qonfig/plugins/vault/loaders/vault.rb +74 -0
- data/lib/qonfig/plugins/vault.rb +24 -0
- data/lib/qonfig/plugins.rb +1 -0
- data/lib/qonfig/settings/key_matcher.rb +3 -1
- data/lib/qonfig/settings.rb +83 -22
- data/lib/qonfig/uploaders/base.rb +2 -0
- data/lib/qonfig/uploaders/yaml.rb +2 -0
- data/lib/qonfig/version.rb +1 -1
- data/lib/qonfig.rb +4 -1
- data/qonfig.gemspec +9 -8
- data/sig/.keep +0 -0
- data/spec/artifacts/.keep +0 -0
- data/spec/features/clear_options_spec.rb +92 -0
- data/spec/features/compacted_config_spec.rb +308 -0
- data/spec/features/composition_spec.rb +207 -0
- data/spec/features/config_definition_and_representation_spec.rb +535 -0
- data/spec/features/definition_order_spec.rb +69 -0
- data/spec/features/dig_functionality_spec.rb +47 -0
- data/spec/features/dot_notation_spec.rb +159 -0
- data/spec/features/export_settings_spec.rb +138 -0
- data/spec/features/expose_json_spec.rb +281 -0
- data/spec/features/expose_self/format_option_dynamic_spec.rb +69 -0
- data/spec/features/expose_self/format_option_json_spec.rb +74 -0
- data/spec/features/expose_self/format_option_unsupported_spec.rb +27 -0
- data/spec/features/expose_self/format_option_yaml_spec.rb +77 -0
- data/spec/features/expose_self_spec.rb +97 -0
- data/spec/features/expose_yaml_spec.rb +263 -0
- data/spec/features/freeze_state_spec.rb +122 -0
- data/spec/features/get_config_keys_spec.rb +62 -0
- data/spec/features/get_config_values_spec.rb +41 -0
- data/spec/features/has_a_key_spec.rb +48 -0
- data/spec/features/import_settings_spec.rb +323 -0
- data/spec/features/indifferent_access_spec.rb +57 -0
- data/spec/features/inheritance_spec.rb +110 -0
- data/spec/features/instantiation_without_class_definition_spec.rb +59 -0
- data/spec/features/iteration_over_setting_keys_spec.rb +48 -0
- data/spec/features/load_from_env_spec.rb +240 -0
- data/spec/features/load_from_json_spec.rb +97 -0
- data/spec/features/load_from_self/format_option_json_spec.rb +31 -0
- data/spec/features/load_from_self/format_option_unsupported_spec.rb +27 -0
- data/spec/features/load_from_self/format_option_yaml_spec.rb +49 -0
- data/spec/features/load_from_self/with_erb_instructions_spec.rb +33 -0
- data/spec/features/load_from_self/with_hash_like_data_representation_spec.rb +66 -0
- data/spec/features/load_from_self/with_non_hash_like_data_representation_spec.rb +19 -0
- data/spec/features/load_from_self/without_end_data_spec.rb +11 -0
- data/spec/features/load_from_yaml_spec.rb +110 -0
- data/spec/features/load_setting_values_from_file/by_instance_method_examples.rb +171 -0
- data/spec/features/load_setting_values_from_file/by_macros_examples.rb +165 -0
- data/spec/features/load_setting_values_from_file/load_from_json_spec.rb +21 -0
- data/spec/features/load_setting_values_from_file/load_from_self/json_format/end_data_with_env_spec.rb +100 -0
- data/spec/features/load_setting_values_from_file/load_from_self/json_format/with_end_data_spec.rb +129 -0
- data/spec/features/load_setting_values_from_file/load_from_self/json_format/with_incorrect_end_data_spec.rb +34 -0
- data/spec/features/load_setting_values_from_file/load_from_self/json_format/without_end_data_spec.rb +65 -0
- data/spec/features/load_setting_values_from_file/load_from_self/yaml_format/end_data_with_env_spec.rb +94 -0
- data/spec/features/load_setting_values_from_file/load_from_self/yaml_format/with_end_data_spec.rb +126 -0
- data/spec/features/load_setting_values_from_file/load_from_self/yaml_format/with_incorrect_end_data_spec.rb +32 -0
- data/spec/features/load_setting_values_from_file/load_from_self/yaml_format/without_end_data_spec.rb +65 -0
- data/spec/features/load_setting_values_from_file/load_from_yaml_spec.rb +21 -0
- data/spec/features/load_setting_values_from_file/shared_behavior_spec.rb +33 -0
- data/spec/features/mixin_spec.rb +387 -0
- data/spec/features/non_redefineable_core_methods_spec.rb +29 -0
- data/spec/features/plugins/pretty_print_spec.rb +86 -0
- data/spec/features/plugins/toml/expose_self/format_option_toml_spec.rb +71 -0
- data/spec/features/plugins/toml/expose_toml_spec.rb +221 -0
- data/spec/features/plugins/toml/load_from_self/format_option_toml_spec.rb +27 -0
- data/spec/features/plugins/toml/load_from_toml_spec.rb +109 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/load_from_toml_spec.rb +27 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/load_toml_from_self/end_data_with_env_spec.rb +95 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/load_toml_from_self/with_end_data_spec.rb +125 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/load_toml_from_self/with_incorrect_end_data_spec.rb +34 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/load_toml_from_self/without_end_data_spec.rb +65 -0
- data/spec/features/plugins/toml/load_setting_values_from_file/shared_behavior_spec.rb +34 -0
- data/spec/features/plugins/toml/save_to_toml_spec.rb +149 -0
- data/spec/features/plugins/vault/expose_vault_spec.rb +117 -0
- data/spec/features/plugins/vault/load_from_vault_spec.rb +80 -0
- data/spec/features/plugins_spec.rb +89 -0
- data/spec/features/reload_spec.rb +75 -0
- data/spec/features/run_code_with_temporary_settings_spec.rb +104 -0
- data/spec/features/save_to_file/save_to_json_spec.rb +157 -0
- data/spec/features/save_to_file/save_to_yaml_spec.rb +189 -0
- data/spec/features/settings_as_predicates_spec.rb +47 -0
- data/spec/features/settings_redefinition_spec.rb +30 -0
- data/spec/features/slice_functionality_spec.rb +69 -0
- data/spec/features/subset_functionality_spec.rb +49 -0
- data/spec/features/validation_spec.rb +919 -0
- data/spec/fixtures/array_settings.yml +3 -0
- data/spec/fixtures/expose_json/incompatible_root_structure.json +6 -0
- data/spec/fixtures/expose_json/incompatible_structure.json +4 -0
- data/spec/fixtures/expose_json/project.development.json +7 -0
- data/spec/fixtures/expose_json/project.json +30 -0
- data/spec/fixtures/expose_json/project.production.json +7 -0
- data/spec/fixtures/expose_json/project.staging.json +7 -0
- data/spec/fixtures/expose_json/project.test.json +7 -0
- data/spec/fixtures/expose_yaml/incompatible_structure.yml +2 -0
- data/spec/fixtures/expose_yaml/project.development.yml +4 -0
- data/spec/fixtures/expose_yaml/project.production.yml +4 -0
- data/spec/fixtures/expose_yaml/project.staging.yml +4 -0
- data/spec/fixtures/expose_yaml/project.test.yml +4 -0
- data/spec/fixtures/expose_yaml/project.yml +25 -0
- data/spec/fixtures/json_array_sample.json +14 -0
- data/spec/fixtures/json_object_sample.json +9 -0
- data/spec/fixtures/json_with_empty_object.json +6 -0
- data/spec/fixtures/json_with_erb.json +6 -0
- data/spec/fixtures/plugins/toml/expose_toml/project.development.toml +4 -0
- data/spec/fixtures/plugins/toml/expose_toml/project.production.toml +4 -0
- data/spec/fixtures/plugins/toml/expose_toml/project.staging.toml +4 -0
- data/spec/fixtures/plugins/toml/expose_toml/project.test.toml +4 -0
- data/spec/fixtures/plugins/toml/expose_toml/project.toml +27 -0
- data/spec/fixtures/plugins/toml/mini_file.toml +6 -0
- data/spec/fixtures/plugins/toml/toml_sample_with_all_types.toml +72 -0
- data/spec/fixtures/plugins/toml/values_file/with_env.toml +13 -0
- data/spec/fixtures/plugins/toml/values_file/without_env.toml +6 -0
- data/spec/fixtures/rubocop_settings.yml +12 -0
- data/spec/fixtures/shared_settings_with_aliases.yml +10 -0
- data/spec/fixtures/travis_settings.yml +6 -0
- data/spec/fixtures/values_file/with_env.json +19 -0
- data/spec/fixtures/values_file/with_env.yml +17 -0
- data/spec/fixtures/values_file/without_env.json +8 -0
- data/spec/fixtures/values_file/without_env.yml +5 -0
- data/spec/fixtures/with_empty_hash.yml +4 -0
- data/spec/fixtures/with_erb_instructions.yml +3 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/support/meta_scopes.rb +20 -0
- data/spec/support/spec_support.rb +42 -0
- metadata +181 -15
- data/.travis.yml +0 -47
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f1dc9656c82767633db2cd0560ec5e556596db39cb24ebedb7e57e77953fe4f
|
|
4
|
+
data.tar.gz: e2cb31c582204c47346c3161974e7c0ae1c74f08ec25bcce33ab795dd2a920f0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9af958e6b471e7df6b66bea682622a02a1063d76b820aff9f4663b0a81b2a8ca8048aff94e4035d6d9376542da3b28e38cb4578d3f8d3e3f1f4a38c3eae220a2
|
|
7
|
+
data.tar.gz: fb8c4348721326fb48875506e20c48c924a6abd0d6317557849454a804a697801a71583c8b7cccc3b1b2441b3cac482872adbac9d59255357c65fd765aa05ff8
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
env:
|
|
6
|
+
FULL_COVERAGE_CHECK: true
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
full-check:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
# We want to run on external PRs, but not on our own internal PRs as they'll be run on push event
|
|
13
|
+
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != '0exp/qonfig'
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v2
|
|
17
|
+
- uses: ruby/setup-ruby@v1
|
|
18
|
+
with:
|
|
19
|
+
ruby-version: 3
|
|
20
|
+
bundler-cache: true
|
|
21
|
+
- name: Run Linter
|
|
22
|
+
run: bundle exec ci-helper RubocopLint
|
|
23
|
+
- name: Check missed spec suffixes
|
|
24
|
+
run: bundle exec ci-helper CheckSpecSuffixes --extra-paths spec/*.rb --ignored-paths spec/*_helper.rb spec/**/*_examples.rb
|
|
25
|
+
- name: Run specs
|
|
26
|
+
run: bundle exec ci-helper RunSpecs
|
|
27
|
+
- name: Audit
|
|
28
|
+
run: bundle exec ci-helper BundlerAudit
|
|
29
|
+
- name: Coveralls
|
|
30
|
+
uses: coverallsapp/github-action@master
|
|
31
|
+
with:
|
|
32
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
33
|
+
specs:
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
continue-on-error: ${{ matrix.experimental }}
|
|
36
|
+
|
|
37
|
+
env:
|
|
38
|
+
FULL_COVERAGE_CHECK: false
|
|
39
|
+
|
|
40
|
+
# We want to run on external PRs, but not on our own internal PRs as they'll be run on push event
|
|
41
|
+
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != '0exp/qonfig'
|
|
42
|
+
|
|
43
|
+
strategy:
|
|
44
|
+
fail-fast: false
|
|
45
|
+
matrix:
|
|
46
|
+
ruby: ["2.6", "2.7", "3.0", "3.1"]
|
|
47
|
+
experimental: [false]
|
|
48
|
+
include:
|
|
49
|
+
- ruby: head
|
|
50
|
+
experimental: true
|
|
51
|
+
- ruby: jruby
|
|
52
|
+
experimental: true
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
- uses: actions/checkout@v2
|
|
57
|
+
- uses: ruby/setup-ruby@v1
|
|
58
|
+
with:
|
|
59
|
+
ruby-version: ${{ matrix.ruby }}
|
|
60
|
+
bundler-cache: true
|
|
61
|
+
- name: Run specs
|
|
62
|
+
run: bundle exec ci-helper RunSpecs
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -5,13 +5,15 @@ inherit_gem:
|
|
|
5
5
|
- lib/rubocop.rspec.yml
|
|
6
6
|
|
|
7
7
|
AllCops:
|
|
8
|
-
TargetRubyVersion: 2.6.
|
|
8
|
+
TargetRubyVersion: 2.6.0
|
|
9
|
+
NewCops: enable
|
|
9
10
|
Include:
|
|
10
11
|
- lib/**/*.rb
|
|
11
12
|
- spec/**/*.rb
|
|
12
13
|
- Gemfile
|
|
13
14
|
- Rakefile
|
|
14
15
|
- qonfig.gemspec
|
|
16
|
+
- gemfiles/*.gemfile
|
|
15
17
|
- bin/console
|
|
16
18
|
- bin/rspec
|
|
17
19
|
|
|
@@ -26,3 +28,19 @@ Style/RedundantBegin:
|
|
|
26
28
|
# NOTE: too situative
|
|
27
29
|
Metrics/ParameterLists:
|
|
28
30
|
Enabled: false
|
|
31
|
+
|
|
32
|
+
# NOTE: too situative in current code base
|
|
33
|
+
Style/NilComparison:
|
|
34
|
+
Enabled: false
|
|
35
|
+
|
|
36
|
+
# NOTE: too situative in current code base
|
|
37
|
+
Style/NonNilCheck:
|
|
38
|
+
Enabled: false
|
|
39
|
+
|
|
40
|
+
# NOTE: too situative in current code base
|
|
41
|
+
Lint/MissingSuper:
|
|
42
|
+
Enabled: false
|
|
43
|
+
|
|
44
|
+
# NOTE: too situative in current code base
|
|
45
|
+
Lint/EmptyBlock:
|
|
46
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
|
3
3
|
|
|
4
|
+
## [0.27.0] - 2022-01-12
|
|
5
|
+
### Changed
|
|
6
|
+
- Drop Ruby 2.5 support.
|
|
7
|
+
- Fix YAML loading in Psych v4 (#132).
|
|
8
|
+
|
|
9
|
+
## [0.26.0] - 2021-07-01
|
|
10
|
+
### Added
|
|
11
|
+
- Support `ERB` in `load_from_json` method;
|
|
12
|
+
|
|
13
|
+
## [0.25.0] - 2020-09-15
|
|
14
|
+
### Added
|
|
15
|
+
- Support for **Vault** config provider:
|
|
16
|
+
- realized as a plugin (`Qonfig.plugin(:vault)`);
|
|
17
|
+
- provides `#load_from_vault`, `#expose_vault` methods and works in `#*_yaml`-like manner);
|
|
18
|
+
- depends on `gem vault (>= 0.1)`
|
|
19
|
+
- `Qonfig::Settings#[]` behave like `Qonfig::Settings#__dig__`;
|
|
20
|
+
- An ability to represent the config hash in dot-notated style (all config keys are represented in dot-notated format):
|
|
21
|
+
- works via `#to_h(dot_style: true)`;
|
|
22
|
+
- `key_transformer:` and `value_transfomer:` options are supported too;
|
|
23
|
+
|
|
24
|
+
```ruby
|
|
25
|
+
class Config << Qonfig::DataSet
|
|
26
|
+
setting :database do
|
|
27
|
+
setting :host, 'localhost'
|
|
28
|
+
setting :port, 6432
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
setting :api do
|
|
32
|
+
setting :rest_enabled, true
|
|
33
|
+
setting :rpc_enabled, false
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
Config.new.to_h(dot_style: true)
|
|
38
|
+
# =>
|
|
39
|
+
{
|
|
40
|
+
'database.host' => 'localhost',
|
|
41
|
+
'database.port' => 6432,
|
|
42
|
+
'api.rest_enabled' => true,
|
|
43
|
+
'api.rpc_enabled' => false,
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## [0.24.1] - 2020-03-10
|
|
48
|
+
### Changed
|
|
49
|
+
- Enhanced dot-notated key resolving algorithm: now it goes through the all dot-notated key parts
|
|
50
|
+
until it finds the required setting key (or fails with `Qonfig::UnknowSettingKeyError`);
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
- (**Pretty-Print Plugin**):
|
|
54
|
+
- dot-noted setting keys can not be pretty-printed (they raise `Qonfig::UnknownSettingKeyError`);
|
|
55
|
+
- added `set` and `pp` as preloaded dependencies;
|
|
56
|
+
|
|
4
57
|
## [0.24.0] - 2019-12-29
|
|
5
58
|
### Added
|
|
6
59
|
- Support for **Ruby@2.7**;
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
qonfig (0.27.0)
|
|
5
|
+
|
|
6
|
+
GEM
|
|
7
|
+
remote: https://rubygems.org/
|
|
8
|
+
specs:
|
|
9
|
+
activesupport (6.1.4.4)
|
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
11
|
+
i18n (>= 1.6, < 2)
|
|
12
|
+
minitest (>= 5.1)
|
|
13
|
+
tzinfo (~> 2.0)
|
|
14
|
+
zeitwerk (~> 2.3)
|
|
15
|
+
armitage-rubocop (1.23.0.1)
|
|
16
|
+
rubocop (= 1.23.0)
|
|
17
|
+
rubocop-performance (= 1.12.0)
|
|
18
|
+
rubocop-rails (= 2.12.4)
|
|
19
|
+
rubocop-rake (= 0.6.0)
|
|
20
|
+
rubocop-rspec (= 2.6.0)
|
|
21
|
+
ast (2.4.2)
|
|
22
|
+
bundler-audit (0.9.0.1)
|
|
23
|
+
bundler (>= 1.2.0, < 3)
|
|
24
|
+
thor (~> 1.0)
|
|
25
|
+
ci-helper (0.4.2)
|
|
26
|
+
colorize (~> 0.8)
|
|
27
|
+
dry-inflector (~> 0.2)
|
|
28
|
+
umbrellio-sequel-plugins (~> 0.4)
|
|
29
|
+
coderay (1.1.3)
|
|
30
|
+
colorize (0.8.1)
|
|
31
|
+
concurrent-ruby (1.1.9)
|
|
32
|
+
diff-lcs (1.5.0)
|
|
33
|
+
docile (1.4.0)
|
|
34
|
+
dry-inflector (0.2.1)
|
|
35
|
+
ffi (1.15.5-java)
|
|
36
|
+
i18n (1.8.11)
|
|
37
|
+
concurrent-ruby (~> 1.0)
|
|
38
|
+
method_source (1.0.0)
|
|
39
|
+
minitest (5.15.0)
|
|
40
|
+
parallel (1.21.0)
|
|
41
|
+
parser (3.1.0.0)
|
|
42
|
+
ast (~> 2.4.1)
|
|
43
|
+
pry (0.14.1)
|
|
44
|
+
coderay (~> 1.1)
|
|
45
|
+
method_source (~> 1.0)
|
|
46
|
+
pry (0.14.1-java)
|
|
47
|
+
coderay (~> 1.1)
|
|
48
|
+
method_source (~> 1.0)
|
|
49
|
+
spoon (~> 0.0)
|
|
50
|
+
rack (2.2.3)
|
|
51
|
+
rainbow (3.1.1)
|
|
52
|
+
rake (13.0.6)
|
|
53
|
+
regexp_parser (2.2.0)
|
|
54
|
+
rexml (3.2.5)
|
|
55
|
+
rspec (3.10.0)
|
|
56
|
+
rspec-core (~> 3.10.0)
|
|
57
|
+
rspec-expectations (~> 3.10.0)
|
|
58
|
+
rspec-mocks (~> 3.10.0)
|
|
59
|
+
rspec-core (3.10.1)
|
|
60
|
+
rspec-support (~> 3.10.0)
|
|
61
|
+
rspec-expectations (3.10.1)
|
|
62
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
63
|
+
rspec-support (~> 3.10.0)
|
|
64
|
+
rspec-mocks (3.10.2)
|
|
65
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
66
|
+
rspec-support (~> 3.10.0)
|
|
67
|
+
rspec-support (3.10.3)
|
|
68
|
+
rubocop (1.23.0)
|
|
69
|
+
parallel (~> 1.10)
|
|
70
|
+
parser (>= 3.0.0.0)
|
|
71
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
72
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
73
|
+
rexml
|
|
74
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
|
75
|
+
ruby-progressbar (~> 1.7)
|
|
76
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
77
|
+
rubocop-ast (1.15.1)
|
|
78
|
+
parser (>= 3.0.1.1)
|
|
79
|
+
rubocop-performance (1.12.0)
|
|
80
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
81
|
+
rubocop-ast (>= 0.4.0)
|
|
82
|
+
rubocop-rails (2.12.4)
|
|
83
|
+
activesupport (>= 4.2.0)
|
|
84
|
+
rack (>= 1.1)
|
|
85
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
86
|
+
rubocop-rake (0.6.0)
|
|
87
|
+
rubocop (~> 1.0)
|
|
88
|
+
rubocop-rspec (2.6.0)
|
|
89
|
+
rubocop (~> 1.19)
|
|
90
|
+
ruby-progressbar (1.11.0)
|
|
91
|
+
sequel (5.52.0)
|
|
92
|
+
simplecov (0.21.2)
|
|
93
|
+
docile (~> 1.1)
|
|
94
|
+
simplecov-html (~> 0.11)
|
|
95
|
+
simplecov_json_formatter (~> 0.1)
|
|
96
|
+
simplecov-html (0.12.3)
|
|
97
|
+
simplecov-lcov (0.8.0)
|
|
98
|
+
simplecov_json_formatter (0.1.3)
|
|
99
|
+
spoon (0.0.6)
|
|
100
|
+
ffi
|
|
101
|
+
symbiont-ruby (0.7.0)
|
|
102
|
+
thor (1.2.1)
|
|
103
|
+
tzinfo (2.0.4)
|
|
104
|
+
concurrent-ruby (~> 1.0)
|
|
105
|
+
umbrellio-sequel-plugins (0.5.1.27)
|
|
106
|
+
sequel
|
|
107
|
+
symbiont-ruby
|
|
108
|
+
unicode-display_width (2.1.0)
|
|
109
|
+
zeitwerk (2.5.3)
|
|
110
|
+
|
|
111
|
+
PLATFORMS
|
|
112
|
+
ruby
|
|
113
|
+
universal-java-1.8
|
|
114
|
+
|
|
115
|
+
DEPENDENCIES
|
|
116
|
+
activesupport (~> 6.0)
|
|
117
|
+
armitage-rubocop (~> 1.7)
|
|
118
|
+
bundler
|
|
119
|
+
bundler-audit
|
|
120
|
+
ci-helper
|
|
121
|
+
pry
|
|
122
|
+
qonfig!
|
|
123
|
+
rake (>= 13)
|
|
124
|
+
rspec (~> 3.10)
|
|
125
|
+
simplecov (~> 0.20)
|
|
126
|
+
simplecov-lcov
|
|
127
|
+
|
|
128
|
+
BUNDLED WITH
|
|
129
|
+
2.3.3
|
data/LICENSE.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License (MIT)
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2018-
|
|
3
|
+
Copyright (c) 2018-2020 Rustam Ibragimov
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
|
@@ -40,6 +40,9 @@ require 'qonfig'
|
|
|
40
40
|
- [Inheritance](#inheritance)
|
|
41
41
|
- [Composition](#composition)
|
|
42
42
|
- [Hash representation](#hash-representation)
|
|
43
|
+
- [Default behaviour (without options)](#default-behavior-without-options)
|
|
44
|
+
- [With transformations](#with-transformations)
|
|
45
|
+
- [Dot-style format](#dot-style-format)
|
|
43
46
|
- [Smart Mixin](#smart-mixin) (`Qonfig::Configurable`)
|
|
44
47
|
- [Instantiation without class definition](#instantiation-without-class-definition) (`Qonfig::DataSet.build(&definitions)`)
|
|
45
48
|
- [Compacted config](#compacted-config)
|
|
@@ -102,6 +105,7 @@ require 'qonfig'
|
|
|
102
105
|
- [Plugins](#plugins)
|
|
103
106
|
- [toml](#plugins-toml) (support for `TOML` format)
|
|
104
107
|
- [pretty_print](#plugins-pretty_print) (beautified/prettified console output)
|
|
108
|
+
- [vault](#plugins-vault) (support for `Vault` store)
|
|
105
109
|
- [Roadmap](#roadmap)
|
|
106
110
|
- [Build](#build)
|
|
107
111
|
---
|
|
@@ -188,6 +192,10 @@ config.settings['vendor_api']['domain'] # => 'app.service.com'
|
|
|
188
192
|
config.settings['vendor_api']['login'] # => 'test_user'
|
|
189
193
|
config.settings['enable_graphql'] # => false
|
|
190
194
|
|
|
195
|
+
# dig to value
|
|
196
|
+
config.settings[:vendor_api, :domain] # => 'app.service.com'
|
|
197
|
+
config.settings[:vendor_api, 'login'] # => 'test_user'
|
|
198
|
+
|
|
191
199
|
# get option value directly via index (with indifferent access)
|
|
192
200
|
config['project_id'] # => nil
|
|
193
201
|
config['enable_graphql'] # => false
|
|
@@ -271,7 +279,7 @@ config.slice_value('vendor_api.port') # => Qonfig::UnknownSettingError # (key do
|
|
|
271
279
|
# - get a subset (a set of sets) of config settings represented as a hash;
|
|
272
280
|
# - each key (or key set) represents a requirement of a certain setting key;
|
|
273
281
|
|
|
274
|
-
config.
|
|
282
|
+
config.subset(:vendor_api, :enable_graphql)
|
|
275
283
|
# => { 'vendor_api' => { 'login' => ..., 'domain' => ... }, 'enable_graphql' => false }
|
|
276
284
|
|
|
277
285
|
config.subset(:project_id, [:vendor_api, :domain], [:credentials, :user, :login])
|
|
@@ -436,6 +444,12 @@ project_config.settings.db.password # => 'testpaswd'
|
|
|
436
444
|
|
|
437
445
|
### Hash representation
|
|
438
446
|
|
|
447
|
+
- works via `#to_h` and `#to_hash`;
|
|
448
|
+
- supported options:
|
|
449
|
+
- `key_transformer:` - an optional proc that accepts setting key and makes your custom transformations;
|
|
450
|
+
- `value_transformer:` - an optional proc that accepts setting value and makes your custom transformations;
|
|
451
|
+
- `dot_style:` - (`false` by default) represent setting keys in dot-notation (transformations are supported too);
|
|
452
|
+
|
|
439
453
|
```ruby
|
|
440
454
|
class Config < Qonfig::DataSet
|
|
441
455
|
setting :serializers do
|
|
@@ -454,9 +468,13 @@ class Config < Qonfig::DataSet
|
|
|
454
468
|
|
|
455
469
|
setting :logger, Logger.new(STDOUT)
|
|
456
470
|
end
|
|
471
|
+
```
|
|
457
472
|
|
|
458
|
-
|
|
473
|
+
#### Default behavior (without-options)
|
|
459
474
|
|
|
475
|
+
```ruby
|
|
476
|
+
Config.new.to_h
|
|
477
|
+
# =>
|
|
460
478
|
{
|
|
461
479
|
"serializers": {
|
|
462
480
|
"json" => { "engine" => :ok },
|
|
@@ -467,6 +485,55 @@ Config.new.to_h
|
|
|
467
485
|
}
|
|
468
486
|
```
|
|
469
487
|
|
|
488
|
+
#### With transformations
|
|
489
|
+
|
|
490
|
+
- with `key_transformer` and/or `value_transformer`;
|
|
491
|
+
|
|
492
|
+
```ruby
|
|
493
|
+
key_transformer = -> (key) { "#{key}!!" }
|
|
494
|
+
value_transformer = -> (value) { "#{value}??" }
|
|
495
|
+
|
|
496
|
+
Config.new.to_h(key_transformer: key_transformer, value_transformer: value_transformer)
|
|
497
|
+
# =>
|
|
498
|
+
{
|
|
499
|
+
"serializers!!": {
|
|
500
|
+
"json!!" => { "engine!!" => "ok??" },
|
|
501
|
+
"hash!!" => { "engine!!" => "native??" },
|
|
502
|
+
},
|
|
503
|
+
"adapter!!" => { "default!!" => "memory_sync??" },
|
|
504
|
+
"logger!!" => "#<Logger:0x00007fcde799f158>??"
|
|
505
|
+
}
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
#### Dot-style format
|
|
509
|
+
|
|
510
|
+
- transformations are supported too (`key_transformer` and `value_transformer`);
|
|
511
|
+
|
|
512
|
+
```ruby
|
|
513
|
+
Config.new.to_h(dot_style: true)
|
|
514
|
+
# =>
|
|
515
|
+
{
|
|
516
|
+
"serializers.json.engine" => :ok,
|
|
517
|
+
"serializers.hash.engine" => :native,
|
|
518
|
+
"adapter.default" => :memory_sync,
|
|
519
|
+
"logger" => #<Logger:0x4b0d79fc>,
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
```ruby
|
|
524
|
+
transformer = -> (value) { "$$#{value}$$" }
|
|
525
|
+
|
|
526
|
+
Config.new.to_h(dot_style: true, key_transformer: transformer, value_transformer: transformer)
|
|
527
|
+
|
|
528
|
+
# => "#<Logger:0x00007fcde799f158>??"
|
|
529
|
+
{
|
|
530
|
+
"$$serializers.json.engine$$" => "$$ok$$",
|
|
531
|
+
"$$serializers.hash.engine$$" => "$$native$$",
|
|
532
|
+
"$$adapter.default$$" => "$$memory_sync$$",
|
|
533
|
+
"$$logger$$" => "$$#<Logger:0x00007fcde799f158>$$",
|
|
534
|
+
}
|
|
535
|
+
```
|
|
536
|
+
|
|
470
537
|
---
|
|
471
538
|
|
|
472
539
|
### Smart Mixin
|
|
@@ -1001,6 +1068,8 @@ config.root_keys
|
|
|
1001
1068
|
- method signature: `#reload!(configurations = {}, &configuration)`;
|
|
1002
1069
|
|
|
1003
1070
|
```ruby
|
|
1071
|
+
# -- config example ---
|
|
1072
|
+
|
|
1004
1073
|
class Config < Qonfig::DataSet
|
|
1005
1074
|
setting :db do
|
|
1006
1075
|
setting :adapter, 'postgresql'
|
|
@@ -1013,6 +1082,10 @@ config = Config.new
|
|
|
1013
1082
|
|
|
1014
1083
|
config.settings.db.adapter # => 'postgresql'
|
|
1015
1084
|
config.settings.logger # => #<Logger:0x00007ff9>
|
|
1085
|
+
```
|
|
1086
|
+
|
|
1087
|
+
```ruby
|
|
1088
|
+
# --- redefine some settings (or add a new one) --
|
|
1016
1089
|
|
|
1017
1090
|
config.configure { |conf| conf.logger = nil } # redefine some settings (will be reloaded)
|
|
1018
1091
|
|
|
@@ -1024,6 +1097,10 @@ class Config
|
|
|
1024
1097
|
|
|
1025
1098
|
setting :enable_api, false # append new setting
|
|
1026
1099
|
end
|
|
1100
|
+
```
|
|
1101
|
+
|
|
1102
|
+
```ruby
|
|
1103
|
+
# --- reload ---
|
|
1027
1104
|
|
|
1028
1105
|
# reload settings
|
|
1029
1106
|
config.reload!
|
|
@@ -2163,6 +2240,7 @@ config.settings.web.password # => staging_password (from sidekiq.staging.yml)
|
|
|
2163
2240
|
|
|
2164
2241
|
### Load from JSON file
|
|
2165
2242
|
|
|
2243
|
+
- supports `ERB`;
|
|
2166
2244
|
- `:strict` mode (fail behaviour when the required yaml file doesnt exist):
|
|
2167
2245
|
- `true` (by default) - causes `Qonfig::FileNotFoundError`;
|
|
2168
2246
|
- `false` - do nothing, ignore current command;
|
|
@@ -3081,6 +3159,7 @@ dynamic: 10
|
|
|
3081
3159
|
|
|
3082
3160
|
- [toml](#plugins-toml) (provides `load_from_toml`, `save_to_toml`, `expose_toml`);
|
|
3083
3161
|
- [pretty_print](#plugins-pretty_print) (beautified/prettified console output);
|
|
3162
|
+
- [vault](#plugins-vault) (provides `load_from_vault`, `expose_vault`)
|
|
3084
3163
|
|
|
3085
3164
|
---
|
|
3086
3165
|
|
|
@@ -3204,15 +3283,46 @@ config = Config.new
|
|
|
3204
3283
|
|
|
3205
3284
|
---
|
|
3206
3285
|
|
|
3286
|
+
### Plugins: vault
|
|
3287
|
+
|
|
3288
|
+
- `Qonfig.plugin(:vault)`
|
|
3289
|
+
- adds support for `vault kv store`, [more info](https://www.vaultproject.io/docs/secrets/kv/kv-v2)
|
|
3290
|
+
- depends on `vault` gem ([link](https://github.com/hashicorp/vault-ruby)) (tested on `>= 0.1`);
|
|
3291
|
+
- provides `.load_from_vault` (works in `.load_from_yaml` manner ([doc](#load-from-yaml-file)));
|
|
3292
|
+
- provides `.expose_vault` (works in `.expose_yaml` manner ([doc](#expose-yaml)));
|
|
3293
|
+
|
|
3294
|
+
```ruby
|
|
3295
|
+
# 1) require external dependency
|
|
3296
|
+
require 'vault'
|
|
3297
|
+
|
|
3298
|
+
# 2) Setup vault client
|
|
3299
|
+
|
|
3300
|
+
Vault.address = 'http://localhost:8200'
|
|
3301
|
+
Vault.token = 'super-duper-token-here'
|
|
3302
|
+
|
|
3303
|
+
# 3) enable plugin
|
|
3304
|
+
Qonfig.plugin(:vault)
|
|
3305
|
+
|
|
3306
|
+
# 3) use vault :)
|
|
3307
|
+
```
|
|
3308
|
+
|
|
3309
|
+
---
|
|
3310
|
+
|
|
3207
3311
|
## Roadmap
|
|
3208
3312
|
|
|
3209
3313
|
- **Major**:
|
|
3210
|
-
- distributed configuration server;
|
|
3211
|
-
- cli toolchain;
|
|
3212
3314
|
- support for Rails-like secrets;
|
|
3213
3315
|
- support for persistent data storages (we want to store configs in multiple databases and files);
|
|
3214
|
-
-
|
|
3316
|
+
- rails plugin;
|
|
3317
|
+
- support for pattern matching;
|
|
3318
|
+
- support for type checking (via `rbs`, `typeprof`, `steep`);
|
|
3319
|
+
- console utilities;
|
|
3215
3320
|
- **Minor**:
|
|
3321
|
+
- An ability to flag `Qonfig::Configurable`'s config object as `compacted` (`Qonfig::Compacted`);
|
|
3322
|
+
- Instance-based behavior for `Vault` plugin, also use instance of `Vault` client instead of `Singleton`;
|
|
3323
|
+
- External validation class with an importing api for better custom validations;
|
|
3324
|
+
- Setting value changement trace (in `anyway_config` manner);
|
|
3325
|
+
- Instantiation and reloading callbacks;
|
|
3216
3326
|
|
|
3217
3327
|
## Build
|
|
3218
3328
|
|
data/Rakefile
CHANGED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ..
|
|
3
|
+
specs:
|
|
4
|
+
qonfig (0.25.0)
|
|
5
|
+
|
|
6
|
+
GEM
|
|
7
|
+
remote: https://rubygems.org/
|
|
8
|
+
specs:
|
|
9
|
+
activesupport (6.1.0)
|
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
11
|
+
i18n (>= 1.6, < 2)
|
|
12
|
+
minitest (>= 5.1)
|
|
13
|
+
tzinfo (~> 2.0)
|
|
14
|
+
zeitwerk (~> 2.3)
|
|
15
|
+
armitage-rubocop (1.7.0.1)
|
|
16
|
+
rubocop (= 1.7.0)
|
|
17
|
+
rubocop-performance (= 1.9.1)
|
|
18
|
+
rubocop-rails (= 2.9.1)
|
|
19
|
+
rubocop-rake (= 0.5.1)
|
|
20
|
+
rubocop-rspec (= 2.1.0)
|
|
21
|
+
ast (2.4.1)
|
|
22
|
+
aws-eventstream (1.1.0)
|
|
23
|
+
aws-sigv4 (1.2.2)
|
|
24
|
+
aws-eventstream (~> 1, >= 1.0.2)
|
|
25
|
+
citrus (3.0.2)
|
|
26
|
+
coderay (1.1.3)
|
|
27
|
+
concurrent-ruby (1.1.7)
|
|
28
|
+
diff-lcs (1.4.4)
|
|
29
|
+
docile (1.3.5)
|
|
30
|
+
ffi (1.14.2-java)
|
|
31
|
+
i18n (1.8.5)
|
|
32
|
+
concurrent-ruby (~> 1.0)
|
|
33
|
+
method_source (1.0.0)
|
|
34
|
+
minitest (5.14.2)
|
|
35
|
+
parallel (1.20.1)
|
|
36
|
+
parser (3.0.0.0)
|
|
37
|
+
ast (~> 2.4.1)
|
|
38
|
+
pry (0.13.1)
|
|
39
|
+
coderay (~> 1.1)
|
|
40
|
+
method_source (~> 1.0)
|
|
41
|
+
pry (0.13.1-java)
|
|
42
|
+
coderay (~> 1.1)
|
|
43
|
+
method_source (~> 1.0)
|
|
44
|
+
spoon (~> 0.0)
|
|
45
|
+
rack (2.2.3)
|
|
46
|
+
rainbow (3.0.0)
|
|
47
|
+
rake (13.0.3)
|
|
48
|
+
regexp_parser (2.0.2)
|
|
49
|
+
rexml (3.2.4)
|
|
50
|
+
rspec (3.10.0)
|
|
51
|
+
rspec-core (~> 3.10.0)
|
|
52
|
+
rspec-expectations (~> 3.10.0)
|
|
53
|
+
rspec-mocks (~> 3.10.0)
|
|
54
|
+
rspec-core (3.10.0)
|
|
55
|
+
rspec-support (~> 3.10.0)
|
|
56
|
+
rspec-expectations (3.10.0)
|
|
57
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
58
|
+
rspec-support (~> 3.10.0)
|
|
59
|
+
rspec-mocks (3.10.0)
|
|
60
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
|
61
|
+
rspec-support (~> 3.10.0)
|
|
62
|
+
rspec-support (3.10.0)
|
|
63
|
+
rubocop (1.7.0)
|
|
64
|
+
parallel (~> 1.10)
|
|
65
|
+
parser (>= 2.7.1.5)
|
|
66
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
67
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
68
|
+
rexml
|
|
69
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
|
70
|
+
ruby-progressbar (~> 1.7)
|
|
71
|
+
unicode-display_width (>= 1.4.0, < 2.0)
|
|
72
|
+
rubocop-ast (1.3.0)
|
|
73
|
+
parser (>= 2.7.1.5)
|
|
74
|
+
rubocop-performance (1.9.1)
|
|
75
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
76
|
+
rubocop-ast (>= 0.4.0)
|
|
77
|
+
rubocop-rails (2.9.1)
|
|
78
|
+
activesupport (>= 4.2.0)
|
|
79
|
+
rack (>= 1.1)
|
|
80
|
+
rubocop (>= 0.90.0, < 2.0)
|
|
81
|
+
rubocop-rake (0.5.1)
|
|
82
|
+
rubocop
|
|
83
|
+
rubocop-rspec (2.1.0)
|
|
84
|
+
rubocop (~> 1.0)
|
|
85
|
+
rubocop-ast (>= 1.1.0)
|
|
86
|
+
ruby-progressbar (1.10.1)
|
|
87
|
+
simplecov (0.21.2)
|
|
88
|
+
docile (~> 1.1)
|
|
89
|
+
simplecov-html (~> 0.11)
|
|
90
|
+
simplecov_json_formatter (~> 0.1)
|
|
91
|
+
simplecov-html (0.12.3)
|
|
92
|
+
simplecov-lcov (0.8.0)
|
|
93
|
+
simplecov_json_formatter (0.1.2)
|
|
94
|
+
spoon (0.0.6)
|
|
95
|
+
ffi
|
|
96
|
+
toml-rb (2.0.1)
|
|
97
|
+
citrus (~> 3.0, > 3.0)
|
|
98
|
+
tzinfo (2.0.4)
|
|
99
|
+
concurrent-ruby (~> 1.0)
|
|
100
|
+
unicode-display_width (1.7.0)
|
|
101
|
+
vault (0.15.0)
|
|
102
|
+
aws-sigv4
|
|
103
|
+
zeitwerk (2.4.2)
|
|
104
|
+
|
|
105
|
+
PLATFORMS
|
|
106
|
+
universal-java-1.8
|
|
107
|
+
x86_64-darwin-19
|
|
108
|
+
x86_64-linux
|
|
109
|
+
|
|
110
|
+
DEPENDENCIES
|
|
111
|
+
armitage-rubocop (~> 1.7)
|
|
112
|
+
bundler
|
|
113
|
+
pry
|
|
114
|
+
qonfig!
|
|
115
|
+
rake (>= 13)
|
|
116
|
+
rspec (~> 3.10)
|
|
117
|
+
simplecov (~> 0.20)
|
|
118
|
+
simplecov-lcov
|
|
119
|
+
toml-rb (>= 2)
|
|
120
|
+
vault (>= 0.1)
|
|
121
|
+
|
|
122
|
+
BUNDLED WITH
|
|
123
|
+
2.2.3
|