berkshelf 3.1.5 → 3.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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/berkshelf.gemspec +6 -5
  4. data/features/commands/search.feature +2 -2
  5. data/features/commands/vendor.feature +6 -2
  6. data/features/commands/verify.feature +29 -0
  7. data/features/config.feature +13 -48
  8. data/features/step_definitions/filesystem_steps.rb +2 -2
  9. data/features/step_definitions/gem_steps.rb +3 -1
  10. data/features/step_definitions/utility_steps.rb +2 -2
  11. data/generator_files/Vagrantfile.erb +30 -30
  12. data/generator_files/metadata.rb.erb +0 -1
  13. data/lib/berkshelf.rb +5 -2
  14. data/lib/berkshelf/berksfile.rb +41 -41
  15. data/lib/berkshelf/cli.rb +11 -1
  16. data/lib/berkshelf/community_rest.rb +1 -0
  17. data/lib/berkshelf/config.rb +18 -4
  18. data/lib/berkshelf/cookbook_store.rb +1 -1
  19. data/lib/berkshelf/downloader.rb +4 -0
  20. data/lib/berkshelf/errors.rb +0 -1
  21. data/lib/berkshelf/file_syncer.rb +134 -0
  22. data/lib/berkshelf/locations/base.rb +6 -1
  23. data/lib/berkshelf/locations/git.rb +2 -2
  24. data/lib/berkshelf/lockfile.rb +14 -2
  25. data/lib/berkshelf/uploader.rb +10 -17
  26. data/lib/berkshelf/validator.rb +37 -0
  27. data/lib/berkshelf/version.rb +1 -1
  28. data/lib/berkshelf/visualizer.rb +13 -6
  29. data/spec/spec_helper.rb +1 -1
  30. data/spec/support/kitchen.rb +3 -1
  31. data/spec/support/matchers/file_system_matchers.rb +1 -1
  32. data/spec/support/matchers/filepath_matchers.rb +38 -2
  33. data/spec/support/shared_examples/formatter.rb +7 -7
  34. data/spec/unit/berkshelf/berksfile_spec.rb +51 -21
  35. data/spec/unit/berkshelf/cached_cookbook_spec.rb +5 -5
  36. data/spec/unit/berkshelf/cli_spec.rb +1 -1
  37. data/spec/unit/berkshelf/community_rest_spec.rb +12 -12
  38. data/spec/unit/berkshelf/config_spec.rb +4 -4
  39. data/spec/unit/berkshelf/cookbook_generator_spec.rb +2 -2
  40. data/spec/unit/berkshelf/cookbook_store_spec.rb +6 -6
  41. data/spec/unit/berkshelf/core_ext/file_utils_spec.rb +3 -3
  42. data/spec/unit/berkshelf/core_ext/pathname_spec.rb +23 -6
  43. data/spec/unit/berkshelf/dependency_spec.rb +4 -4
  44. data/spec/unit/berkshelf/downloader_spec.rb +5 -1
  45. data/spec/unit/berkshelf/errors_spec.rb +1 -1
  46. data/spec/unit/berkshelf/file_syncer_spec.rb +206 -0
  47. data/spec/unit/berkshelf/init_generator_spec.rb +19 -22
  48. data/spec/unit/berkshelf/installer_spec.rb +6 -6
  49. data/spec/unit/berkshelf/locations/base_spec.rb +17 -8
  50. data/spec/unit/berkshelf/locations/git_spec.rb +34 -34
  51. data/spec/unit/berkshelf/locations/path_spec.rb +3 -3
  52. data/spec/unit/berkshelf/lockfile_parser_spec.rb +1 -1
  53. data/spec/unit/berkshelf/lockfile_spec.rb +50 -36
  54. data/spec/unit/berkshelf/packager_spec.rb +6 -4
  55. data/spec/unit/berkshelf/resolver/graph_spec.rb +3 -3
  56. data/spec/unit/berkshelf/resolver_spec.rb +3 -3
  57. data/spec/unit/berkshelf/shell_spec.rb +30 -24
  58. data/spec/unit/berkshelf/uploader_spec.rb +10 -36
  59. data/spec/unit/berkshelf/validator_spec.rb +30 -0
  60. data/spec/unit/berkshelf/visualizer_spec.rb +17 -2
  61. metadata +34 -15
  62. data/lib/berkshelf/mixin/dsl_eval.rb +0 -58
  63. data/spec/unit/berkshelf/mixin/dsl_eval_spec.rb +0 -55
@@ -4,14 +4,16 @@ describe Berkshelf::Packager do
4
4
  let(:target) { tmp_path.join("cookbooks.tar.gz").to_s }
5
5
  subject { described_class.new(target) }
6
6
 
7
- its(:out_file) { should eql(target) }
7
+ it 'has the correct out_file' do
8
+ expect(subject.out_file).to eq(target)
9
+ end
8
10
 
9
11
  describe "#run" do
10
12
  let(:cookbooks) { fixtures_path.join("cookbooks") }
11
13
 
12
14
  it "writes a tar to the #out_file" do
13
15
  subject.run(cookbooks)
14
- expect(File.exist?(subject.out_file)).to be_true
16
+ expect(File.exist?(subject.out_file)).to be(true)
15
17
  end
16
18
  end
17
19
 
@@ -19,7 +21,7 @@ describe Berkshelf::Packager do
19
21
  let(:out_dir) { File.dirname(target) }
20
22
 
21
23
  context "when the out_file's directory is not writable" do
22
- before { File.stub(:directory?).with(out_dir).and_return(false) }
24
+ before { allow(File).to receive(:directory?).with(out_dir).and_return(false) }
23
25
 
24
26
  it "raises an error" do
25
27
  expect { subject.validate! }.to raise_error(Berkshelf::PackageError,
@@ -28,7 +30,7 @@ describe Berkshelf::Packager do
28
30
  end
29
31
 
30
32
  context "when the out_file's directory is not a directory" do
31
- before { File.stub(:writable?).with(out_dir).and_return(false) }
33
+ before { allow(File).to receive(:writable?).with(out_dir).and_return(false) }
32
34
 
33
35
  it "raises an error" do
34
36
  expect { subject.validate! }.to raise_error(Berkshelf::PackageError,
@@ -14,12 +14,12 @@ describe Berkshelf::Resolver::Graph, :not_supported_on_windows do
14
14
 
15
15
  it "adds each dependency to the graph" do
16
16
  subject.populate(sources)
17
- expect(subject.artifacts).to have(3).items
17
+ expect(subject.artifacts.size).to eq(3)
18
18
  end
19
19
 
20
20
  it "adds the dependencies of each dependency to the graph" do
21
21
  subject.populate(sources)
22
- expect(subject.artifact("ruby", "1.0.0").dependencies).to have(1).item
22
+ expect(subject.artifact("ruby", "1.0.0").dependencies.size).to eq(1)
23
23
  end
24
24
  end
25
25
 
@@ -38,7 +38,7 @@ describe Berkshelf::Resolver::Graph, :not_supported_on_windows do
38
38
  end
39
39
 
40
40
  it "contains the entire universe of dependencies" do
41
- expect(subject.universe(sources)).to have(2).items
41
+ expect(subject.universe(sources).size).to eq(2)
42
42
  end
43
43
  end
44
44
  end
@@ -22,7 +22,7 @@ describe Berkshelf::Resolver do
22
22
  end
23
23
 
24
24
  it 'raises a DuplicateDemand exception if a demand of the same name is added' do
25
- subject.should_receive(:has_demand?).with(demand).and_return(true)
25
+ expect(subject).to receive(:has_demand?).with(demand).and_return(true)
26
26
 
27
27
  expect {
28
28
  subject.add_demand(demand)
@@ -50,11 +50,11 @@ describe Berkshelf::Resolver do
50
50
  before { subject.add_demand(demand) }
51
51
 
52
52
  it 'returns true if the demand exists' do
53
- expect(subject.has_demand?(demand.name)).to be_true
53
+ expect(subject.has_demand?(demand.name)).to be(true)
54
54
  end
55
55
 
56
56
  it 'returns false if the demand does not exist' do
57
- expect(subject.has_demand?('non-existent')).to be_false
57
+ expect(subject.has_demand?('non-existent')).to be(false)
58
58
  end
59
59
  end
60
60
 
@@ -6,44 +6,48 @@ module Berkshelf
6
6
  let(:stderr) { double('stderr') }
7
7
 
8
8
  before do
9
- described_class.any_instance.stub(:stdout).and_return(stdout)
10
- described_class.any_instance.stub(:stderr).and_return(stderr)
9
+ allow_any_instance_of(described_class).to receive(:stdout)
10
+ .and_return(stdout)
11
+
12
+ allow_any_instance_of(described_class).to receive(:stderr)
13
+ .and_return(stderr)
11
14
  end
12
15
 
13
16
  describe '#mute!' do
14
17
  it 'sets @mute to true' do
15
18
  subject.mute!
16
- expect(subject.instance_variable_get(:@mute)).to be_true
19
+ expect(subject.instance_variable_get(:@mute)).to be(true)
17
20
  end
18
21
  end
19
22
 
20
23
  describe '#unmute!' do
21
24
  it 'sets @mute to false' do
22
25
  subject.unmute!
23
- expect(subject.instance_variable_get(:@mute)).to be_false
26
+ expect(subject.instance_variable_get(:@mute)).to be(false)
24
27
  end
25
28
  end
26
29
 
27
30
  describe '#say' do
28
31
  context 'when quiet?' do
29
32
  before do
30
- subject.stub(:quiet?).and_return(true)
33
+ allow(subject).to receive(:quiet?).and_return(true)
31
34
  end
32
35
 
33
36
  it 'does not output anything', :not_supported_on_windows do
34
- stdout.should_not_receive(:print)
37
+ expect(stdout).to_not receive(:print)
38
+ expect(stdout).to_not receive(:puts)
35
39
  subject.say 'message'
36
40
  end
37
41
  end
38
42
 
39
43
  context 'with not quiet?' do
40
44
  before do
41
- subject.stub(:quiet?).and_return(false)
45
+ allow(subject).to receive(:quiet?).and_return(false)
42
46
  end
43
47
 
44
48
  it 'prints to stdout' do
45
- stdout.should_receive(:print).once
46
- stdout.should_receive(:flush).with(no_args())
49
+ expect(stdout).to receive(:print).once
50
+ expect(stdout).to receive(:flush).once
47
51
  subject.say 'message'
48
52
  end
49
53
  end
@@ -52,23 +56,24 @@ module Berkshelf
52
56
  describe '#say_status' do
53
57
  context 'when quiet?' do
54
58
  before do
55
- subject.stub(:quiet?).and_return(true)
59
+ allow(subject).to receive(:quiet?).and_return(true)
56
60
  end
57
61
 
58
62
  it 'does not output anything' do
59
- stdout.should_not_receive(:puts)
63
+ expect(stdout).to_not receive(:print)
64
+ expect(stdout).to_not receive(:puts)
60
65
  subject.say_status 5, 'message'
61
66
  end
62
67
  end
63
68
 
64
69
  context 'with not quiet?' do
65
70
  before do
66
- subject.stub(:quiet?).and_return(false)
71
+ allow(subject).to receive(:quiet?).and_return(false)
67
72
  end
68
73
 
69
74
  it 'prints to stdout' do
70
- stdout.should_receive(:print).once
71
- stdout.should_receive(:flush).with(no_args())
75
+ expect(stdout).to receive(:print).once
76
+ expect(stdout).to receive(:flush).once
72
77
  subject.say_status 5, 'message'
73
78
  end
74
79
  end
@@ -77,23 +82,24 @@ module Berkshelf
77
82
  describe '#warn' do
78
83
  context 'when quiet?' do
79
84
  before do
80
- subject.stub(:quiet?).and_return(true)
85
+ allow(subject).to receive(:quiet?).and_return(true)
81
86
  end
82
87
 
83
88
  it 'does not output anything' do
84
- stdout.should_not_receive(:print)
89
+ expect(stdout).to_not receive(:print)
90
+ expect(stdout).to_not receive(:puts)
85
91
  subject.warn 'warning'
86
92
  end
87
93
  end
88
94
 
89
95
  context 'with not quiet?' do
90
96
  before do
91
- subject.stub(:quiet?).and_return(false)
97
+ allow(subject).to receive(:quiet?).and_return(false)
92
98
  end
93
99
 
94
100
  it 'calls #say with yellow coloring' do
95
- stdout.should_receive(:print)
96
- stdout.should_receive(:flush).with(no_args())
101
+ expect(stdout).to receive(:print).once
102
+ expect(stdout).to receive(:flush).once
97
103
  subject.warn 'warning'
98
104
  end
99
105
  end
@@ -102,26 +108,26 @@ module Berkshelf
102
108
  context '#error' do
103
109
  context 'when quiet?' do
104
110
  before do
105
- subject.stub(:quiet?).and_return(true)
111
+ allow(subject).to receive(:quiet?).and_return(true)
106
112
  end
107
113
 
108
114
  it "outputs an error message", :not_supported_on_windows do
109
- stderr.should_receive(:puts)
115
+ expect(stderr).to receive(:puts)
110
116
  subject.error 'error!'
111
117
  end
112
118
  end
113
119
 
114
120
  context 'with not quiet?' do
115
121
  before do
116
- subject.stub(:quiet?).and_return(false)
122
+ allow(subject).to receive(:quiet?).and_return(false)
117
123
  end
118
124
 
119
125
  it 'prints to stderr' do
120
- stderr.should_receive(:puts).with(windows? ? "error!" : "\e[31merror!\e[0m")
126
+ expect(stderr).to receive(:puts)
127
+ .with(windows? ? "error!" : "\e[31merror!\e[0m")
121
128
  subject.error 'error!'
122
129
  end
123
130
  end
124
131
  end
125
132
  end
126
-
127
133
  end
@@ -33,8 +33,8 @@ module Berkshelf
33
33
  it 'saves the options' do
34
34
  instance = Uploader.new(berksfile, force: true, validate: false)
35
35
  options = instance.options
36
- expect(options[:force]).to be_true
37
- expect(options[:validate]).to be_false
36
+ expect(options[:force]).to be(true)
37
+ expect(options[:validate]).to be(false)
38
38
  end
39
39
 
40
40
  it 'saves the names' do
@@ -43,35 +43,6 @@ module Berkshelf
43
43
  end
44
44
  end
45
45
 
46
- describe '#validate_files!' do
47
- before { Uploader.send(:public, :validate_files!) }
48
-
49
- let(:cookbook) { double('cookbook', cookbook_name: 'cookbook', path: 'path') }
50
-
51
- it 'raises an error when the cookbook has spaces in the files' do
52
- Dir.stub(:glob).and_return(['/there are/spaces/in this/recipes/default.rb'])
53
- expect {
54
- subject.validate_files!(cookbook)
55
- }.to raise_error
56
- end
57
-
58
- it 'does not raise an error when the cookbook is valid' do
59
- Dir.stub(:glob).and_return(['/there-are/no-spaces/in-this/recipes/default.rb'])
60
- expect {
61
- subject.validate_files!(cookbook)
62
- }.to_not raise_error
63
- end
64
-
65
- it 'does not raise an exception with spaces in the path' do
66
- Dir.stub(:glob).and_return(['/there are/spaces/in this/recipes/default.rb'])
67
- Pathname.any_instance.stub(:dirname).and_return('/there are/spaces/in this')
68
-
69
- expect {
70
- subject.validate_files!(cookbook)
71
- }.to_not raise_error
72
- end
73
- end
74
-
75
46
  describe '#run' do
76
47
  let(:options) { Hash.new }
77
48
 
@@ -85,13 +56,16 @@ module Berkshelf
85
56
  cookbook_copyright: 'user',
86
57
  cookbook_email: 'user@example.com',
87
58
  cookbook_license: 'apachev2',
59
+ knife: {
60
+ chef_guard: false
61
+ }
88
62
  )
89
63
  end
90
64
 
91
65
  let(:berkshelf_config) do
92
66
  double(Config,
93
67
  ssl: double(verify: true),
94
- chef: chef_config,
68
+ chef: chef_config
95
69
  )
96
70
  end
97
71
 
@@ -106,11 +80,11 @@ module Berkshelf
106
80
  end
107
81
 
108
82
  before do
109
- Berkshelf.stub(:config).and_return(berkshelf_config)
83
+ allow(Berkshelf).to receive(:config).and_return(berkshelf_config)
110
84
  end
111
85
 
112
86
  context 'when there is no value for :chef_server_url' do
113
- before { chef_config.stub(chef_server_url: nil) }
87
+ before { allow(chef_config).to receive_messages(chef_server_url: nil) }
114
88
  let(:message) { 'Missing required attribute in your Berkshelf configuration: chef.server_url' }
115
89
 
116
90
  it 'raises an error' do
@@ -119,7 +93,7 @@ module Berkshelf
119
93
  end
120
94
 
121
95
  context 'when there is no value for :client_name' do
122
- before { chef_config.stub(node_name: nil) }
96
+ before { allow(chef_config).to receive_messages(node_name: nil) }
123
97
  let(:message) { 'Missing required attribute in your Berkshelf configuration: chef.node_name' }
124
98
 
125
99
  it 'raises an error' do
@@ -128,7 +102,7 @@ module Berkshelf
128
102
  end
129
103
 
130
104
  context 'when there is no value for :client_key' do
131
- before { chef_config.stub(client_key: nil) }
105
+ before { allow(chef_config).to receive_messages(client_key: nil) }
132
106
  let(:message) { 'Missing required attribute in your Berkshelf configuration: chef.client_key' }
133
107
 
134
108
  it 'raises an error' do
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::Validator do
4
+ describe '#validate_files' do
5
+ let(:cookbook) { double('cookbook', cookbook_name: 'cookbook', path: 'path') }
6
+
7
+ it 'raises an error when the cookbook has spaces in the files' do
8
+ allow(Dir).to receive(:glob).and_return(['/there are/spaces/in this/recipes/default.rb'])
9
+ expect {
10
+ subject.validate_files(cookbook)
11
+ }.to raise_error
12
+ end
13
+
14
+ it 'does not raise an error when the cookbook is valid' do
15
+ allow(Dir).to receive(:glob).and_return(['/there-are/no-spaces/in-this/recipes/default.rb'])
16
+ expect {
17
+ subject.validate_files(cookbook)
18
+ }.to_not raise_error
19
+ end
20
+
21
+ it 'does not raise an exception with spaces in the path' do
22
+ allow(Dir).to receive(:glob).and_return(['/there are/spaces/in this/recipes/default.rb'])
23
+ allow_any_instance_of(Pathname).to receive(:dirname).and_return('/there are/spaces/in this')
24
+
25
+ expect {
26
+ subject.validate_files(cookbook)
27
+ }.to_not raise_error
28
+ end
29
+ end
30
+ end
@@ -1,3 +1,4 @@
1
+ require 'rspec'
1
2
  require 'spec_helper'
2
3
 
3
4
  module Berkshelf
@@ -5,9 +6,12 @@ module Berkshelf
5
6
  describe '#to_png' do
6
7
  context 'when graphviz is not installed' do
7
8
  before do
8
- Berkshelf.stub(:which)
9
+ allow(Berkshelf).to receive(:which)
9
10
  .with('dot')
10
11
  .and_return(nil)
12
+ allow(Berkshelf).to receive(:which)
13
+ .with('dot.exe')
14
+ .and_return(nil)
11
15
  end
12
16
 
13
17
  it 'raises a GraphvizNotInstalled exception' do
@@ -18,13 +22,24 @@ module Berkshelf
18
22
  context 'when the graphviz command fails', :graphviz do
19
23
  before do
20
24
  response = double(success?: false, stderr: 'Something happened!')
21
- subject.stub(:shell_out).and_return(response)
25
+ allow(subject).to receive(:shell_out).and_return(response)
22
26
  end
23
27
 
24
28
  it 'raises a GraphvizCommandFailed exception' do
25
29
  expect { subject.to_png }.to raise_error(GraphvizCommandFailed)
26
30
  end
27
31
  end
32
+
33
+ context 'when the graphviz command succeeds', :graphviz do
34
+ it 'builds a png from a Lockfile' do
35
+ outfile = tmp_path.join('test-graph.png').to_s
36
+ lockfile = Lockfile.from_file(fixtures_path.join('lockfiles/default.lock').to_s)
37
+
38
+ Visualizer.from_lockfile(lockfile).to_png(outfile)
39
+
40
+ expect(File.exists?(outfile)).to be true
41
+ end
42
+ end
28
43
  end
29
44
  end
30
45
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkshelf
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.5
4
+ version: 3.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Winsor
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2014-08-01 00:00:00.000000000 Z
15
+ date: 2014-10-29 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: addressable
@@ -84,6 +84,20 @@ dependencies:
84
84
  - - "~>"
85
85
  - !ruby/object:Gem::Version
86
86
  version: '0.1'
87
+ - !ruby/object:Gem::Dependency
88
+ name: cleanroom
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.0'
94
+ type: :runtime
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '1.0'
87
101
  - !ruby/object:Gem::Dependency
88
102
  name: faraday
89
103
  requirement: !ruby/object:Gem::Requirement
@@ -160,14 +174,14 @@ dependencies:
160
174
  requirements:
161
175
  - - "~>"
162
176
  - !ruby/object:Gem::Version
163
- version: '0.18'
177
+ version: '0.19'
164
178
  type: :runtime
165
179
  prerelease: false
166
180
  version_requirements: !ruby/object:Gem::Requirement
167
181
  requirements:
168
182
  - - "~>"
169
183
  - !ruby/object:Gem::Version
170
- version: '0.18'
184
+ version: '0.19'
171
185
  - !ruby/object:Gem::Dependency
172
186
  name: octokit
173
187
  requirement: !ruby/object:Gem::Requirement
@@ -188,42 +202,42 @@ dependencies:
188
202
  requirements:
189
203
  - - "~>"
190
204
  - !ruby/object:Gem::Version
191
- version: 0.16.0.pre
205
+ version: 0.16.0
192
206
  type: :runtime
193
207
  prerelease: false
194
208
  version_requirements: !ruby/object:Gem::Requirement
195
209
  requirements:
196
210
  - - "~>"
197
211
  - !ruby/object:Gem::Version
198
- version: 0.16.0.pre
212
+ version: 0.16.0
199
213
  - !ruby/object:Gem::Dependency
200
214
  name: celluloid-io
201
215
  requirement: !ruby/object:Gem::Requirement
202
216
  requirements:
203
217
  - - "~>"
204
218
  - !ruby/object:Gem::Version
205
- version: 0.16.0.pre
219
+ version: 0.16.1
206
220
  type: :runtime
207
221
  prerelease: false
208
222
  version_requirements: !ruby/object:Gem::Requirement
209
223
  requirements:
210
224
  - - "~>"
211
225
  - !ruby/object:Gem::Version
212
- version: 0.16.0.pre
226
+ version: 0.16.1
213
227
  - !ruby/object:Gem::Dependency
214
228
  name: aruba
215
229
  requirement: !ruby/object:Gem::Requirement
216
230
  requirements:
217
231
  - - "~>"
218
232
  - !ruby/object:Gem::Version
219
- version: '0.5'
233
+ version: '0.6'
220
234
  type: :development
221
235
  prerelease: false
222
236
  version_requirements: !ruby/object:Gem::Requirement
223
237
  requirements:
224
238
  - - "~>"
225
239
  - !ruby/object:Gem::Version
226
- version: '0.5'
240
+ version: '0.6'
227
241
  - !ruby/object:Gem::Dependency
228
242
  name: chef-zero
229
243
  requirement: !ruby/object:Gem::Requirement
@@ -272,14 +286,14 @@ dependencies:
272
286
  requirements:
273
287
  - - "~>"
274
288
  - !ruby/object:Gem::Version
275
- version: '2.13'
289
+ version: '3.0'
276
290
  type: :development
277
291
  prerelease: false
278
292
  version_requirements: !ruby/object:Gem::Requirement
279
293
  requirements:
280
294
  - - "~>"
281
295
  - !ruby/object:Gem::Version
282
- version: '2.13'
296
+ version: '3.0'
283
297
  - !ruby/object:Gem::Dependency
284
298
  name: spork
285
299
  requirement: !ruby/object:Gem::Requirement
@@ -378,6 +392,7 @@ files:
378
392
  - features/commands/update.feature
379
393
  - features/commands/upload.feature
380
394
  - features/commands/vendor.feature
395
+ - features/commands/verify.feature
381
396
  - features/commands/viz.feature
382
397
  - features/community_site.feature
383
398
  - features/config.feature
@@ -433,6 +448,7 @@ files:
433
448
  - lib/berkshelf/dependency.rb
434
449
  - lib/berkshelf/downloader.rb
435
450
  - lib/berkshelf/errors.rb
451
+ - lib/berkshelf/file_syncer.rb
436
452
  - lib/berkshelf/formatters/base.rb
437
453
  - lib/berkshelf/formatters/human.rb
438
454
  - lib/berkshelf/formatters/json.rb
@@ -446,7 +462,6 @@ files:
446
462
  - lib/berkshelf/locations/path.rb
447
463
  - lib/berkshelf/lockfile.rb
448
464
  - lib/berkshelf/logger.rb
449
- - lib/berkshelf/mixin/dsl_eval.rb
450
465
  - lib/berkshelf/mixin/git.rb
451
466
  - lib/berkshelf/mixin/logging.rb
452
467
  - lib/berkshelf/packager.rb
@@ -459,6 +474,7 @@ files:
459
474
  - lib/berkshelf/thor_ext.rb
460
475
  - lib/berkshelf/thor_ext/hash_with_indifferent_access.rb
461
476
  - lib/berkshelf/uploader.rb
477
+ - lib/berkshelf/validator.rb
462
478
  - lib/berkshelf/version.rb
463
479
  - lib/berkshelf/visualizer.rb
464
480
  - spec/config/berkshelf.pem
@@ -500,6 +516,7 @@ files:
500
516
  - spec/unit/berkshelf/dependency_spec.rb
501
517
  - spec/unit/berkshelf/downloader_spec.rb
502
518
  - spec/unit/berkshelf/errors_spec.rb
519
+ - spec/unit/berkshelf/file_syncer_spec.rb
503
520
  - spec/unit/berkshelf/formatters/base_spec.rb
504
521
  - spec/unit/berkshelf/formatters/human_spec.rb
505
522
  - spec/unit/berkshelf/formatters/json_spec.rb
@@ -513,7 +530,6 @@ files:
513
530
  - spec/unit/berkshelf/lockfile_parser_spec.rb
514
531
  - spec/unit/berkshelf/lockfile_spec.rb
515
532
  - spec/unit/berkshelf/logger_spec.rb
516
- - spec/unit/berkshelf/mixin/dsl_eval_spec.rb
517
533
  - spec/unit/berkshelf/mixin/logging_spec.rb
518
534
  - spec/unit/berkshelf/packager_spec.rb
519
535
  - spec/unit/berkshelf/resolver/graph_spec.rb
@@ -522,6 +538,7 @@ files:
522
538
  - spec/unit/berkshelf/source_spec.rb
523
539
  - spec/unit/berkshelf/source_uri_spec.rb
524
540
  - spec/unit/berkshelf/uploader_spec.rb
541
+ - spec/unit/berkshelf/validator_spec.rb
525
542
  - spec/unit/berkshelf/visualizer_spec.rb
526
543
  - spec/unit/berkshelf_spec.rb
527
544
  homepage: http://berkshelf.com
@@ -567,6 +584,7 @@ test_files:
567
584
  - features/commands/update.feature
568
585
  - features/commands/upload.feature
569
586
  - features/commands/vendor.feature
587
+ - features/commands/verify.feature
570
588
  - features/commands/viz.feature
571
589
  - features/community_site.feature
572
590
  - features/config.feature
@@ -625,6 +643,7 @@ test_files:
625
643
  - spec/unit/berkshelf/dependency_spec.rb
626
644
  - spec/unit/berkshelf/downloader_spec.rb
627
645
  - spec/unit/berkshelf/errors_spec.rb
646
+ - spec/unit/berkshelf/file_syncer_spec.rb
628
647
  - spec/unit/berkshelf/formatters/base_spec.rb
629
648
  - spec/unit/berkshelf/formatters/human_spec.rb
630
649
  - spec/unit/berkshelf/formatters/json_spec.rb
@@ -638,7 +657,6 @@ test_files:
638
657
  - spec/unit/berkshelf/lockfile_parser_spec.rb
639
658
  - spec/unit/berkshelf/lockfile_spec.rb
640
659
  - spec/unit/berkshelf/logger_spec.rb
641
- - spec/unit/berkshelf/mixin/dsl_eval_spec.rb
642
660
  - spec/unit/berkshelf/mixin/logging_spec.rb
643
661
  - spec/unit/berkshelf/packager_spec.rb
644
662
  - spec/unit/berkshelf/resolver/graph_spec.rb
@@ -647,6 +665,7 @@ test_files:
647
665
  - spec/unit/berkshelf/source_spec.rb
648
666
  - spec/unit/berkshelf/source_uri_spec.rb
649
667
  - spec/unit/berkshelf/uploader_spec.rb
668
+ - spec/unit/berkshelf/validator_spec.rb
650
669
  - spec/unit/berkshelf/visualizer_spec.rb
651
670
  - spec/unit/berkshelf_spec.rb
652
671
  has_rdoc: