qonfig 0.21.0 → 0.25.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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/.travis.yml +23 -20
  4. data/CHANGELOG.md +58 -2
  5. data/LICENSE.txt +1 -1
  6. data/README.md +124 -10
  7. data/Rakefile +0 -1
  8. data/bin/rspec +1 -0
  9. data/gemfiles/with_external_deps.gemfile +2 -0
  10. data/lib/qonfig.rb +4 -0
  11. data/lib/qonfig/commands/definition/expose_json.rb +2 -2
  12. data/lib/qonfig/commands/definition/expose_yaml.rb +2 -2
  13. data/lib/qonfig/commands/definition/load_from_json.rb +2 -2
  14. data/lib/qonfig/commands/definition/load_from_yaml.rb +2 -2
  15. data/lib/qonfig/commands/instantiation/values_file.rb +13 -4
  16. data/lib/qonfig/data_set.rb +13 -9
  17. data/lib/qonfig/dsl.rb +7 -7
  18. data/lib/qonfig/plugins.rb +1 -0
  19. data/lib/qonfig/plugins/pretty_print.rb +8 -1
  20. data/lib/qonfig/plugins/pretty_print/requirements.rb +3 -0
  21. data/lib/qonfig/plugins/pretty_print/ruby_2_7_basic_object_pp_patch.rb +44 -0
  22. data/lib/qonfig/plugins/toml/commands/definition/expose_toml.rb +4 -4
  23. data/lib/qonfig/plugins/toml/commands/definition/load_from_toml.rb +1 -1
  24. data/lib/qonfig/plugins/toml/data_set.rb +2 -2
  25. data/lib/qonfig/plugins/toml/dsl.rb +2 -2
  26. data/lib/qonfig/plugins/vault.rb +24 -0
  27. data/lib/qonfig/plugins/vault/commands/definition/expose_vault.rb +142 -0
  28. data/lib/qonfig/plugins/vault/commands/definition/load_from_vault.rb +53 -0
  29. data/lib/qonfig/plugins/vault/dsl.rb +35 -0
  30. data/lib/qonfig/plugins/vault/errors.rb +9 -0
  31. data/lib/qonfig/plugins/vault/loaders/vault.rb +73 -0
  32. data/lib/qonfig/settings.rb +78 -21
  33. data/lib/qonfig/settings/key_matcher.rb +2 -0
  34. data/lib/qonfig/uploaders/file.rb +2 -2
  35. data/lib/qonfig/uploaders/yaml.rb +1 -1
  36. data/lib/qonfig/version.rb +1 -1
  37. data/qonfig.gemspec +5 -6
  38. metadata +20 -26
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8bb3c845cef4655af444f78682841a1d882176463aca7d05e6d156f64e70f38
4
- data.tar.gz: 58e18c72976148f86eb6c9f845d976b69311ce3edbd5fe219a141accc9cec6a1
3
+ metadata.gz: 9b875f81a892a041c391457b18989daa2626ce3b04afb3e0290314a0fafeb8ad
4
+ data.tar.gz: f7eb3ff0d6801364070e22a8560fdfcc10e08bec59d8e876834b800682832394
5
5
  SHA512:
6
- metadata.gz: c201ccb87e62e2424f38784aefaae67410c1725c6c2a33f00126412f9d495c081c6b8faf4fbf52b17e9f2ae674b87b8454002eedafdf4f5209e328afe4892821
7
- data.tar.gz: d7a6bb166580c9f8d8df2aba63cefbbc3251b2e84daf6ca9863442b585267459ba9b528327e484a86a26a4f5e031adaa911d3acfca36b3cf6d434e2aa50bd14d
6
+ metadata.gz: d0ea42e1bcaed282dee699f798eb8b21e188afb2f37720b9645c97dc9a791596604f65de2d81b34e83102a8f94a5a5fbb7892bd20184c0141884e3e4ac86a024
7
+ data.tar.gz: 6657ab2f25a10c86bda9c87cb32ccaa494fd831f1d237bd30f561f7c8e14da50e173de18ec2cca3a400d16769f8001397160b4ef33a9154da599d69317385ef9
@@ -5,7 +5,7 @@ inherit_gem:
5
5
  - lib/rubocop.rspec.yml
6
6
 
7
7
  AllCops:
8
- TargetRubyVersion: 2.6.5
8
+ TargetRubyVersion: 2.7.1
9
9
  Include:
10
10
  - lib/**/*.rb
11
11
  - spec/**/*.rb
@@ -1,30 +1,40 @@
1
1
  language: ruby
2
- matrix:
2
+ os: linux
3
+ dist: xenial
4
+ cache: bundler
5
+ before_install: gem install bundler
6
+ script: bundle exec rspec
7
+ jobs:
3
8
  fast_finish: true
4
9
  include:
5
- - rvm: 2.4.9
10
+ - rvm: 2.4.10
11
+ gemfile: gemfiles/with_external_deps.gemfile
12
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
13
+ - rvm: 2.5.8
6
14
  gemfile: gemfiles/with_external_deps.gemfile
7
- env: TEST_PLUGINS=true
8
- - rvm: 2.5.7
15
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
16
+ - rvm: 2.6.6
9
17
  gemfile: gemfiles/with_external_deps.gemfile
10
- env: TEST_PLUGINS=true
11
- - rvm: 2.6.5
18
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
19
+ - rvm: 2.7.1
12
20
  gemfile: gemfiles/with_external_deps.gemfile
13
- env: TEST_PLUGINS=true
21
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
14
22
  - rvm: ruby-head
15
23
  gemfile: gemfiles/with_external_deps.gemfile
16
- env: TEST_PLUGINS=true
24
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
17
25
  - rvm: jruby-head
18
26
  gemfile: gemfiles/with_external_deps.gemfile
19
- env: TEST_PLUGINS=true
27
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
20
28
  - rvm: truffleruby
21
29
  gemfile: gemfiles/with_external_deps.gemfile
22
- env: TEST_PLUGINS=true
23
- - rvm: 2.4.9
30
+ env: TEST_PLUGINS=true FULL_TEST_COVERAGE_CHECK=true
31
+ - rvm: 2.4.10
24
32
  gemfile: gemfiles/without_external_deps.gemfile
25
- - rvm: 2.5.7
33
+ - rvm: 2.5.8
26
34
  gemfile: gemfiles/without_external_deps.gemfile
27
- - rvm: 2.6.5
35
+ - rvm: 2.6.6
36
+ gemfile: gemfiles/without_external_deps.gemfile
37
+ - rvm: 2.7.1
28
38
  gemfile: gemfiles/without_external_deps.gemfile
29
39
  - rvm: ruby-head
30
40
  gemfile: gemfiles/without_external_deps.gemfile
@@ -36,10 +46,3 @@ matrix:
36
46
  - rvm: ruby-head
37
47
  - rvm: jruby-head
38
48
  - rvm: truffleruby
39
- sudo: false
40
- cache: bundler
41
- before_install: gem install bundler
42
- script: bundle exec rspec
43
- notifications:
44
- slack:
45
- secure: I03SDv+IrKy3IkeGjjHUJ9VneFMiYpLzIgPOixGFO5zGVXgulwmun82KsrPSW5HkK1UEQCahfoXt1hNECPwxcdsY01q6LBYJQx1jD0q17bXHllN/q0C6lx3peRN0KqNAAOU3/mHZxLt3HFV+N3HsSnoxDMuSYJgKbjCL/QVG2L2UYT9vi+JRNM/thj8R6MWKWlOHemik40GbLr2anCOCqiALzxnJzh5nJyGj+9SGvjhHfQq/fAIrg1+Scu+UchG8d+1yS5JWsGTt1/JF08i+Ux4ceTQ7GNBNeA5cj/xuUzvRx6A85renxyTiZMKIL0+jeceUm8c+/46XFcq0F7/kJB36lwjFhX1JRphcu/VouRdEwW/BvH74wnyHtygqOpk0LH4shp7A1DIS1DlnBbeJxrR5hdMDnmV85kTU6w6H0BbncsYY/pH1fji1kgH6jCsdwqDlq4wLB8x8I+eZABBsfb/r55z/HnBmmxlvR7Rt3X5/yR3gJrsgRrDBBZ5LwYy1RSCDu76vMQqWGJKG03FdfqSNqmC5V4MC5Ez8yjGDW0Yle09mwvsL2c6fDXyDPCeB/gwNk+FvgLRXnv7C4BaBNEoG4JnCL/dwauoJNg0lB6uF34BEmYAhZIrdY1CI6BqPWnaVMJfcJSYekBVXDIELDnTFRWjaGU1y8dM6lNzDmYE=
@@ -1,13 +1,69 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
- ## [Unreleased]
4
+ ## [0.25.0] - 2020-09-15
5
+ ### Added
6
+ - Support for **Vault** config provider:
7
+ - realized as a plugin (`Qonfig.plugin(:vault)`);
8
+ - provides `#load_from_vault`, `#expose_vault` methods and works in `#*_yaml`-like manner);
9
+ - depends on `gem vault (>= 0.1)`
10
+ - `Qonfig::Settings#[]` behave like `Qonfig::Settings#__dig__`;
11
+ - An ability to represent the config hash in dot-notated style (all config keys are represented in dot-notated format):
12
+ - works via `#to_h(dot_style: true)`;
13
+ - `key_transformer:` and `value_transfomer:` options are supported too;
14
+
15
+ ```ruby
16
+ class Config << Qonfig::DataSet
17
+ setting :database do
18
+ setting :host, 'localhost'
19
+ setting :port, 6432
20
+ end
21
+
22
+ setting :api do
23
+ setting :rest_enabled, true
24
+ setting :rpc_enabled, false
25
+ end
26
+ end
27
+
28
+ Config.new.to_h(dot_style: true)
29
+ # =>
30
+ {
31
+ 'database.host' => 'localhost',
32
+ 'database.port' => 6432,
33
+ 'api.rest_enabled' => true,
34
+ 'api.rpc_enabled' => false,
35
+ }
36
+ ```
37
+
38
+ ## [0.24.1] - 2020-03-10
39
+ ### Changed
40
+ - Enhanced dot-notated key resolving algorithm: now it goes through the all dot-notated key parts
41
+ until it finds the required setting key (or fails with `Qonfig::UnknowSettingKeyError`);
42
+
43
+ ### Fixed
44
+ - (**Pretty-Print Plugin**):
45
+ - dot-noted setting keys can not be pretty-printed (they raise `Qonfig::UnknownSettingKeyError`);
46
+ - added `set` and `pp` as preloaded dependencies;
47
+
48
+ ## [0.24.0] - 2019-12-29
49
+ ### Added
50
+ - Support for **Ruby@2.7**;
51
+
52
+ ## [0.23.0] - 2019-12-12
53
+ ### Added
54
+ - Support for `Pathname` file path in `.load_from_json`, `.load_from_yaml`, `.load_from_toml`, `.expose_yaml`, `.expose_json`, `.expose_toml`;
55
+
56
+ ## [0.22.0] - 2019-12-12
57
+ ### Added
58
+ - Support for `Pathname` file path in `.values_file`, `#load_from_file`, `#load_from_yaml`, `#load_from_json` and `#load_from_toml`;
59
+
60
+ ## [0.21.0] - 2019-12-12
5
61
  ### Added
6
62
  - Brand new type of config objects `Qonfig::Compacted`:
7
63
  - represents the compacted config object with setting readers and setting writers only;
8
64
  - setting keys are represented as direct instace methods (`#settings` invokation does not need);
9
65
  - no any other useful instance-based functionality;
10
- - full support of `Qonfig::DataSet` DSL commands (`setting`, `validate`, `add_validator`, `load_from_x`/`expose_x` and etc);
66
+ - full support of `Qonfig::DataSet` DSL commands (`.setting`, `.validate`, `.add_validator`, `.load_from_x`/`.expose_x` and etc);
11
67
  - can be instantiated by:
12
68
  - by existing config object: `Qonfig::DataSet#compacted` or `Qonfig::Compacted.build_from(config, &configuration)`
13
69
  - by direct instantiation: `Qonfig::Compacted.new(settings_values = {}, &configuration)`;
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018-2019 Rustam Ibragimov
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)
@@ -90,7 +93,7 @@ require 'qonfig'
90
93
  - [Load from \_\_END\_\_](#load-from-__end__) (aka `.load_from_self`)
91
94
  - [Expose \_\_END\_\_](#expose-__end__) (aka `.expose_self`)
92
95
  - **Setting values**
93
- - `(instance methods for loading setting values from a file to existing config object with already defined setting keys)`
96
+ - `(instance methods for loading the setting values from a file to existing config object with already defined setting keys)`
94
97
  - [Default setting values file](#default-setting-values-file)
95
98
  - [Load setting values from YAML file](#load-setting-values-from-yaml-file-by-instance)
96
99
  - [Load setting values from JSON file](#load-setting-values-from-json-file-by-instance)
@@ -102,7 +105,9 @@ 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)
110
+ - [Build](#build)
106
111
  ---
107
112
 
108
113
  ## Definition
@@ -187,6 +192,10 @@ config.settings['vendor_api']['domain'] # => 'app.service.com'
187
192
  config.settings['vendor_api']['login'] # => 'test_user'
188
193
  config.settings['enable_graphql'] # => false
189
194
 
195
+ # dig to value
196
+ config.settings[:vendor_api, :domain] # => 'app.service.com'
197
+ config.settings[:vendor_api, 'login'] # => 'test_user'
198
+
190
199
  # get option value directly via index (with indifferent access)
191
200
  config['project_id'] # => nil
192
201
  config['enable_graphql'] # => false
@@ -270,7 +279,7 @@ config.slice_value('vendor_api.port') # => Qonfig::UnknownSettingError # (key do
270
279
  # - get a subset (a set of sets) of config settings represented as a hash;
271
280
  # - each key (or key set) represents a requirement of a certain setting key;
272
281
 
273
- config.subet(:vendor_api, :enable_graphql)
282
+ config.subset(:vendor_api, :enable_graphql)
274
283
  # => { 'vendor_api' => { 'login' => ..., 'domain' => ... }, 'enable_graphql' => false }
275
284
 
276
285
  config.subset(:project_id, [:vendor_api, :domain], [:credentials, :user, :login])
@@ -435,6 +444,12 @@ project_config.settings.db.password # => 'testpaswd'
435
444
 
436
445
  ### Hash representation
437
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
+
438
453
  ```ruby
439
454
  class Config < Qonfig::DataSet
440
455
  setting :serializers do
@@ -453,9 +468,13 @@ class Config < Qonfig::DataSet
453
468
 
454
469
  setting :logger, Logger.new(STDOUT)
455
470
  end
471
+ ```
456
472
 
457
- Config.new.to_h
473
+ #### Default behavior (without-options)
458
474
 
475
+ ```ruby
476
+ Config.new.to_h
477
+ # =>
459
478
  {
460
479
  "serializers": {
461
480
  "json" => { "engine" => :ok },
@@ -466,6 +485,55 @@ Config.new.to_h
466
485
  }
467
486
  ```
468
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
+
469
537
  ---
470
538
 
471
539
  ### Smart Mixin
@@ -633,9 +701,8 @@ config.settings.web_api # => "api.google.com"
633
701
 
634
702
  ---
635
703
 
636
- - `Qonfig::Compacted`: represents the compacted config object with setting readers and setting writers;
704
+ - `Qonfig::Compacted`: represents the compacted config object with setting readers, setting writers and setting predicates only - and no any other useful instance-based functionality:
637
705
  - setting keys are represented as direct instace methods (`#settings` invokation does not need);
638
- - no any other useful instance-based functionality - just setting readers, setting writers and setting predicates:
639
706
  - support for index-like access methods (`[]`,`[]=`);
640
707
  - full support of `Qonfig::DataSet` definition DSL commands:
641
708
  - `setting`, `re_setting` [doc](#definition-and-access)
@@ -646,9 +713,9 @@ config.settings.web_api # => "api.google.com"
646
713
  - support for validation of potential setting values `.valid_with?` [documentation](#validation-of-potential-setting-values);
647
714
  - can be instantiated by:
648
715
  - by existing config object: `Qonfig::DataSet#compacted` or `Qonfig::Compacted.build_from(config, &configuration)`;
649
- - from existing `Qonfig::DataSet` class: ``Qonfig::DataSet.build_compacted`;
716
+ - from existing `Qonfig::DataSet` class: `Qonfig::DataSet.build_compacted`;
650
717
  - by direct instantiation: `Qonfig::Compacted.new(settings_values = {}, &configuration)`;
651
- - by implicit instance building without explicit class definition `Qonfig::Compacted.build(&dsl_commands) # => instance of Qonfig::Compacted`;
718
+ - by implicit instance building without explicit class definition `Qonfig::Compacted.build(&dsl_commands)`;
652
719
  - you can define your own instance methods too;
653
720
 
654
721
  ---
@@ -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!
@@ -3081,6 +3158,7 @@ dynamic: 10
3081
3158
 
3082
3159
  - [toml](#plugins-toml) (provides `load_from_toml`, `save_to_toml`, `expose_toml`);
3083
3160
  - [pretty_print](#plugins-pretty_print) (beautified/prettified console output);
3161
+ - [vault](#plugins-vault) (provides `load_from_vault`, `expose_vault`)
3084
3162
 
3085
3163
  ---
3086
3164
 
@@ -3204,15 +3282,51 @@ config = Config.new
3204
3282
 
3205
3283
  ---
3206
3284
 
3285
+ ### Plugins: vault
3286
+
3287
+ - `Qonfig.plugin(:vault)`
3288
+ - adds support for `vault kv store`, [more info](https://www.vaultproject.io/docs/secrets/kv/kv-v2)
3289
+ - depends on `vault` gem ([link](https://github.com/hashicorp/vault-ruby)) (tested on `>= 0.1`);
3290
+ - provides `.load_from_vault` (works in `.load_from_yaml` manner ([doc](#load-from-yaml-file)));
3291
+ - provides `.expose_vault` (works in `.expose_yaml` manner ([doc](#expose-yaml)));
3292
+
3293
+ ```ruby
3294
+ # 1) require external dependency
3295
+ require 'vault'
3296
+
3297
+ # 2) Setup vault client
3298
+
3299
+ Vault.address = 'http://localhost:8200'
3300
+ Vault.token = 'super-duper-token-here'
3301
+
3302
+ # 3) enable plugin
3303
+ Qonfig.plugin(:vault)
3304
+
3305
+ # 3) use vault :)
3306
+ ```
3307
+
3308
+ ---
3309
+
3207
3310
  ## Roadmap
3208
3311
 
3209
3312
  - **Major**:
3210
- - distributed configuration server;
3211
- - cli toolchain;
3212
3313
  - support for Rails-like secrets;
3213
3314
  - support for persistent data storages (we want to store configs in multiple databases and files);
3214
- - Rails reload plugin;
3315
+ - rails plugin;
3316
+ - support for pattern matching;
3215
3317
  - **Minor**:
3318
+ - An ability to flag `Qonfig::Configurable`'s config object as `compacted` (`Qonfig::Compacted`);
3319
+ - Instance-based behavior for `Vault` plugin, also use instance of `Vault` client instead of `Singleton`;
3320
+ - External validation class with an importing api for better custom validations;
3321
+ - Setting value changement trace (in `anyway_config` manner);
3322
+ - Instantiation and reloading callbacks;
3323
+
3324
+ ## Build
3325
+
3326
+ ```shell
3327
+ bin/rspec -w # test the core functionality and plugins
3328
+ bin/rspec -n # test only the core functionality
3329
+ ```
3216
3330
 
3217
3331
  ## Contributing
3218
3332
 
data/Rakefile CHANGED
@@ -4,7 +4,6 @@ require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
5
  require 'rubocop'
6
6
  require 'rubocop/rake_task'
7
- require 'rubocop-rails'
8
7
  require 'rubocop-performance'
9
8
  require 'rubocop-rspec'
10
9
  require 'rubocop-rake'
data/bin/rspec CHANGED
@@ -36,6 +36,7 @@ module QonfigSpecRunner
36
36
 
37
37
  def run_with_specs_for_plugins!
38
38
  ENV['TEST_PLUGINS'] = 'true'
39
+ ENV['FULL_TEST_COVERAGE_CHECK'] = 'true'
39
40
  ENV['BUNDLE_GEMFILE'] = GEMFILES[:with_external_deps]
40
41
  run_tests!
41
42
  end
@@ -4,5 +4,7 @@ source 'https://rubygems.org'
4
4
 
5
5
  # @since 0.17.0 (qonfig: :toml plugin)
6
6
  gem 'toml-rb', '>= 2'
7
+ # @since 0.25.0 (qonfig: :vault plugin)
8
+ gem 'vault', '>= 0.1'
7
9
 
8
10
  gemspec path: '..'
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'set'
3
4
  require 'yaml'
4
5
  require 'json'
5
6
  require 'erb'
7
+ require 'pathname'
6
8
 
7
9
  # @api public
8
10
  # @since 0.1.0
@@ -62,4 +64,6 @@ module Qonfig
62
64
  register_plugin('toml', Qonfig::Plugins::TOML)
63
65
  # @since 0.19.0
64
66
  register_plugin('pretty_print', Qonfig::Plugins::PrettyPrint)
67
+ # @since 0.25.0
68
+ register_plugin('vault', Qonfig::Plugins::Vault)
65
69
  end