berkshelf 0.1.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.
Files changed (93) hide show
  1. data/.gitignore +20 -0
  2. data/.rbenv-version +1 -0
  3. data/Gemfile +3 -0
  4. data/Guardfile +23 -0
  5. data/LICENSE +22 -0
  6. data/README.rdoc +102 -0
  7. data/Thorfile +47 -0
  8. data/berkshelf.gemspec +39 -0
  9. data/features/config.sample.yml +3 -0
  10. data/features/init_command.feature +40 -0
  11. data/features/install.feature +55 -0
  12. data/features/lockfile.feature +22 -0
  13. data/features/step_definitions/chef_server_steps.rb +13 -0
  14. data/features/step_definitions/cli_steps.rb +56 -0
  15. data/features/step_definitions/filesystem_steps.rb +79 -0
  16. data/features/support/env.rb +55 -0
  17. data/features/update.feature +23 -0
  18. data/features/upload_command.feature +43 -0
  19. data/features/without.feature +25 -0
  20. data/lib/berkshelf.rb +90 -0
  21. data/lib/berkshelf/berksfile.rb +170 -0
  22. data/lib/berkshelf/cached_cookbook.rb +253 -0
  23. data/lib/berkshelf/cookbook_source.rb +139 -0
  24. data/lib/berkshelf/cookbook_source/git_location.rb +54 -0
  25. data/lib/berkshelf/cookbook_source/path_location.rb +27 -0
  26. data/lib/berkshelf/cookbook_source/site_location.rb +206 -0
  27. data/lib/berkshelf/cookbook_store.rb +77 -0
  28. data/lib/berkshelf/core_ext.rb +3 -0
  29. data/lib/berkshelf/core_ext/file.rb +14 -0
  30. data/lib/berkshelf/core_ext/kernel.rb +33 -0
  31. data/lib/berkshelf/core_ext/pathname.rb +24 -0
  32. data/lib/berkshelf/downloader.rb +92 -0
  33. data/lib/berkshelf/dsl.rb +39 -0
  34. data/lib/berkshelf/errors.rb +20 -0
  35. data/lib/berkshelf/generator_files/Berksfile.erb +3 -0
  36. data/lib/berkshelf/generator_files/chefignore +44 -0
  37. data/lib/berkshelf/git.rb +70 -0
  38. data/lib/berkshelf/init_generator.rb +38 -0
  39. data/lib/berkshelf/lockfile.rb +42 -0
  40. data/lib/berkshelf/resolver.rb +176 -0
  41. data/lib/berkshelf/tx_result.rb +12 -0
  42. data/lib/berkshelf/tx_result_set.rb +37 -0
  43. data/lib/berkshelf/uploader.rb +153 -0
  44. data/lib/berkshelf/version.rb +3 -0
  45. data/lib/chef/knife/berks_init.rb +29 -0
  46. data/lib/chef/knife/berks_install.rb +27 -0
  47. data/lib/chef/knife/berks_update.rb +23 -0
  48. data/lib/chef/knife/berks_upload.rb +39 -0
  49. data/spec/fixtures/Berksfile +3 -0
  50. data/spec/fixtures/cookbooks/example_cookbook-0.5.0/README.md +12 -0
  51. data/spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb +6 -0
  52. data/spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb +8 -0
  53. data/spec/fixtures/cookbooks/example_cookbook/README.md +12 -0
  54. data/spec/fixtures/cookbooks/example_cookbook/metadata.rb +6 -0
  55. data/spec/fixtures/cookbooks/example_cookbook/recipes/default.rb +8 -0
  56. data/spec/fixtures/cookbooks/invalid_ruby_files-1.0.0/recipes/default.rb +1 -0
  57. data/spec/fixtures/cookbooks/invalid_template_files-1.0.0/templates/default/broken.erb +1 -0
  58. data/spec/fixtures/cookbooks/nginx-0.100.5/README.md +77 -0
  59. data/spec/fixtures/cookbooks/nginx-0.100.5/attributes/default.rb +65 -0
  60. data/spec/fixtures/cookbooks/nginx-0.100.5/definitions/nginx_site.rb +35 -0
  61. data/spec/fixtures/cookbooks/nginx-0.100.5/files/default/mime.types +73 -0
  62. data/spec/fixtures/cookbooks/nginx-0.100.5/files/ubuntu/mime.types +73 -0
  63. data/spec/fixtures/cookbooks/nginx-0.100.5/libraries/nginxlib.rb +1 -0
  64. data/spec/fixtures/cookbooks/nginx-0.100.5/metadata.rb +91 -0
  65. data/spec/fixtures/cookbooks/nginx-0.100.5/providers/defprovider.rb +1 -0
  66. data/spec/fixtures/cookbooks/nginx-0.100.5/recipes/default.rb +59 -0
  67. data/spec/fixtures/cookbooks/nginx-0.100.5/resources/defresource.rb +1 -0
  68. data/spec/fixtures/cookbooks/nginx-0.100.5/templates/default/nginx.pill.erb +15 -0
  69. data/spec/fixtures/cookbooks/nginx-0.100.5/templates/default/plugins/nginx.rb.erb +66 -0
  70. data/spec/fixtures/lockfile_spec/with_lock/Berksfile +1 -0
  71. data/spec/fixtures/lockfile_spec/without_lock/Berksfile.lock +5 -0
  72. data/spec/spec_helper.rb +92 -0
  73. data/spec/support/chef_api.rb +27 -0
  74. data/spec/support/matchers/file_system_matchers.rb +115 -0
  75. data/spec/support/matchers/filepath_matchers.rb +19 -0
  76. data/spec/unit/berkshelf/cached_cookbook_spec.rb +420 -0
  77. data/spec/unit/berkshelf/cookbook_source/git_location_spec.rb +59 -0
  78. data/spec/unit/berkshelf/cookbook_source/path_location_spec.rb +34 -0
  79. data/spec/unit/berkshelf/cookbook_source/site_location_spec.rb +166 -0
  80. data/spec/unit/berkshelf/cookbook_source_spec.rb +194 -0
  81. data/spec/unit/berkshelf/cookbook_store_spec.rb +71 -0
  82. data/spec/unit/berkshelf/cookbookfile_spec.rb +160 -0
  83. data/spec/unit/berkshelf/downloader_spec.rb +82 -0
  84. data/spec/unit/berkshelf/dsl_spec.rb +42 -0
  85. data/spec/unit/berkshelf/git_spec.rb +63 -0
  86. data/spec/unit/berkshelf/init_generator_spec.rb +52 -0
  87. data/spec/unit/berkshelf/lockfile_spec.rb +25 -0
  88. data/spec/unit/berkshelf/resolver_spec.rb +126 -0
  89. data/spec/unit/berkshelf/tx_result_set_spec.rb +77 -0
  90. data/spec/unit/berkshelf/tx_result_spec.rb +21 -0
  91. data/spec/unit/berkshelf/uploader_spec.rb +71 -0
  92. data/spec/unit/berkshelf_spec.rb +29 -0
  93. metadata +411 -0
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::Lockfile do
4
+ describe "without a lockfile in place already" do
5
+ before do
6
+ @old_dir = Dir.pwd
7
+ Dir.chdir fixtures_path.join("lockfile_spec", "without_lock")
8
+ end
9
+
10
+ it "should be able to write a Berksfile.lock from a list of cookbooks" do
11
+ resolver = Berkshelf::Resolver.new(Berkshelf.downloader, Berkshelf::CookbookSource.new('nginx', '= 0.101.0'))
12
+ resolver.resolve
13
+
14
+ Berkshelf::Lockfile.new(resolver.sources).write
15
+
16
+ File.read('Berksfile.lock').split(/\r?\n/).sort.should == [
17
+ "cookbook 'bluepill', :locked_version => '1.0.4'",
18
+ "cookbook 'build-essential', :locked_version => '1.0.2'",
19
+ "cookbook 'nginx', :locked_version => '0.101.0'",
20
+ "cookbook 'ohai', :locked_version => '1.0.2'",
21
+ "cookbook 'runit', :locked_version => '0.15.0'"
22
+ ]
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+
3
+ module Berkshelf
4
+ describe Resolver do
5
+ describe "ClassMethods" do
6
+ subject { Resolver }
7
+
8
+ describe "#initialize" do
9
+ let(:downloader) { Berkshelf.downloader }
10
+
11
+ it "adds the specified sources to the sources hash" do
12
+ source = CookbookSource.new("mysql", "= 1.2.4")
13
+ resolver = subject.new(downloader, source)
14
+
15
+ resolver.should have_source(source)
16
+ end
17
+
18
+ it "adds the dependencies of the source as packages of the graph" do
19
+ source = CookbookSource.new("mysql", "= 1.2.4")
20
+ resolver = subject.new(downloader, source)
21
+
22
+ source.dependencies.each do |name, constraint|
23
+ resolver.package(name).should_not be_nil
24
+ end
25
+ end
26
+
27
+ it "adds the version_constraints of the dependencies to the graph" do
28
+ source = CookbookSource.new("mysql", "= 1.2.4")
29
+ resolver = subject.new(downloader, source)
30
+
31
+ source.dependencies.each do |name, constraint|
32
+ resolver.package(name).versions.should_not be_empty
33
+ end
34
+ end
35
+
36
+ context "given an array of sources" do
37
+ it "adds the sources to the sources hash" do
38
+ sources = [CookbookSource.new("mysql", "= 1.2.4")]
39
+ resolver = subject.new(downloader, sources)
40
+
41
+ resolver.should have_source(sources[0])
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ let(:source) { CookbookSource.new("mysql", "= 1.2.4") }
48
+
49
+ subject do
50
+ downloader = Berkshelf.downloader
51
+ Resolver.new(downloader)
52
+ end
53
+
54
+ describe "#add_source" do
55
+ before(:each) { subject.add_source(source) }
56
+
57
+ it "adds the source to the instance of resolver" do
58
+ subject.sources.should include(source)
59
+ end
60
+
61
+ it "adds a package of the same name of the source to the graph" do
62
+ subject.package(source.name).should_not be_nil
63
+ end
64
+
65
+ it "adds a version constraint specified by the source to the package of the same name" do
66
+ subject.package(source.name).versions.collect(&:version).should include(source.version_constraint.version)
67
+ end
68
+
69
+ it "adds the dependencies of the source as packages to the graph" do
70
+ source.dependencies.each do |name, constraint|
71
+ subject.package(name).should_not be_nil
72
+ end
73
+ end
74
+
75
+ it "raises a DuplicateSourceDefined exception if a source of the same name is added" do
76
+ dup_source = CookbookSource.new(source.name)
77
+
78
+ lambda {
79
+ subject.add_source(dup_source)
80
+ }.should raise_error(DuplicateSourceDefined)
81
+ end
82
+ end
83
+
84
+ describe "#add_dependencies" do
85
+ it "adds a package for each dependency to the graph" do
86
+ pkg_ver = subject.add_source(source)
87
+ subject.add_dependencies(pkg_ver, source.dependencies)
88
+
89
+ subject.package(source.name).should_not be_nil
90
+ end
91
+
92
+ it "adds a version constraint to the graph for each dependency" do
93
+ pkg_ver = subject.add_source(source)
94
+ subject.add_dependencies(pkg_ver, source.dependencies)
95
+
96
+ subject.package(source.name).versions.collect(&:version).should include(source.version_constraint.version)
97
+ end
98
+ end
99
+
100
+ describe "#[]" do
101
+ before(:each) { subject.add_source(source) }
102
+
103
+ it "returns the source of the given name" do
104
+ subject[source.name].should eql(source)
105
+ end
106
+ end
107
+
108
+ describe "#has_source?" do
109
+ before(:each) { subject.add_source(source) }
110
+
111
+ it "returns the source of the given name" do
112
+ subject.has_source?(source.name).should be_true
113
+ end
114
+ end
115
+
116
+ describe "#resolve" do
117
+ before(:each) do
118
+ subject.add_source(source)
119
+ end
120
+
121
+ it "returns a hash containing the solution for the sources and dependencies" do
122
+ subject.resolve.should eql("mysql" => DepSelector::Version.new("1.2.4"), "openssl" => DepSelector::Version.new("1.0.0"))
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,77 @@
1
+ require 'spec_helper'
2
+
3
+ module Berkshelf
4
+ describe TXResultSet do
5
+ subject { TXResultSet.new }
6
+
7
+ let(:failed_result) do
8
+ result = double("result")
9
+ result.stub(:failed?) { true }
10
+ result.stub(:success?) { false }
11
+ result
12
+ end
13
+
14
+ let(:successful_result) do
15
+ result = double("result")
16
+ result.stub(:failed?) { false }
17
+ result.stub(:success?) { true }
18
+ result
19
+ end
20
+
21
+ describe "#add_result" do
22
+ it "adds a result to the results attribute" do
23
+ subject.add_result(successful_result)
24
+
25
+ subject.results.should have(1).result
26
+ end
27
+
28
+ it "raises an ArgumentError if an invalid result is given" do
29
+ lambda {
30
+ subject.add_result("string_isnt_a_result")
31
+ }.should raise_error(ArgumentError)
32
+ end
33
+ end
34
+
35
+ describe "#failed" do
36
+ it "returns the failed results if there were failed results" do
37
+ subject.add_result(failed_result)
38
+
39
+ subject.failed.should have(1).result
40
+ end
41
+
42
+ it "returns no results if there were no failures" do
43
+ subject.add_result(successful_result)
44
+
45
+ subject.failed.should have(0).results
46
+ end
47
+ end
48
+
49
+ describe "#success" do
50
+ it "returns the successful results if there were successful results" do
51
+ subject.add_result(successful_result)
52
+
53
+ subject.success.should have(1).result
54
+ end
55
+
56
+ it "returns no results if there were no successes" do
57
+ subject.add_result(failed_result)
58
+
59
+ subject.success.should have(0).results
60
+ end
61
+ end
62
+
63
+ describe "#has_errors?" do
64
+ it "returns true if any result was a failure" do
65
+ subject.add_result(failed_result)
66
+
67
+ subject.failed.should be_true
68
+ end
69
+
70
+ it "returns false if every result was a success" do
71
+ subject.add_result(successful_result)
72
+
73
+ subject.failed.should be_true
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ module Berkshelf
4
+ describe TXResult do
5
+ describe "#failed?" do
6
+ subject { TXResult.new(:error, "message") }
7
+
8
+ it "returns true when the status is :error" do
9
+ subject.failed?.should be_true
10
+ end
11
+ end
12
+
13
+ describe "#success" do
14
+ subject { TXResult.new(:ok, "message") }
15
+
16
+ it "returns true when the status is :ok" do
17
+ subject.success?.should be_true
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ module Berkshelf
4
+ describe Uploader do
5
+ let(:cookbook_store) { double('cookbook_store') }
6
+ let(:server_url) { "https://api.opscode.com/organizations/vialstudios" }
7
+ let(:client_key) { '/Users/reset/.chef/reset.pem' }
8
+ let(:node_name) { 'reset' }
9
+
10
+ subject { Uploader.new(cookbook_store, server_url, client_key: client_key, node_name: node_name) }
11
+
12
+ describe "#upload" do
13
+ let(:cookbook) { double('nginx', name: "nginx", version: "0.101.2") }
14
+
15
+ context "when cookbook is downloaded (cached)" do
16
+ before(:each) do
17
+ cookbook_store.stub(:cookbook) { cookbook }
18
+ end
19
+
20
+ context "when cookbook is valid" do
21
+ before(:each) do
22
+ cookbook.should_receive(:validate!).and_return(true)
23
+ cookbook.should_receive(:checksums).and_return("da97c94bb6acb2b7900cbf951654fea3"=>"/Users/reset/code/berkshelf/spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb")
24
+ subject.should_receive(:create_sandbox)
25
+ subject.should_receive(:upload_checksums_to_sandbox)
26
+ subject.should_receive(:commit_sandbox)
27
+ subject.should_receive(:save_cookbook)
28
+ end
29
+
30
+ it "returns a successful TXResult" do
31
+ subject.upload(cookbook.name, cookbook.version).should be_success
32
+ end
33
+ end
34
+
35
+ context "when cookbook is not valid" do
36
+ before(:each) { cookbook.should_receive(:validate!).and_raise(CookbookSyntaxError) }
37
+
38
+ it "returns a failed TXResult" do
39
+ subject.upload(cookbook.name, cookbook.version).should be_failed
40
+ end
41
+ end
42
+ end
43
+
44
+ context "when cookbook is not downloaded (cached)" do
45
+ before(:each) do
46
+ cookbook_store.stub(:cookbook) { nil }
47
+ end
48
+
49
+ it "returns a failed TXResult" do
50
+ subject.upload(cookbook.name, cookbook.version)
51
+ end
52
+ end
53
+ end
54
+
55
+ describe "#upload!" do
56
+ let(:cookbook) { double('nginx', name: "nginx", version: "0.101.2") }
57
+
58
+ context "when cookbook is not downloaded (cached)" do
59
+ before(:each) do
60
+ cookbook_store.stub(:cookbook) { nil }
61
+ end
62
+
63
+ it "raises UploadFailure if upload was not successful" do
64
+ lambda {
65
+ subject.upload!(cookbook.name, cookbook.version)
66
+ }.should raise_error(UploadFailure)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf do
4
+ context "ClassMethods" do
5
+ subject { Berkshelf }
6
+
7
+ describe "#find_metadata" do
8
+ let(:metadata_path) { fixtures_path.join("cookbooks", "example_cookbook", "metadata.rb") }
9
+
10
+ context "given a path containing a metadata.rb file" do
11
+ it "returns the path to the metadata.rb file" do
12
+ subject.find_metadata(fixtures_path.join("cookbooks", "example_cookbook")).should eql(metadata_path)
13
+ end
14
+ end
15
+
16
+ context "given a path where a parent path contains a metadata.rb file" do
17
+ it "returns the path to the metadata.rb file" do
18
+ subject.find_metadata(fixtures_path.join("cookbooks", "example_cookbook", "recipes")).should eql(metadata_path)
19
+ end
20
+ end
21
+
22
+ context "given a path that does not contain a metadata.rb file or a parent path that does" do
23
+ it "returns nil" do
24
+ subject.find_metadata(tmp_path).should be_nil
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,411 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: berkshelf
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josiah Kiehl
9
+ - Jamie Winsor
10
+ - Michael Ivey
11
+ - Erik Hollensbe
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2012-06-21 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: dep_selector
19
+ requirement: &70178588369440 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: *70178588369440
28
+ - !ruby/object:Gem::Dependency
29
+ name: chef
30
+ requirement: &70178588368880 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ~>
34
+ - !ruby/object:Gem::Version
35
+ version: 0.10.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: *70178588368880
39
+ - !ruby/object:Gem::Dependency
40
+ name: minitar
41
+ requirement: &70178588368420 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: *70178588368420
50
+ - !ruby/object:Gem::Dependency
51
+ name: thor
52
+ requirement: &70178588367600 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: 0.15.2
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: *70178588367600
61
+ - !ruby/object:Gem::Dependency
62
+ name: cucumber
63
+ requirement: &70178588367060 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: *70178588367060
72
+ - !ruby/object:Gem::Dependency
73
+ name: vcr
74
+ requirement: &70178588366380 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: *70178588366380
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: &70178588365400 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: *70178588365400
94
+ - !ruby/object:Gem::Dependency
95
+ name: aruba
96
+ requirement: &70178588364400 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: *70178588364400
105
+ - !ruby/object:Gem::Dependency
106
+ name: rspec
107
+ requirement: &70178588363700 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: *70178588363700
116
+ - !ruby/object:Gem::Dependency
117
+ name: json_spec
118
+ requirement: &70178588362640 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: *70178588362640
127
+ - !ruby/object:Gem::Dependency
128
+ name: simplecov
129
+ requirement: &70178588362120 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: *70178588362120
138
+ - !ruby/object:Gem::Dependency
139
+ name: fuubar
140
+ requirement: &70178588555700 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ! '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: *70178588555700
149
+ - !ruby/object:Gem::Dependency
150
+ name: spork
151
+ requirement: &70178588554160 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: *70178588554160
160
+ - !ruby/object:Gem::Dependency
161
+ name: yard
162
+ requirement: &70178588552920 !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: *70178588552920
171
+ - !ruby/object:Gem::Dependency
172
+ name: guard
173
+ requirement: &70178588551560 !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ type: :development
180
+ prerelease: false
181
+ version_requirements: *70178588551560
182
+ - !ruby/object:Gem::Dependency
183
+ name: guard-rspec
184
+ requirement: &70178588549860 !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: *70178588549860
193
+ - !ruby/object:Gem::Dependency
194
+ name: guard-cucumber
195
+ requirement: &70178588549140 !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ type: :development
202
+ prerelease: false
203
+ version_requirements: *70178588549140
204
+ - !ruby/object:Gem::Dependency
205
+ name: guard-spork
206
+ requirement: &70178588548100 !ruby/object:Gem::Requirement
207
+ none: false
208
+ requirements:
209
+ - - ! '>='
210
+ - !ruby/object:Gem::Version
211
+ version: '0'
212
+ type: :development
213
+ prerelease: false
214
+ version_requirements: *70178588548100
215
+ - !ruby/object:Gem::Dependency
216
+ name: guard-yard
217
+ requirement: &70178588562980 !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ type: :development
224
+ prerelease: false
225
+ version_requirements: *70178588562980
226
+ description: Manages a Cookbook's, or an Application's, Cookbook dependencies
227
+ email:
228
+ - josiah@skirmisher.net
229
+ - jamie@vialstudios.com
230
+ - ivey@gweezlebur.com
231
+ - erik@hollensbe.org
232
+ executables: []
233
+ extensions: []
234
+ extra_rdoc_files: []
235
+ files:
236
+ - .gitignore
237
+ - .rbenv-version
238
+ - Gemfile
239
+ - Guardfile
240
+ - LICENSE
241
+ - README.rdoc
242
+ - Thorfile
243
+ - berkshelf.gemspec
244
+ - features/config.sample.yml
245
+ - features/init_command.feature
246
+ - features/install.feature
247
+ - features/lockfile.feature
248
+ - features/step_definitions/chef_server_steps.rb
249
+ - features/step_definitions/cli_steps.rb
250
+ - features/step_definitions/filesystem_steps.rb
251
+ - features/support/env.rb
252
+ - features/update.feature
253
+ - features/upload_command.feature
254
+ - features/without.feature
255
+ - lib/berkshelf.rb
256
+ - lib/berkshelf/berksfile.rb
257
+ - lib/berkshelf/cached_cookbook.rb
258
+ - lib/berkshelf/cookbook_source.rb
259
+ - lib/berkshelf/cookbook_source/git_location.rb
260
+ - lib/berkshelf/cookbook_source/path_location.rb
261
+ - lib/berkshelf/cookbook_source/site_location.rb
262
+ - lib/berkshelf/cookbook_store.rb
263
+ - lib/berkshelf/core_ext.rb
264
+ - lib/berkshelf/core_ext/file.rb
265
+ - lib/berkshelf/core_ext/kernel.rb
266
+ - lib/berkshelf/core_ext/pathname.rb
267
+ - lib/berkshelf/downloader.rb
268
+ - lib/berkshelf/dsl.rb
269
+ - lib/berkshelf/errors.rb
270
+ - lib/berkshelf/generator_files/Berksfile.erb
271
+ - lib/berkshelf/generator_files/chefignore
272
+ - lib/berkshelf/git.rb
273
+ - lib/berkshelf/init_generator.rb
274
+ - lib/berkshelf/lockfile.rb
275
+ - lib/berkshelf/resolver.rb
276
+ - lib/berkshelf/tx_result.rb
277
+ - lib/berkshelf/tx_result_set.rb
278
+ - lib/berkshelf/uploader.rb
279
+ - lib/berkshelf/version.rb
280
+ - lib/chef/knife/berks_init.rb
281
+ - lib/chef/knife/berks_install.rb
282
+ - lib/chef/knife/berks_update.rb
283
+ - lib/chef/knife/berks_upload.rb
284
+ - spec/fixtures/Berksfile
285
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/README.md
286
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb
287
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb
288
+ - spec/fixtures/cookbooks/example_cookbook/README.md
289
+ - spec/fixtures/cookbooks/example_cookbook/metadata.rb
290
+ - spec/fixtures/cookbooks/example_cookbook/recipes/default.rb
291
+ - spec/fixtures/cookbooks/invalid_ruby_files-1.0.0/recipes/default.rb
292
+ - spec/fixtures/cookbooks/invalid_template_files-1.0.0/templates/default/broken.erb
293
+ - spec/fixtures/cookbooks/nginx-0.100.5/README.md
294
+ - spec/fixtures/cookbooks/nginx-0.100.5/attributes/default.rb
295
+ - spec/fixtures/cookbooks/nginx-0.100.5/definitions/nginx_site.rb
296
+ - spec/fixtures/cookbooks/nginx-0.100.5/files/default/mime.types
297
+ - spec/fixtures/cookbooks/nginx-0.100.5/files/ubuntu/mime.types
298
+ - spec/fixtures/cookbooks/nginx-0.100.5/libraries/nginxlib.rb
299
+ - spec/fixtures/cookbooks/nginx-0.100.5/metadata.rb
300
+ - spec/fixtures/cookbooks/nginx-0.100.5/providers/defprovider.rb
301
+ - spec/fixtures/cookbooks/nginx-0.100.5/recipes/default.rb
302
+ - spec/fixtures/cookbooks/nginx-0.100.5/resources/defresource.rb
303
+ - spec/fixtures/cookbooks/nginx-0.100.5/templates/default/nginx.pill.erb
304
+ - spec/fixtures/cookbooks/nginx-0.100.5/templates/default/plugins/nginx.rb.erb
305
+ - spec/fixtures/lockfile_spec/with_lock/Berksfile
306
+ - spec/fixtures/lockfile_spec/without_lock/Berksfile.lock
307
+ - spec/spec_helper.rb
308
+ - spec/support/chef_api.rb
309
+ - spec/support/matchers/file_system_matchers.rb
310
+ - spec/support/matchers/filepath_matchers.rb
311
+ - spec/unit/berkshelf/cached_cookbook_spec.rb
312
+ - spec/unit/berkshelf/cookbook_source/git_location_spec.rb
313
+ - spec/unit/berkshelf/cookbook_source/path_location_spec.rb
314
+ - spec/unit/berkshelf/cookbook_source/site_location_spec.rb
315
+ - spec/unit/berkshelf/cookbook_source_spec.rb
316
+ - spec/unit/berkshelf/cookbook_store_spec.rb
317
+ - spec/unit/berkshelf/cookbookfile_spec.rb
318
+ - spec/unit/berkshelf/downloader_spec.rb
319
+ - spec/unit/berkshelf/dsl_spec.rb
320
+ - spec/unit/berkshelf/git_spec.rb
321
+ - spec/unit/berkshelf/init_generator_spec.rb
322
+ - spec/unit/berkshelf/lockfile_spec.rb
323
+ - spec/unit/berkshelf/resolver_spec.rb
324
+ - spec/unit/berkshelf/tx_result_set_spec.rb
325
+ - spec/unit/berkshelf/tx_result_spec.rb
326
+ - spec/unit/berkshelf/uploader_spec.rb
327
+ - spec/unit/berkshelf_spec.rb
328
+ homepage: https://github.com/RiotGames/berkshelf
329
+ licenses: []
330
+ post_install_message:
331
+ rdoc_options: []
332
+ require_paths:
333
+ - lib
334
+ required_ruby_version: !ruby/object:Gem::Requirement
335
+ none: false
336
+ requirements:
337
+ - - ! '>='
338
+ - !ruby/object:Gem::Version
339
+ version: 1.9.1
340
+ required_rubygems_version: !ruby/object:Gem::Requirement
341
+ none: false
342
+ requirements:
343
+ - - ! '>='
344
+ - !ruby/object:Gem::Version
345
+ version: '0'
346
+ segments:
347
+ - 0
348
+ hash: -3668778717482206330
349
+ requirements: []
350
+ rubyforge_project:
351
+ rubygems_version: 1.8.11
352
+ signing_key:
353
+ specification_version: 3
354
+ summary: Manages a Cookbook's, or an Application's, Cookbook dependencies
355
+ test_files:
356
+ - features/config.sample.yml
357
+ - features/init_command.feature
358
+ - features/install.feature
359
+ - features/lockfile.feature
360
+ - features/step_definitions/chef_server_steps.rb
361
+ - features/step_definitions/cli_steps.rb
362
+ - features/step_definitions/filesystem_steps.rb
363
+ - features/support/env.rb
364
+ - features/update.feature
365
+ - features/upload_command.feature
366
+ - features/without.feature
367
+ - spec/fixtures/Berksfile
368
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/README.md
369
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/metadata.rb
370
+ - spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb
371
+ - spec/fixtures/cookbooks/example_cookbook/README.md
372
+ - spec/fixtures/cookbooks/example_cookbook/metadata.rb
373
+ - spec/fixtures/cookbooks/example_cookbook/recipes/default.rb
374
+ - spec/fixtures/cookbooks/invalid_ruby_files-1.0.0/recipes/default.rb
375
+ - spec/fixtures/cookbooks/invalid_template_files-1.0.0/templates/default/broken.erb
376
+ - spec/fixtures/cookbooks/nginx-0.100.5/README.md
377
+ - spec/fixtures/cookbooks/nginx-0.100.5/attributes/default.rb
378
+ - spec/fixtures/cookbooks/nginx-0.100.5/definitions/nginx_site.rb
379
+ - spec/fixtures/cookbooks/nginx-0.100.5/files/default/mime.types
380
+ - spec/fixtures/cookbooks/nginx-0.100.5/files/ubuntu/mime.types
381
+ - spec/fixtures/cookbooks/nginx-0.100.5/libraries/nginxlib.rb
382
+ - spec/fixtures/cookbooks/nginx-0.100.5/metadata.rb
383
+ - spec/fixtures/cookbooks/nginx-0.100.5/providers/defprovider.rb
384
+ - spec/fixtures/cookbooks/nginx-0.100.5/recipes/default.rb
385
+ - spec/fixtures/cookbooks/nginx-0.100.5/resources/defresource.rb
386
+ - spec/fixtures/cookbooks/nginx-0.100.5/templates/default/nginx.pill.erb
387
+ - spec/fixtures/cookbooks/nginx-0.100.5/templates/default/plugins/nginx.rb.erb
388
+ - spec/fixtures/lockfile_spec/with_lock/Berksfile
389
+ - spec/fixtures/lockfile_spec/without_lock/Berksfile.lock
390
+ - spec/spec_helper.rb
391
+ - spec/support/chef_api.rb
392
+ - spec/support/matchers/file_system_matchers.rb
393
+ - spec/support/matchers/filepath_matchers.rb
394
+ - spec/unit/berkshelf/cached_cookbook_spec.rb
395
+ - spec/unit/berkshelf/cookbook_source/git_location_spec.rb
396
+ - spec/unit/berkshelf/cookbook_source/path_location_spec.rb
397
+ - spec/unit/berkshelf/cookbook_source/site_location_spec.rb
398
+ - spec/unit/berkshelf/cookbook_source_spec.rb
399
+ - spec/unit/berkshelf/cookbook_store_spec.rb
400
+ - spec/unit/berkshelf/cookbookfile_spec.rb
401
+ - spec/unit/berkshelf/downloader_spec.rb
402
+ - spec/unit/berkshelf/dsl_spec.rb
403
+ - spec/unit/berkshelf/git_spec.rb
404
+ - spec/unit/berkshelf/init_generator_spec.rb
405
+ - spec/unit/berkshelf/lockfile_spec.rb
406
+ - spec/unit/berkshelf/resolver_spec.rb
407
+ - spec/unit/berkshelf/tx_result_set_spec.rb
408
+ - spec/unit/berkshelf/tx_result_spec.rb
409
+ - spec/unit/berkshelf/uploader_spec.rb
410
+ - spec/unit/berkshelf_spec.rb
411
+ has_rdoc: