complex_config 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
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