berkshelf 0.1.1

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