complex_config 0.20.0 → 0.21.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a383ead2fa3f869b63ae75a7e32321a86027440d387942020721b8b68b1d081
4
- data.tar.gz: 95e904f31eff85a43ec1c10ab255f0956152ef2208bc33f4c8a0a2d81eb49cbf
3
+ metadata.gz: 432209a0d29d4d47874c82ebe27f311e3a545b1aac932bcf31e0307f8b3dc1fb
4
+ data.tar.gz: 6ed546fc3bbb9032503dc501c7d8350e145255756ca5cbcea18c10758e982577
5
5
  SHA512:
6
- metadata.gz: e77f6fc234a0c5e39cb51706d102252b8d809592529b6642b06931532849e9aa740fd395d325fc6e1e2172623677c1d3390fa2afcc012effaf8a01a440791aca
7
- data.tar.gz: d5f857481ebf24869540d53aa31fe021f54ff1cd4759b935236e63d0c2305ced2be867c9e34f2997f5b3fdd6825cac028ef3d7722de409c0e307125d2c811e71
6
+ metadata.gz: b7a1a956b49424098d206442242850356de73db068d715d1d9bcfa0659cb336043d6d65af530c7ef0c6d7a021a91122bcaf2baba1998bbc49c0ea7266b582b55
7
+ data.tar.gz: c07a01e3c26ce55862c34a9b42caff05dfa7ed7730be92684eb1eacd335f4badf82c2dcaabe042429610ba4ac3324a2b62b3903dc8c89e428568e4fa230ffe16
data/.all_images.yml CHANGED
@@ -6,7 +6,7 @@ script: &script |-
6
6
  echo -e "\e[1m"
7
7
  ruby -v
8
8
  echo -e "\e[0m"
9
- bundle
9
+ bundle install --full-index
10
10
  rake spec
11
11
 
12
12
  images:
data/CHANGES.md ADDED
@@ -0,0 +1,372 @@
1
+ # Changes
2
+
3
+ ## 2024-09-09 v0.21.0
4
+
5
+ * **Tree Representation**:
6
+ + Add `Tree` class to convert complex config objects into trees.
7
+ + Update `Settings` class to use `Tree` conversion in `to_tree` method.
8
+ + Update tests to reflect changes.
9
+ * **Components Array**: Add components array for flux capacitors
10
+ * **Rakefile and Gemspec**:
11
+ - Add clobber task for coverage to Rakefile
12
+ - Update all_images script: update `bundle` to `bundle install --full-index`
13
+ * **.gitignore**: Remove `.byebug_history` from ignored files
14
+ * **Complex Config**:
15
+ + Raise type error and add test for empty configuration file.
16
+ + Update gemspec to use GemHadar 1.17.0
17
+ + Add requirement for tins/xt/ask_and_send in complex_config/provider.rb
18
+ + Add check for hash type in ComplexConfig::Settings#build method
19
+ + Add test for reading from empty configuration file in provider_spec.rb
20
+ + Replace byebug with debug in spec_helper.rb
21
+
22
+ ## 2024-04-17 v0.20.0
23
+
24
+ #### Significant Changes
25
+
26
+ * **Add dependency to base64**: The code now depends on the `base64` library,
27
+ which will be extracted from Ruby 3.4.
28
+ * **Upgrade ruby and add debug gem**: The project has been upgraded to use a
29
+ newer version of Ruby and includes the `debug` gem for debugging purposes.
30
+ * **Use newest ruby, drop the older 2.5 version**: The code now targets the
31
+ latest version of Ruby and no longer supports Ruby 2.5.
32
+
33
+ #### Other Changes
34
+
35
+ * Run specs: The project now runs its specifications as part of its build
36
+ process.
37
+ * Test on newest ruby, on older ones don't: The project's tests are now run
38
+ only on the latest version of Ruby, with older versions being skipped.
39
+ * Align: The code has been aligned to follow best practices.
40
+
41
+ ## 2022-07-11 v0.19.4
42
+
43
+ * **Configuration File Handling Improvements**
44
+ + Replaced defaulting to `unsafe_load` with explicit usage, ensuring safer
45
+ handling of configuration files.
46
+
47
+ ## 2022-05-19 v0.19.3
48
+
49
+ * **New Feature**: Pass parameters to json generator, allowing for more dynamic
50
+ and customizable JSON output.
51
+ * **Improvement**: Use `all_images` for testing, improving the robustness and
52
+ accuracy of image-related tests.
53
+
54
+ ## 2021-10-28 v0.19.2
55
+
56
+ * **New Psych Support**
57
+ + Added support for newest Psych 4 library
58
+ + Defaults to disabling YAML alias feature
59
+ * **Psych API Update**
60
+ + Updated code to use new Psych/YAML API when Psych version < 4
61
+ + Retained behavior of evaluating aliases
62
+ * **Ruby Version Bump**
63
+ + Updated Ruby version in tool-versions to 3.0.2
64
+
65
+ ## 2021-04-09 v0.19.1
66
+
67
+ * **Breaking Change**: Updated code to adapt to the new keyword interface of
68
+ ERB for Ruby versions greater than or equal to 3.
69
+
70
+ ## 2021-01-05 v0.19.0
71
+
72
+ * Added two new methods:
73
+ + `get_attribute_by_name`
74
+ + `get_attributes_by_name`
75
+
76
+ ## 2020-08-26 v0.18.2
77
+
78
+ * **Bug Fix**: Resolved a similar issue, mirroring the fix introduced in
79
+ version 0.18.1.
80
+
81
+ ## 2020-08-26 v0.18.1
82
+
83
+ * **New Feature**: Added support for faking data, allowing users to simulate
84
+ scenarios without actual data.
85
+ + Implemented a new module `FakeIt` with methods for generating fake data.
86
+ + Updated relevant tests to include fake data scenarios.
87
+
88
+ ## 2020-01-07 v0.18.0
89
+
90
+ * **New Version Summary**
91
+ + Added support for Ruby 2.7.0
92
+ + Updated tests to include Ruby 2.7.0
93
+ + Refactored code to avoid string modifications
94
+ * Significant Changes:
95
+ * Support added for Ruby 2.7.0
96
+ * Tests updated to include Ruby 2.7.0
97
+ * String modification stopped
98
+
99
+ ## 2019-11-27 v0.17.1
100
+
101
+ * **Shared Settings Implementation**: The code now uses a more sane and
102
+ efficient approach for shared settings.
103
+
104
+ ## 2019-03-18 v0.17.0
105
+
106
+ * **Decoding Fix**: Corrected the decoding issue to ensure proper data
107
+ interpretation.
108
+
109
+ ## 2019-03-18 v0.16.2
110
+
111
+ * **New Feature**: Added support for handling complex scenarios
112
+ + Implemented a new logic to handle intricate cases
113
+ * Improved error handling and reporting
114
+ + Enhanced logging to provide more detailed information about errors
115
+ * Minor code refactoring
116
+ + Simplified some conditional statements
117
+
118
+ ## 2019-03-18 v0.16.1
119
+
120
+ * Improved error message for missing encryption key:
121
+ + Added more informative and user-friendly error message when encryption
122
+ key is not provided.
123
+
124
+ ## 2019-03-14 v0.16.0
125
+
126
+ * **New Features**
127
+ + Added support for `trim_mode` in legacy mode
128
+ + Enabled `trim_mode` by default
129
+ + Added `#to_json` method to settings objects
130
+ * **Changes**
131
+ + Updated code to use new `trim_mode` feature
132
+ + Modified settings objects to include `#to_json` method
133
+
134
+ ## 2019-03-14 v0.15.1
135
+
136
+ * **Fix**: Shared feature now works correctly even when the top-level settings
137
+ are empty.
138
+
139
+ ## 2018-12-07 v0.15.0
140
+
141
+ * **New Feature**: Allow recrypting a file in-place with options.
142
+ + Added functionality to enable recrypting a file without creating a new
143
+ copy.
144
+
145
+ ## 2018-12-07 v0.14.1
146
+
147
+ * **New Version**: Bumped version
148
+ * **Improved Error Handling**:
149
+ + Improved error handling if key isn't valid
150
+ + Raises `ComplexConfig::DecryptionFailed` for encrypted files
151
+ * **Compatibility**:
152
+ + Make this run on older rubies
153
+ * **Documentation**:
154
+ + Cleanup documentation
155
+ * **RubyGems**:
156
+ + Use newest rubygems
157
+
158
+ ## 2018-06-07 v0.14.0
159
+
160
+ * Added `complex_config` executable to handle configuration files.
161
+
162
+ ## 2018-02-23 v0.13.3
163
+
164
+ * **Changes in Evaluation Order**
165
+ + The evaluation order of key sources has been modified.
166
+
167
+ ## 2018-02-23 v0.13.2
168
+
169
+ * **Compatibility improvements**
170
+ + Be compatible with ancient rubies^3
171
+ + Be compatible with ancient rubies^2
172
+ + Be compatible with ancient rubies
173
+ * **Refactoring**
174
+ + Refactor key provision with source object
175
+
176
+ ## 2018-02-09 v0.13.1
177
+
178
+ * **New Features**
179
+ + Added information to README file
180
+ * **Significant Changes**
181
+ + Bumped version number
182
+ + Improved error reporting for encrypted files with missing keys
183
+
184
+ ## 2018-01-26 v0.13.0
185
+
186
+ * Improved the `write_config` interface
187
+ * Added more tests
188
+
189
+ ## 2017-11-17 v0.12.2
190
+
191
+ * **Output string keys on top level configs**:
192
+ * Added functionality to output string keys on top level configurations.
193
+
194
+ ## 2017-11-17 v0.12.1
195
+
196
+ * **New Feature**: Suppress newline output during encryption.
197
+
198
+ ## 2017-11-16 v0.12.0
199
+
200
+ * **New Features**
201
+ + Add support for writing configurations (encrypted or not)
202
+ * **Version Bump**
203
+ + Bump version to 0.12.0
204
+ * **Compatibility Improvements**
205
+ + Support older Rubies
206
+
207
+ ## 2017-11-02 v0.11.3
208
+
209
+ * **New Feature:** Added striping functionality.
210
+ * **Bug Fix:** Fixed issue where caches were not cleared when `deep_freeze` was
211
+ disabled.
212
+
213
+ ## 2017-10-30 v0.11.2
214
+
215
+ * **Behavioral Fix**:
216
+ * Fixed the behavior for incomplete key setup.
217
+
218
+ ## 2017-10-27 v0.11.1
219
+
220
+ * Added support for shared features.
221
+
222
+ ## 2017-10-27 v0.11.0
223
+
224
+ * **New Feature**: Support for encrypted YAML files, compatible with Rails'
225
+ encryption.
226
+ * **Test Update**: Added testing to ensure compatibility with Ruby 2.4.2.
227
+
228
+ ## 2017-02-02 v0.10.0
229
+
230
+ ## 2017-01-23 v0.9.2
231
+
232
+ * **New Version**: Released version 0.9.2.
233
+ * **Performance Improvement**:
234
+ + Memoized proxy object for improved performance.
235
+
236
+ ## 2016-11-23 v0.9.1
237
+
238
+ * **New Features**
239
+ + Use newest RubyGems
240
+ + Test on Ruby 2.3.3
241
+ * **Bug Fixes**
242
+ + Fix Travis builds
243
+ + travis fiddles with RAILS_ENV variable, breaking specs (resolved)
244
+ * **Testing Improvements**
245
+ + Test newer Rubies
246
+
247
+ ## 2016-11-22 v0.9.0
248
+
249
+ * **Gem Update**: Updated to newest gem_hadar.
250
+ * **Coverage Report**: Only send new coverage report on success.
251
+ * **Manual Run**: We are supposed to run this manually now.
252
+ * **Code Organization**: Moved provider shortcuts into its own module.
253
+
254
+ ## 2016-07-27 v0.8.0
255
+
256
+ * **New Feature**: Added support for replacing attributes in
257
+ `ComplexConfig::Settings` using the `#replace_attributes` method.
258
+
259
+ ## 2016-07-18 v0.7.0
260
+
261
+ * **New Features**
262
+ + Added new date functionality
263
+ * **Improvements**
264
+ + Simplified `ComplexConfig::Settings` interface by basing it on
265
+ `BasicObject` and reducing mixin usage
266
+ * **Documentation**
267
+ + Updated README.md with new changes
268
+
269
+ ## 2016-07-15 v0.6.0
270
+
271
+ * **Caching Improvements**
272
+ + Use `mize` for caching
273
+
274
+ ## 2016-06-23 v0.5.2
275
+
276
+ * **Index Access Feature**
277
+ + Fixed issue with incorrect indexing behavior (#56190d3)
278
+ + Improved performance and reliability of index access functionality
279
+
280
+ ## 2016-06-23 v0.5.1
281
+
282
+ * **New Features**
283
+ + Resolve index access via the plugin code path, making `foo.bar` and
284
+ `foo[:bar]` equivalent for a plugin key.
285
+ + Test on Ruby 2.3.1 and 2.4.0-preview1
286
+ * **Infrastructure Changes**
287
+ + Use new infrastructure
288
+ * **Bug Fixes**
289
+ + Fix typo
290
+
291
+ ## 2015-11-19 v0.5.0
292
+
293
+ * **New Features**
294
+ + Add configure method
295
+ + Add configuration example to README
296
+ * **Bug Fixes**
297
+ + Flush cache for every request in rails development
298
+ + Change the Changes
299
+ * **Improvements**
300
+ + Just always skip to avoid interference
301
+
302
+ ## 2015-11-17 v0.4.0
303
+
304
+ * **New Feature:** Implemented root object method call syntax.
305
+
306
+ ## 2015-11-03 v0.3.1
307
+
308
+ * **New Features**
309
+ + Add missing tins dependency
310
+ + Show improved settings output in README.md
311
+ + Adds a decent string representation for ComplexConfig::Settings objects
312
+ * **Dependency Updates**
313
+ + Use newest gem hadar
314
+ + Add some development_dependencies (including tins)
315
+ * **Code Improvements**
316
+ + Shorten codeclimate snippet
317
+
318
+ ## 2015-03-24 v0.3.0
319
+
320
+ ## 2015-03-24 v0.2.3
321
+
322
+ * **Typo Fix**: Corrected a typo in the `LoadErro(r)` method.
323
+ * **JRuby Update**: Updated JRuby version to use `jruby-head` and allowed it to
324
+ potentially fail.
325
+
326
+ ## 2015-02-25 v0.2.2
327
+
328
+ * Removed unnecessary `sprintf` format.
329
+
330
+ ## 2015-01-28 v0.2.1
331
+
332
+ * **New Version**:
333
+ * Added support for JRuby test target
334
+ * Removed always broken jruby-head
335
+ * Bumped version number to 0.2.0
336
+ * Bumped version to 0.2.1
337
+ * **Plugin Changes**:
338
+ * Skip the money plugin if monetize cannot be loaded (optional runtime
339
+ dependency)
340
+ * Remove require for plugins, allowing users to use the gem without requiring
341
+ the money gem
342
+ * Fixed requiring *with* plugins, enabling them to load correctly
343
+
344
+ ## 2015-01-27 v0.2.0
345
+
346
+ * **New Features**
347
+ + Added support for JRuby in tests
348
+ + Updated to newest Ruby 2.2
349
+ * **Improvements**
350
+ + Replaced mixin with delegation for Enumerable, allowing attribute names
351
+ like `zip`, `min`, or `max` without conflicts
352
+ * **Documentation**
353
+ + Added Apache license file
354
+
355
+ ## 2015-01-01 v0.1.1
356
+
357
+ * **New Version Summary**
358
+ + Use value from non-associative list arrays
359
+ + Fix `puts` method to call `to_ary` correctly
360
+ + Prevent cash leakage after flushing cache
361
+ + Add `to_ary` method for level on demand
362
+
363
+ ## 2014-12-15 v0.1.0
364
+
365
+ * **Significant Changes**:
366
+ + Freeze cached configuration by default (versioning)
367
+ + Add to-do list for future development
368
+ + Integrate CodeClimate for code analysis and improvement
369
+
370
+ ## 2014-12-12 v0.0.0
371
+
372
+ * Start
data/README.md CHANGED
@@ -30,21 +30,40 @@ Given a config file like this and named `config/products.yml`
30
30
  name: Flux Capacitor Version 2.0
31
31
  price_in_cents: 12_000_00
32
32
  manual_pdf_url: "http://brown-inc.com/manuals/fc_20.pdf"
33
+ components:
34
+ - Miniature Chrono-Levitation Chamber (mCLC)
35
+ - Single Gravitational Displacement Coil (SGDC)
36
+ - Simple Quantum Flux Transducer (SQFT)
37
+ - Basic Time-Space Navigation System (BTN)
33
38
  pro_version:
34
39
  name: Flux Capacitor Professional
35
40
  price_in_cents: 23_000_00
36
41
  manual_pdf_url: "http://brown-inc.com/manuals/fc_pro.pdf"
42
+ components:
43
+ - Advanced Chrono-Levitation Chamber (ACL)
44
+ - Dual Gravitational Displacement Coils (DGDCs)
45
+ - Advanced Quantum Flux Transducer (AQFT)
46
+ - Professional Time-Space Navigation System (PTNS)
37
47
  enterprise_version:
38
48
  name: Flux Capacitor Enterpise
39
49
  price_in_cents: 1_600_000_00
40
50
  manual_pdf_url: "http://brown-inc.com/manuals/fc_enterprise.pdf"
41
-
51
+ components:
52
+ - Super-Advanced Chrono-Levitation Chamber (SACL)
53
+ - Quadruple Gravitational Displacement Coils (QGDCs)
54
+ - Ultra-Advanced Quantum Flux Transducer (UAQFT)
55
+ - Enterprise Time-Space Navigation System (ETNS)
42
56
  test:
43
57
  flux_capacitor:
44
58
  test_version:
45
59
  name: Yadayada
46
60
  price_in_cents: 6_66
47
61
  manual_pdf_url: "http://staging.brown-inc.com/manuals/fc_10.pdf"
62
+ components:
63
+ - Experimental Chrono-Levitation Chamber (ECLC)
64
+ - Modular Gravitational Displacement Coils (MGDCs)
65
+ - Variable Quantum Flux Transducer (VQFT)
66
+ - Development Time-Space Navigation System (DTNS)
48
67
 
49
68
  and using `require "complex_config/rude"` in the `"development"` environment you
50
69
  can now access the configuration.
@@ -82,6 +101,10 @@ You can also fetch config settings from a different environment:
82
101
  products.flux_capacitor.test_version.name = "Yadayada"
83
102
  products.flux_capacitor.test_version.price_in_cents = 666
84
103
  products.flux_capacitor.test_version.manual_pdf_url = "http://staging.brown-inc.com/manuals/fc_10.pdf"
104
+ products.flux_capacitor.test_version.components[0] = "Experimental Chrono-Levitation Chamber (ECLC)"
105
+ products.flux_capacitor.test_version.components[1] = "Modular Gravitational Displacement Coils (MGDCs)"
106
+ products.flux_capacitor.test_version.components[2] = "Variable Quantum Flux Transducer (VQFT)"
107
+ products.flux_capacitor.test_version.components[3] = "Development Time-Space Navigation System (DTNS)"
85
108
 
86
109
  Calling `complex_config.products.` instead of `cc(…)` would skip the implicite
87
110
  namespacing via the `RAILS_ENV` environment, so
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ GemHadar do
12
12
  executables 'complex_config'
13
13
  test_dir 'spec'
14
14
  ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.rvmrc',
15
- '.AppleDouble', '.DS_Store', '.byebug_history', 'errors.lst', 'tags'
15
+ '.AppleDouble', '.DS_Store', 'errors.lst', 'tags'
16
16
  package_ignore '.all_images', '.utilsrc', '.rspec', '.tool-versions',
17
17
  '.gitignore'
18
18
 
@@ -20,6 +20,8 @@ GemHadar do
20
20
  title "#{name.camelize} -- configuration library"
21
21
  licenses << 'Apache-2.0'
22
22
 
23
+ clobber 'coverage'
24
+
23
25
  dependency 'json'
24
26
  dependency 'tins'
25
27
  dependency 'mize', '~> 0.3', '>= 0.3.4'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.20.0
1
+ 0.21.0
@@ -1,29 +1,29 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: complex_config 0.20.0 ruby lib
2
+ # stub: complex_config 0.21.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "complex_config".freeze
6
- s.version = "0.20.0".freeze
6
+ s.version = "0.21.0".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2024-04-17"
11
+ s.date = "2024-09-09"
12
12
  s.description = "This library allows you to access configuration files via a simple interface".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.executables = ["complex_config".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/version.rb".freeze]
16
- s.files = [".all_images.yml".freeze, "COPYING".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/complex_config".freeze, "complex_config.gemspec".freeze, "config/products.yml".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/version.rb".freeze, "spec/complex_config/config_spec.rb".freeze, "spec/complex_config/encryption_spec.rb".freeze, "spec/complex_config/key_source_spec.rb".freeze, "spec/complex_config/plugins_spec.rb".freeze, "spec/complex_config/provider_spec.rb".freeze, "spec/complex_config/settings_spec.rb".freeze, "spec/complex_config/shortcuts_spec.rb".freeze, "spec/config/broken_config.yml".freeze, "spec/config/config.yml".freeze, "spec/config/config_with_alias.yml".freeze, "spec/config/legacy_classes.yml".freeze, "spec/config/master.key".freeze, "spec/config/with-key-file.yml.enc".freeze, "spec/config/with-key-file.yml.key".freeze, "spec/config/without-key-file.yml.enc".freeze, "spec/spec_helper.rb".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/tree.rb".freeze, "lib/complex_config/version.rb".freeze]
16
+ s.files = [".all_images.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/complex_config".freeze, "complex_config.gemspec".freeze, "config/products.yml".freeze, "lib/complex_config.rb".freeze, "lib/complex_config/config.rb".freeze, "lib/complex_config/encryption.rb".freeze, "lib/complex_config/errors.rb".freeze, "lib/complex_config/key_source.rb".freeze, "lib/complex_config/plugins.rb".freeze, "lib/complex_config/plugins/enable.rb".freeze, "lib/complex_config/plugins/money.rb".freeze, "lib/complex_config/plugins/uri.rb".freeze, "lib/complex_config/provider.rb".freeze, "lib/complex_config/provider/shortcuts.rb".freeze, "lib/complex_config/proxy.rb".freeze, "lib/complex_config/railtie.rb".freeze, "lib/complex_config/rude.rb".freeze, "lib/complex_config/settings.rb".freeze, "lib/complex_config/shortcuts.rb".freeze, "lib/complex_config/tree.rb".freeze, "lib/complex_config/version.rb".freeze, "spec/complex_config/config_spec.rb".freeze, "spec/complex_config/encryption_spec.rb".freeze, "spec/complex_config/key_source_spec.rb".freeze, "spec/complex_config/plugins_spec.rb".freeze, "spec/complex_config/provider_spec.rb".freeze, "spec/complex_config/settings_spec.rb".freeze, "spec/complex_config/shortcuts_spec.rb".freeze, "spec/config/broken_config.yml".freeze, "spec/config/config.yml".freeze, "spec/config/config_with_alias.yml".freeze, "spec/config/empty_config.yml".freeze, "spec/config/legacy_classes.yml".freeze, "spec/config/master.key".freeze, "spec/config/with-key-file.yml.enc".freeze, "spec/config/with-key-file.yml.key".freeze, "spec/config/without-key-file.yml.enc".freeze, "spec/spec_helper.rb".freeze]
17
17
  s.homepage = "https://github.com/flori/complex_config".freeze
18
18
  s.licenses = ["Apache-2.0".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "ComplexConfig -- configuration library".freeze, "--main".freeze, "README.md".freeze]
20
- s.rubygems_version = "3.5.3".freeze
20
+ s.rubygems_version = "3.5.18".freeze
21
21
  s.summary = "configuration library".freeze
22
22
  s.test_files = ["spec/complex_config/config_spec.rb".freeze, "spec/complex_config/encryption_spec.rb".freeze, "spec/complex_config/key_source_spec.rb".freeze, "spec/complex_config/plugins_spec.rb".freeze, "spec/complex_config/provider_spec.rb".freeze, "spec/complex_config/settings_spec.rb".freeze, "spec/complex_config/shortcuts_spec.rb".freeze, "spec/spec_helper.rb".freeze]
23
23
 
24
24
  s.specification_version = 4
25
25
 
26
- s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.15.0".freeze])
26
+ s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 1.17.0".freeze])
27
27
  s.add_development_dependency(%q<rake>.freeze, [">= 0".freeze])
28
28
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
29
29
  s.add_development_dependency(%q<rspec>.freeze, [">= 0".freeze])
data/config/products.yml CHANGED
@@ -4,18 +4,37 @@ development:
4
4
  name: Flux Capacitor Version 2.0
5
5
  price_in_cents: 12_000_00
6
6
  manual_pdf_url: "http://brown-inc.com/manuals/fc_20.pdf"
7
+ components:
8
+ - Miniature Chrono-Levitation Chamber (mCLC)
9
+ - Single Gravitational Displacement Coil (SGDC)
10
+ - Simple Quantum Flux Transducer (SQFT)
11
+ - Basic Time-Space Navigation System (BTN)
7
12
  pro_version:
8
13
  name: Flux Capacitor Professional
9
14
  price_in_cents: 23_000_00
10
15
  manual_pdf_url: "http://brown-inc.com/manuals/fc_pro.pdf"
16
+ components:
17
+ - Advanced Chrono-Levitation Chamber (ACL)
18
+ - Dual Gravitational Displacement Coils (DGDCs)
19
+ - Advanced Quantum Flux Transducer (AQFT)
20
+ - Professional Time-Space Navigation System (PTNS)
11
21
  enterprise_version:
12
22
  name: Flux Capacitor Enterpise
13
23
  price_in_cents: 1_600_000_00
14
24
  manual_pdf_url: "http://brown-inc.com/manuals/fc_enterprise.pdf"
15
-
25
+ components:
26
+ - Super-Advanced Chrono-Levitation Chamber (SACL)
27
+ - Quadruple Gravitational Displacement Coils (QGDCs)
28
+ - Ultra-Advanced Quantum Flux Transducer (UAQFT)
29
+ - Enterprise Time-Space Navigation System (ETNS)
16
30
  test:
17
31
  flux_capacitor:
18
32
  test_version:
19
33
  name: Yadayada
20
34
  price_in_cents: 6_66
21
35
  manual_pdf_url: "http://staging.brown-inc.com/manuals/fc_10.pdf"
36
+ components:
37
+ - Experimental Chrono-Levitation Chamber (ECLC)
38
+ - Modular Gravitational Displacement Coils (MGDCs)
39
+ - Variable Quantum Flux Transducer (VQFT)
40
+ - Development Time-Space Navigation System (DTNS)
@@ -4,6 +4,7 @@ require 'pathname'
4
4
  require 'yaml'
5
5
  require 'mize'
6
6
  require 'tins/xt/secure_write'
7
+ require 'tins/xt/ask_and_send'
7
8
 
8
9
  class ComplexConfig::Provider
9
10
  include Tins::SexySingleton
@@ -28,6 +28,7 @@ class ComplexConfig::Settings < BasicObject
28
28
 
29
29
  def build(name, hash)
30
30
  name.nil? or self.name_prefix = name.to_sym
31
+ hash.respond_to?(:to_hash) or raise TypeError, 'require hash to build'
31
32
  from_hash(hash)
32
33
  ensure
33
34
  self.name_prefix = nil
@@ -122,6 +123,10 @@ class ComplexConfig::Settings < BasicObject
122
123
  to_h.to_json(*a)
123
124
  end
124
125
 
126
+ def to_tree
127
+ ::ComplexConfig::Tree.convert(name_prefix, self)
128
+ end
129
+
125
130
  def size
126
131
  each.count
127
132
  end
@@ -0,0 +1,80 @@
1
+ module ComplexConfig
2
+ class Tree
3
+ def self.convert(name, value)
4
+ case value
5
+ when ComplexConfig::Settings
6
+ convert(name, value.to_h)
7
+ when Hash
8
+ obj = new(name.to_s)
9
+ value.each do |name, value|
10
+ obj << convert(name, value)
11
+ end
12
+ obj
13
+ when Array
14
+ obj = new(name.to_s)
15
+ value.each_with_index do |value, i|
16
+ obj << convert(i, value)
17
+ end
18
+ obj
19
+ else
20
+ if name.is_a?(Integer)
21
+ new value.inspect
22
+ else
23
+ new "#{name} = #{value.inspect}"
24
+ end
25
+ end
26
+ end
27
+
28
+ def initialize(name)
29
+ @name = name
30
+ @children = []
31
+ end
32
+
33
+ private
34
+
35
+ def inner_child_prefix(i)
36
+ i.zero? ? "├─ " : "│ "
37
+ end
38
+
39
+ def last_child_prefix(i)
40
+ i.zero? ? "└─ " : " "
41
+ end
42
+
43
+ public
44
+
45
+ def to_enum
46
+ Enumerator.new do |y|
47
+ y.yield @name
48
+
49
+ @children.each_with_index do |child, child_index|
50
+ children_enum = child.to_enum
51
+ if child_index < @children.size - 1
52
+ children_enum.each_with_index do |setting, i|
53
+ y.yield "#{inner_child_prefix(i)}#{setting}"
54
+ end
55
+ else
56
+ children_enum.each_with_index do |setting, i|
57
+ y.yield "#{last_child_prefix(i)}#{setting}"
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ def <<(child)
65
+ @children << child
66
+ end
67
+
68
+ def to_ary
69
+ to_enum.to_a
70
+ end
71
+
72
+ alias to_a to_ary
73
+
74
+ def to_str
75
+ to_ary * ?\n
76
+ end
77
+
78
+ alias to_s to_str
79
+ end
80
+ end
@@ -1,6 +1,6 @@
1
1
  module ComplexConfig
2
2
  # ComplexConfig version
3
- VERSION = '0.20.0'
3
+ VERSION = '0.21.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -6,6 +6,7 @@ end
6
6
  require 'complex_config/version'
7
7
  require 'complex_config/errors'
8
8
  require 'complex_config/proxy'
9
+ require 'complex_config/tree'
9
10
  require 'complex_config/settings'
10
11
  require 'complex_config/config'
11
12
  require 'complex_config/key_source'
@@ -84,6 +84,12 @@ RSpec.describe ComplexConfig::Provider do
84
84
  ).to be_a ComplexConfig::Settings
85
85
  end
86
86
 
87
+ it 'cannot read from an empty configuration file' do
88
+ expect {
89
+ described_class.config(asset('empty_config.yml'))
90
+ }.to raise_error(TypeError)
91
+ end
92
+
87
93
  it 'has deep frozen settings' do
88
94
  settings = described_class.config(asset('config.yml'))
89
95
  expect(settings).to be_frozen
@@ -7,7 +7,7 @@ RSpec.describe ComplexConfig::Settings do
7
7
  end
8
8
 
9
9
  let :settings do
10
- described_class[
10
+ obj = described_class[
11
11
  foo: {
12
12
  bar: {
13
13
  baz: true
@@ -15,6 +15,8 @@ RSpec.describe ComplexConfig::Settings do
15
15
  qux: 'quux'
16
16
  }
17
17
  ]
18
+ obj.name_prefix = 'root'
19
+ obj
18
20
  end
19
21
 
20
22
  it 'can be initialized with a hash' do
@@ -79,15 +81,15 @@ RSpec.describe ComplexConfig::Settings do
79
81
 
80
82
  it 'can return a hash with pathes as keys' do
81
83
  expect(settings.pathes(path_sep: ?:)).to eq(
82
- 'foo:bar:baz' => true,
83
- 'foo:qux' => "quux"
84
+ 'root:foo:bar:baz' => true,
85
+ 'root:foo:qux' => "quux"
84
86
  )
85
87
  end
86
88
 
87
89
  it 'can be represented as a string' do
88
90
  expect(settings.to_s(pair_sep: ' → ', path_sep: ?/)).to eq <<EOT
89
- foo/bar/baz → true
90
- foo/qux → "quux"
91
+ root/foo/bar/baz → true
92
+ root/foo/qux → "quux"
91
93
  EOT
92
94
  end
93
95
 
@@ -98,17 +100,33 @@ EOT
98
100
  it 'can be represented as a string if it has arrays' do
99
101
  settings[:ary] = described_class[ [ 1, { nested: 2 }, 3 ] ]
100
102
  expect(settings.to_s).to eq <<EOT
101
- foo.bar.baz = true
102
- foo.qux = "quux"
103
- ary[0] = 1
104
- ary[1].nested = 2
105
- ary[2] = 3
103
+ root.foo.bar.baz = true
104
+ root.foo.qux = "quux"
105
+ root.ary[0] = 1
106
+ root.ary[1].nested = 2
107
+ root.ary[2] = 3
108
+ EOT
109
+ end
110
+
111
+ it 'can be represented as tree' do
112
+ settings[:ary] = described_class[ [ 1, { nested: 2 }, 3 ] ]
113
+ expect(settings.to_tree.to_s).to eq <<EOT.chomp
114
+ root
115
+ ├─ foo
116
+ │ ├─ bar
117
+ │ │ └─ baz = true
118
+ │ └─ qux = "quux"
119
+ └─ ary
120
+ ├─ 1
121
+ ├─ 1
122
+ │ └─ nested = 2
123
+ └─ 3
106
124
  EOT
107
125
  end
108
126
 
109
127
  it 'can be pretty printed' do
110
128
  q = double
111
- expect(q).to receive(:text).with("foo.bar.baz = true\nfoo.qux = \"quux\"\n")
129
+ expect(q).to receive(:text).with("root.foo.bar.baz = true\nroot.foo.qux = \"quux\"\n")
112
130
  settings.pretty_print(q)
113
131
  end
114
132
 
File without changes
data/spec/spec_helper.rb CHANGED
@@ -6,7 +6,7 @@ if ENV['START_SIMPLECOV'].to_i == 1
6
6
  end
7
7
  require 'rspec'
8
8
  begin
9
- require 'byebug'
9
+ require 'debug'
10
10
  rescue LoadError
11
11
  end
12
12
  require 'complex_config'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: complex_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-17 00:00:00.000000000 Z
11
+ date: 2024-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.15.0
19
+ version: 1.17.0
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: 1.15.0
26
+ version: 1.17.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -193,11 +193,13 @@ extra_rdoc_files:
193
193
  - lib/complex_config/rude.rb
194
194
  - lib/complex_config/settings.rb
195
195
  - lib/complex_config/shortcuts.rb
196
+ - lib/complex_config/tree.rb
196
197
  - lib/complex_config/version.rb
197
198
  files:
198
199
  - ".all_images.yml"
199
- - COPYING
200
+ - CHANGES.md
200
201
  - Gemfile
202
+ - LICENSE
201
203
  - README.md
202
204
  - Rakefile
203
205
  - VERSION
@@ -220,6 +222,7 @@ files:
220
222
  - lib/complex_config/rude.rb
221
223
  - lib/complex_config/settings.rb
222
224
  - lib/complex_config/shortcuts.rb
225
+ - lib/complex_config/tree.rb
223
226
  - lib/complex_config/version.rb
224
227
  - spec/complex_config/config_spec.rb
225
228
  - spec/complex_config/encryption_spec.rb
@@ -231,6 +234,7 @@ files:
231
234
  - spec/config/broken_config.yml
232
235
  - spec/config/config.yml
233
236
  - spec/config/config_with_alias.yml
237
+ - spec/config/empty_config.yml
234
238
  - spec/config/legacy_classes.yml
235
239
  - spec/config/master.key
236
240
  - spec/config/with-key-file.yml.enc
@@ -260,7 +264,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
260
264
  - !ruby/object:Gem::Version
261
265
  version: '0'
262
266
  requirements: []
263
- rubygems_version: 3.5.3
267
+ rubygems_version: 3.5.18
264
268
  signing_key:
265
269
  specification_version: 4
266
270
  summary: configuration library
File without changes