berkshelf 3.1.5 → 3.2.0

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