config_hound 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/config_hound/deep_merge.rb +10 -0
- data/lib/config_hound/loader.rb +11 -27
- data/lib/config_hound/resource.rb +29 -16
- data/lib/config_hound/version.rb +1 -1
- data/lib/config_hound.rb +2 -2
- data/spec/config_hound/deep_merge_spec.rb +81 -0
- data/spec/config_hound/resource_spec.rb +1 -1
- data/spec/features/multi_file_spec.rb +1 -5
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2274553ac129370bd650d33390fe3fbde49a86b3
|
4
|
+
data.tar.gz: 690579fd733a8670f587ef9e190a2bb1d0843e2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be1159fe1d0adc7ec520f5df420ad2f639efe0e3937ace781519aa6dccc3b1b4b4284719196c839e5a0ed2f42c1ee03a1f4175b7b218c118fb3e5bb6d7e1b206
|
7
|
+
data.tar.gz: 7d4a46f6e76069e9518e02ab6904d5a953ec0839d8cb5a588dd4d028835f31a2f4bb444291a976c002279bb252409882df7873dc1de80734831d9c9ecf4df4cc
|
data/lib/config_hound/loader.rb
CHANGED
@@ -6,43 +6,27 @@ module ConfigHound
|
|
6
6
|
|
7
7
|
DEFAULT_INCLUDE_KEY = "_include"
|
8
8
|
|
9
|
-
def
|
10
|
-
data = {}
|
11
|
-
loader = new(data, options)
|
12
|
-
Array(paths).each do |path|
|
13
|
-
loader.load(path)
|
14
|
-
end
|
15
|
-
data
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize(data, options)
|
19
|
-
@data = data
|
9
|
+
def initialize(options = {})
|
20
10
|
@include_key = options.fetch(:include_key, DEFAULT_INCLUDE_KEY)
|
21
11
|
end
|
22
12
|
|
23
|
-
def load(
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
includes.each do |i|
|
28
|
-
load(resource.resolve(i))
|
29
|
-
end
|
13
|
+
def load(paths)
|
14
|
+
Array(paths).reverse.map do |path|
|
15
|
+
load_resource(Resource[path])
|
16
|
+
end.reduce({}, &ConfigHound.method(:deep_merge_into))
|
30
17
|
end
|
31
18
|
|
32
19
|
private
|
33
20
|
|
34
|
-
attr_reader :data
|
35
21
|
attr_reader :include_key
|
36
22
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
data[key] = value
|
44
|
-
end
|
23
|
+
def load_resource(resource)
|
24
|
+
raw_data = resource.load
|
25
|
+
includes = Array(raw_data.delete(include_key))
|
26
|
+
included_resources = includes.map do |relative_path|
|
27
|
+
resource.resolve(relative_path)
|
45
28
|
end
|
29
|
+
ConfigHound.deep_merge_into(load(included_resources), raw_data)
|
46
30
|
end
|
47
31
|
|
48
32
|
end
|
@@ -10,8 +10,30 @@ module ConfigHound
|
|
10
10
|
#
|
11
11
|
class Resource
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
class << self
|
14
|
+
|
15
|
+
def [](arg)
|
16
|
+
return arg if arg.is_a?(Resource)
|
17
|
+
new(uri_for(arg))
|
18
|
+
end
|
19
|
+
|
20
|
+
private(:new)
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def uri_for(arg)
|
25
|
+
case arg
|
26
|
+
when URI
|
27
|
+
arg
|
28
|
+
when %r{^\w+:/}
|
29
|
+
URI(arg)
|
30
|
+
when %r{^/}
|
31
|
+
URI("file:#{arg}")
|
32
|
+
else
|
33
|
+
URI("file:#{File.expand_path(arg)}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
15
37
|
end
|
16
38
|
|
17
39
|
def to_s
|
@@ -19,7 +41,7 @@ module ConfigHound
|
|
19
41
|
end
|
20
42
|
|
21
43
|
def resolve(path)
|
22
|
-
|
44
|
+
Resource[uri + path]
|
23
45
|
end
|
24
46
|
|
25
47
|
def read
|
@@ -40,21 +62,12 @@ module ConfigHound
|
|
40
62
|
|
41
63
|
private
|
42
64
|
|
43
|
-
|
44
|
-
|
45
|
-
def uri_for(path)
|
46
|
-
case path
|
47
|
-
when URI
|
48
|
-
path
|
49
|
-
when %r{^\w+:/}
|
50
|
-
URI(path)
|
51
|
-
when %r{^/}
|
52
|
-
URI("file:#{path}")
|
53
|
-
else
|
54
|
-
URI("file:#{File.expand_path(path)}")
|
55
|
-
end
|
65
|
+
def initialize(uri)
|
66
|
+
@uri = uri
|
56
67
|
end
|
57
68
|
|
69
|
+
attr_reader :uri
|
70
|
+
|
58
71
|
end
|
59
72
|
|
60
73
|
end
|
data/lib/config_hound/version.rb
CHANGED
data/lib/config_hound.rb
CHANGED
@@ -0,0 +1,81 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
require "config_hound/deep_merge"
|
4
|
+
|
5
|
+
describe ConfigHound do
|
6
|
+
|
7
|
+
describe ".deep_merge_into" do
|
8
|
+
|
9
|
+
let(:result) { ConfigHound.deep_merge_into(v1, v2) }
|
10
|
+
|
11
|
+
context "with non-Hash arguments" do
|
12
|
+
|
13
|
+
let(:v1) { "a" }
|
14
|
+
let(:v2) { "b" }
|
15
|
+
|
16
|
+
it "takes the second value" do
|
17
|
+
expect(result).to eq("b")
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with independent keys" do
|
23
|
+
|
24
|
+
let(:v1) { {a: 1} }
|
25
|
+
let(:v2) { {b: 2} }
|
26
|
+
|
27
|
+
it "merges" do
|
28
|
+
expect(result).to eq(a: 1, b: 2)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when keys clash" do
|
34
|
+
|
35
|
+
let(:v1) { {x: 1} }
|
36
|
+
let(:v2) { {x: 2} }
|
37
|
+
|
38
|
+
it "takes the second value" do
|
39
|
+
expect(result).to eq(x: 2)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
context "with nested values" do
|
45
|
+
|
46
|
+
let(:v1) do
|
47
|
+
{
|
48
|
+
:foo => {
|
49
|
+
:bar => {
|
50
|
+
:x => 1
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
56
|
+
let(:v2) do
|
57
|
+
{
|
58
|
+
:foo => {
|
59
|
+
:bar => {
|
60
|
+
:y => 2
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
it "merges deeply" do
|
67
|
+
expect(result).to eq(
|
68
|
+
:foo => {
|
69
|
+
:bar => {
|
70
|
+
:x => 1,
|
71
|
+
:y => 2
|
72
|
+
}
|
73
|
+
}
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -4,11 +4,7 @@ require "config_hound"
|
|
4
4
|
|
5
5
|
describe ConfigHound do
|
6
6
|
|
7
|
-
|
8
|
-
ConfigHound.load(path)
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:config) { load(["fileA.yml", "fileB.yml"]) }
|
7
|
+
let(:config) { ConfigHound.load(["fileA.yml", "fileB.yml"]) }
|
12
8
|
|
13
9
|
given_resource "fileA.yml", %{
|
14
10
|
source: A
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: config_hound
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -53,10 +53,12 @@ files:
|
|
53
53
|
- Rakefile
|
54
54
|
- config_hound.gemspec
|
55
55
|
- lib/config_hound.rb
|
56
|
+
- lib/config_hound/deep_merge.rb
|
56
57
|
- lib/config_hound/loader.rb
|
57
58
|
- lib/config_hound/parser.rb
|
58
59
|
- lib/config_hound/resource.rb
|
59
60
|
- lib/config_hound/version.rb
|
61
|
+
- spec/config_hound/deep_merge_spec.rb
|
60
62
|
- spec/config_hound/resource_spec.rb
|
61
63
|
- spec/features/basics_spec.rb
|
62
64
|
- spec/features/include_spec.rb
|
@@ -82,11 +84,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
84
|
version: '0'
|
83
85
|
requirements: []
|
84
86
|
rubyforge_project:
|
85
|
-
rubygems_version: 2.4.
|
87
|
+
rubygems_version: 2.4.8
|
86
88
|
signing_key:
|
87
89
|
specification_version: 4
|
88
90
|
summary: Sniffs out config, wherever it may be.
|
89
91
|
test_files:
|
92
|
+
- spec/config_hound/deep_merge_spec.rb
|
90
93
|
- spec/config_hound/resource_spec.rb
|
91
94
|
- spec/features/basics_spec.rb
|
92
95
|
- spec/features/include_spec.rb
|