collapsium-config 0.4.0 → 0.4.1
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/.travis.yml +3 -0
- data/Gemfile.lock +2 -3
- data/README.md +6 -10
- data/lib/collapsium-config/configuration.rb +24 -6
- data/lib/collapsium-config/version.rb +1 -1
- data/spec/configuration_spec.rb +8 -2
- data/spec/data/driverconfig.yml +7 -1
- data/spec/spec_helper.rb +0 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f73bde177ede4ff9e18afef840427c05f50f512
|
4
|
+
data.tar.gz: bbc9fc38003b7353d28137deeaf719990eb8c53a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5173c739f0c6c9a368238791f642850be2991d4ef74b78eec967a835fd33027b67842d6897940b5f7f3961d37045b88a9fcc0e3c3cd3f087ff321a54e236c4c7
|
7
|
+
data.tar.gz: 94f98c030682cce256543d6dc93647afec109edd5db1868437bfe7a13958d3a547d266831b87fd521a9c48e3f37d2199045e8ae635913ba682077b9fe8cb6a6e
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
collapsium-config (0.4.
|
4
|
+
collapsium-config (0.4.1)
|
5
5
|
collapsium (~> 0.6)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
ast (2.3.0)
|
11
|
-
codeclimate-test-reporter (0.
|
12
|
-
simplecov (>= 0.7.1, < 1.0.0)
|
11
|
+
codeclimate-test-reporter (1.0.1)
|
13
12
|
collapsium (0.6.1)
|
14
13
|
diff-lcs (1.2.5)
|
15
14
|
docile (1.1.5)
|
data/README.md
CHANGED
@@ -10,20 +10,12 @@ various configuration sources into one configuration object.
|
|
10
10
|
[](https://codeclimate.com/github/jfinkhaeuser/collapsium-config)
|
11
11
|
[](https://codeclimate.com/github/jfinkhaeuser/collapsium-config/coverage)
|
12
12
|
|
13
|
-
#
|
13
|
+
# Summary
|
14
14
|
|
15
15
|
- Supports [JSON](http://www.json.org/) and [YAML](http://yaml.org/) file
|
16
16
|
formats.
|
17
|
-
-
|
18
|
-
if that exists, and merges it's contents recursively into the main
|
19
|
-
configuration.
|
17
|
+
- Generates configuration files from ERB templates, includes, local override files and an extension mechanism.
|
20
18
|
- Pathed access to configuration variables.
|
21
|
-
- Using the special `extends` configuration key, allows a configuration Hash
|
22
|
-
to include all values from other configuration Hash(es).
|
23
|
-
- Using the special, top-level `include` configuration key, allows a
|
24
|
-
configuration file to be split into multiple included files.
|
25
|
-
- As of `v0.2`, configuration files are [ERB templates](http://ruby-doc.org/stdlib-2.3.1/libdoc/erb/rdoc/ERB.html).
|
26
|
-
Do your templating stuff as you'd usually do it.
|
27
19
|
- Allows overriding of configuration values from the environment.
|
28
20
|
|
29
21
|
# Basic Usage
|
@@ -196,6 +188,10 @@ bases merged into the value.
|
|
196
188
|
- You can also specify an Array of paths, with the same effect.
|
197
189
|
- This feature means that `extends` and `base` are reserved configuration keys!
|
198
190
|
- Multiple levels of extension are supported.
|
191
|
+
- The order of items in `base` is deterministic:
|
192
|
+
1. Items are added in the order in which they appear in `extends`, but...
|
193
|
+
1. ... after each item, the items it itself extends are added before the next
|
194
|
+
item is processed.
|
199
195
|
|
200
196
|
### Includes
|
201
197
|
|
@@ -191,7 +191,9 @@ module Collapsium
|
|
191
191
|
def resolve_includes(base, config, options)
|
192
192
|
# Only process Hashes
|
193
193
|
if not config.is_a? Hash
|
194
|
+
# :nocov:
|
194
195
|
return config
|
196
|
+
# :nocov:
|
195
197
|
end
|
196
198
|
|
197
199
|
# Figure out includes. We have to recursively fetch the string and
|
@@ -290,11 +292,20 @@ module Collapsium
|
|
290
292
|
end
|
291
293
|
|
292
294
|
# Now to resolve the path to the base and remove the "extends" keyword.
|
295
|
+
bases = fetch_base_values(root, parent_path(path), value)
|
296
|
+
|
297
|
+
# Merge the bases
|
298
|
+
merge_base_values(root, value, bases)
|
299
|
+
|
300
|
+
# And we're done, set the value to what was being merged.
|
301
|
+
root[path] = value
|
302
|
+
end
|
303
|
+
|
304
|
+
def fetch_base_values(root, parent, value)
|
293
305
|
base_paths = array_value(value["extends"])
|
294
|
-
bases =
|
306
|
+
bases = []
|
295
307
|
base_paths.each do |base_path|
|
296
308
|
if not base_path.start_with?(separator)
|
297
|
-
parent = parent_path(path)
|
298
309
|
base_path = "#{parent}#{separator}#{base_path}"
|
299
310
|
end
|
300
311
|
base_path = normalize_path(base_path)
|
@@ -307,7 +318,7 @@ module Collapsium
|
|
307
318
|
next
|
308
319
|
end
|
309
320
|
|
310
|
-
bases[base_path
|
321
|
+
bases << [base_path, base_value]
|
311
322
|
end
|
312
323
|
|
313
324
|
# Only delete the "extends" keyword if we found all base.
|
@@ -315,6 +326,10 @@ module Collapsium
|
|
315
326
|
value.delete("extends")
|
316
327
|
end
|
317
328
|
|
329
|
+
return bases
|
330
|
+
end
|
331
|
+
|
332
|
+
def merge_base_values(root, value, bases)
|
318
333
|
# We need to recursively resolve the base values before merging them into
|
319
334
|
# value. To preserve the override order, we need to overwrite values when
|
320
335
|
# merging bases...
|
@@ -328,11 +343,14 @@ module Collapsium
|
|
328
343
|
value.recursive_merge!(merged_base, false)
|
329
344
|
|
330
345
|
# Set the base if all is well.
|
331
|
-
|
332
|
-
|
346
|
+
base_val = value["base"] || []
|
347
|
+
base_val += bases.map { |p, _| p }
|
348
|
+
base_val.uniq!
|
349
|
+
if base_val.empty?
|
350
|
+
return
|
333
351
|
end
|
334
352
|
|
335
|
-
|
353
|
+
value["base"] = base_val
|
336
354
|
end
|
337
355
|
end # class Configuration
|
338
356
|
end # module Config
|
data/spec/configuration_spec.rb
CHANGED
@@ -104,6 +104,7 @@ describe Collapsium::Config::Configuration do
|
|
104
104
|
expect(cfg["drivers.mock.mockoption"]).to eql 42
|
105
105
|
expect(cfg["drivers.branch1.branch1option"]).to eql "foo"
|
106
106
|
expect(cfg["drivers.branch2.branch2option"]).to eql "bar"
|
107
|
+
expect(cfg["drivers.branch3.branch3option"]).to eql "baz"
|
107
108
|
expect(cfg["drivers.leaf.leafoption"]).to eql "baz"
|
108
109
|
|
109
110
|
# Now test extended values
|
@@ -115,11 +116,16 @@ describe Collapsium::Config::Configuration do
|
|
115
116
|
expect(cfg["drivers.leaf.branch1option"]).to eql "override" # not "foo" !
|
116
117
|
|
117
118
|
expect(cfg["drivers.leaf.branch2option"]).to eql "bar"
|
119
|
+
expect(cfg["drivers.leaf.global_opt"]).to eql "set"
|
120
|
+
|
121
|
+
expect(cfg["drivers.branch3.global_opt"]).to eql "set"
|
118
122
|
|
119
123
|
# Also test that all levels go back to base == mock
|
120
124
|
expect(cfg["drivers.branch1.base"]).to eql %w(.drivers.mock)
|
121
|
-
expect(cfg["drivers.branch2.base"]).to eql %w(.drivers.mock)
|
122
|
-
expect(cfg["drivers.
|
125
|
+
expect(cfg["drivers.branch2.base"]).to eql %w(.drivers.mock .drivers.branch1)
|
126
|
+
expect(cfg["drivers.branch3.base"]).to eql %w(.global)
|
127
|
+
expect(cfg["drivers.leaf.base"]).to eql %w(.drivers.mock .drivers.branch1
|
128
|
+
.drivers.branch2 .global)
|
123
129
|
|
124
130
|
# We expect that 'derived' is extended with '.other.base', too
|
125
131
|
expect(cfg["derived.test.foo"]).to eql 'bar'
|
data/spec/data/driverconfig.yml
CHANGED
@@ -7,6 +7,9 @@
|
|
7
7
|
#
|
8
8
|
# so the order in this file has to be mock -> branch2 -> branch1 -> leaf
|
9
9
|
---
|
10
|
+
global:
|
11
|
+
global_opt: set
|
12
|
+
|
10
13
|
drivers:
|
11
14
|
mock:
|
12
15
|
mockoption: 42
|
@@ -16,8 +19,11 @@ drivers:
|
|
16
19
|
branch1:
|
17
20
|
extends: mock
|
18
21
|
branch1option: foo
|
22
|
+
branch3:
|
23
|
+
extends: .global
|
24
|
+
branch3option: baz
|
19
25
|
leaf:
|
20
|
-
extends: branch2
|
26
|
+
extends: branch2,.global
|
21
27
|
leafoption: baz
|
22
28
|
branch1option: override
|
23
29
|
base_does_not_exist:
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: collapsium-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Finkhaeuser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|