vagrant-config_builder 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODkzZWVlNDVkOGVjNWZjN2I0OWU0Zjg4OTllMTJjNmFhMGM5Y2Y0Zg==
5
+ data.tar.gz: !binary |-
6
+ Mzc0NzNmZmZhNzE5MzMwMWI1NzgzYTRjOTY5N2I1NzcwNzYzOWZhNQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ M2YzNjQ2NzNkY2M3ZjQyYTlkMTdiYWQ4YWU1YTNhZGRkNDE0NjAyMWY0NDM5
10
+ ZjU2NWQxYWQyNmU3MWUzYjkyZDllYWVhODU1MTM4MTk3YjVkMDVmMjUwNmVl
11
+ NDA1NTczNjhiMDM3ZmVjMTIxZjY1Yzg5OGE1MjE5M2VkMThlYmQ=
12
+ data.tar.gz: !binary |-
13
+ YjViZjQ1MDU0MmU3MTlkMzY3YzQ1YzlkMjlmMmI0NDQ2NmJiZGRjMGIyNjQz
14
+ YTc0OTI3NzFiNGQ1ZDBkZTZkNGNiZWEyMTlhZTIwMTA0N2VjMzA0YWU1NDY0
15
+ N2M5YzkxZGQyYTVlYmY2ZGNkMjUzMWYzYThmMDJlNjk1MmZhM2Y=
data/CHANGELOG CHANGED
@@ -1,6 +1,18 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 0.7.0
5
+ -----
6
+
7
+ 2014-03-19
8
+
9
+ This is a backwards compatible feature release.
10
+
11
+ * (GH-15) Deep merge data when loading configurations. This allows
12
+ individual top level keys to be split up between files.
13
+
14
+ Thanks to Charlie Sharpsteen creating this release.
15
+
4
16
  0.6.0
5
17
  -----
6
18
 
data/Gemfile CHANGED
@@ -8,3 +8,7 @@ group :development do
8
8
  # Vagrant environment itself using `vagrant plugin`.
9
9
  gem "vagrant", :git => "git://github.com/mitchellh/vagrant.git"
10
10
  end
11
+
12
+ if File.exists? "#{__FILE__}.local"
13
+ eval(File.read("#{__FILE__}.local"), binding)
14
+ end
@@ -1,4 +1,5 @@
1
1
  require 'yaml'
2
+ require 'deep_merge'
2
3
 
3
4
  class ConfigBuilder::Loader::YAML
4
5
 
@@ -23,7 +24,7 @@ class ConfigBuilder::Loader::YAML
23
24
  files.each do |file|
24
25
  contents = ::YAML.load_file(file)
25
26
  if contents.is_a? Hash
26
- rv.merge! contents
27
+ rv.deep_merge! contents
27
28
  end
28
29
  end
29
30
 
@@ -1,3 +1,3 @@
1
1
  module ConfigBuilder
2
- VERSION = '0.6.0'
2
+ VERSION = '0.7.0'
3
3
  end
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+
3
+ describe ConfigBuilder::Loader::YAML do
4
+ describe '#yamldir' do
5
+
6
+ before :each do
7
+ # Simulate directories of YAML files for the loader.
8
+ allow(File).to receive(:join).with('tst_dir_a', anything()).and_return('tst_dir_a')
9
+ allow(File).to receive(:join).with('tst_dir_b', anything()).and_return('tst_dir_b')
10
+
11
+ allow(Dir).to receive(:glob).with('tst_dir_a').and_return(['a/boxes.yaml', 'a/roles.yaml'])
12
+ allow(Dir).to receive(:glob).with('tst_dir_b').and_return(['b/boxes.yaml', 'b/roles.yaml'])
13
+
14
+ allow(::YAML).to receive(:load_file).with('a/boxes.yaml').and_return(::YAML.load <<-EOF)
15
+ ---
16
+ boxes:
17
+ 'box-a': 'http://puppet-vagrant-boxes.puppetlabs.com/'
18
+ EOF
19
+
20
+ allow(::YAML).to receive(:load_file).with('a/roles.yaml').and_return(::YAML.load <<-EOF)
21
+ ---
22
+ roles:
23
+ base:
24
+ private_networks:
25
+ - {ip: '0.0.0.0', auto_network: true}
26
+ EOF
27
+
28
+ allow(::YAML).to receive(:load_file).with('b/boxes.yaml').and_return(::YAML.load <<-EOF)
29
+ ---
30
+ boxes:
31
+ 'box-b': 'http://puppet-vagrant-boxes.puppetlabs.com/'
32
+ EOF
33
+
34
+ allow(::YAML).to receive(:load_file).with('b/roles.yaml').and_return(::YAML.load <<-EOF)
35
+ ---
36
+ roles:
37
+ base:
38
+ private_networks:
39
+ - {ip: '10.0.0.1'}
40
+ EOF
41
+ end
42
+
43
+
44
+ it 'loads from single directories' do
45
+ subject.yamldir('tst_dir_a')
46
+
47
+ expect(::YAML).to have_received(:load_file).exactly(2).times
48
+ end
49
+
50
+ it 'loads from multiple directories' do
51
+ subject.yamldir(['tst_dir_a', 'tst_dir_b'])
52
+
53
+ expect(::YAML).to have_received(:load_file).exactly(4).times
54
+ end
55
+
56
+ it 'merges separate hashes' do
57
+ config = subject.yamldir('tst_dir_a')
58
+
59
+ expect(config).to have_key('boxes')
60
+ expect(config).to have_key('roles')
61
+ end
62
+
63
+ describe 'when merging overlapping configs' do
64
+ let(:config) { subject.yamldir(['tst_dir_a', 'tst_dir_b']) }
65
+
66
+ it 'merges subhashes' do
67
+ expect(config['boxes']).to have_key('box-a')
68
+ expect(config['boxes']).to have_key('box-b')
69
+ end
70
+
71
+ it 'concatenates subarrays' do
72
+ expect(config['roles']['base']['private_networks']).to have(2).items
73
+ end
74
+ end
75
+ end
76
+ end
@@ -17,5 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.files = %x{git ls-files -z}.split("\0")
18
18
  gem.require_path = 'lib'
19
19
 
20
+ gem.add_runtime_dependency 'deep_merge', '~> 1.0.0'
21
+
20
22
  gem.add_development_dependency 'rspec', '~> 2.14.0'
21
23
  end
metadata CHANGED
@@ -1,20 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-config_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
5
- prerelease:
4
+ version: 0.7.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Adrien Thebo
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-17 00:00:00.000000000 Z
11
+ date: 2014-03-19 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: deep_merge
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: rspec
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
31
  - - ~>
20
32
  - !ruby/object:Gem::Version
@@ -22,7 +34,6 @@ dependencies:
22
34
  type: :development
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
38
  - - ~>
28
39
  - !ruby/object:Gem::Version
@@ -69,33 +80,33 @@ files:
69
80
  - lib/vagrant-config_builder.rb
70
81
  - spec/config_builder/filter/boxes_spec.rb
71
82
  - spec/config_builder/filter/roles_spec.rb
83
+ - spec/config_builder/loader/yaml_spec.rb
72
84
  - spec/spec_helper.rb
73
85
  - templates/locales/en.yml
74
86
  - vagrant-config_builder.gemspec
75
87
  homepage: https://github.com/adrienthebo/vagrant-config_builder
76
88
  licenses:
77
89
  - Apache 2.0
90
+ metadata: {}
78
91
  post_install_message:
79
92
  rdoc_options: []
80
93
  require_paths:
81
94
  - lib
82
95
  required_ruby_version: !ruby/object:Gem::Requirement
83
- none: false
84
96
  requirements:
85
97
  - - ! '>='
86
98
  - !ruby/object:Gem::Version
87
99
  version: '0'
88
100
  required_rubygems_version: !ruby/object:Gem::Requirement
89
- none: false
90
101
  requirements:
91
102
  - - ! '>='
92
103
  - !ruby/object:Gem::Version
93
104
  version: '0'
94
105
  requirements: []
95
106
  rubyforge_project:
96
- rubygems_version: 1.8.23
107
+ rubygems_version: 2.2.1
97
108
  signing_key:
98
- specification_version: 3
109
+ specification_version: 4
99
110
  summary: Generate Vagrant configurations from arbitrary data
100
111
  test_files: []
101
112
  has_rdoc: true