berkshelf-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +17 -0
  5. data/CONTRIBUTING.md +33 -0
  6. data/Gemfile +40 -0
  7. data/Guardfile +20 -0
  8. data/LICENSE +201 -0
  9. data/README.md +37 -0
  10. data/Thorfile +39 -0
  11. data/berkshelf-api.gemspec +35 -0
  12. data/bin/berks-api +5 -0
  13. data/lib/berkshelf-api.rb +1 -0
  14. data/lib/berkshelf/api.rb +25 -0
  15. data/lib/berkshelf/api/application.rb +114 -0
  16. data/lib/berkshelf/api/cache_builder.rb +60 -0
  17. data/lib/berkshelf/api/cache_builder/worker.rb +116 -0
  18. data/lib/berkshelf/api/cache_builder/worker/chef_server.rb +46 -0
  19. data/lib/berkshelf/api/cache_builder/worker/opscode.rb +59 -0
  20. data/lib/berkshelf/api/cache_manager.rb +96 -0
  21. data/lib/berkshelf/api/config.rb +23 -0
  22. data/lib/berkshelf/api/cucumber.rb +11 -0
  23. data/lib/berkshelf/api/dependency_cache.rb +123 -0
  24. data/lib/berkshelf/api/endpoint.rb +17 -0
  25. data/lib/berkshelf/api/endpoint/v1.rb +19 -0
  26. data/lib/berkshelf/api/errors.rb +8 -0
  27. data/lib/berkshelf/api/generic_server.rb +50 -0
  28. data/lib/berkshelf/api/logging.rb +37 -0
  29. data/lib/berkshelf/api/mixin.rb +7 -0
  30. data/lib/berkshelf/api/mixin/services.rb +48 -0
  31. data/lib/berkshelf/api/rack_app.rb +5 -0
  32. data/lib/berkshelf/api/remote_cookbook.rb +3 -0
  33. data/lib/berkshelf/api/rest_gateway.rb +62 -0
  34. data/lib/berkshelf/api/rspec.rb +20 -0
  35. data/lib/berkshelf/api/rspec/server.rb +29 -0
  36. data/lib/berkshelf/api/site_connector.rb +7 -0
  37. data/lib/berkshelf/api/site_connector/opscode.rb +162 -0
  38. data/lib/berkshelf/api/srv_ctl.rb +63 -0
  39. data/lib/berkshelf/api/version.rb +5 -0
  40. data/spec/fixtures/reset.pem +27 -0
  41. data/spec/spec_helper.rb +53 -0
  42. data/spec/support/actor_mocking.rb +7 -0
  43. data/spec/support/chef_server.rb +73 -0
  44. data/spec/unit/berkshelf/api/application_spec.rb +24 -0
  45. data/spec/unit/berkshelf/api/cache_builder/worker/chef_server_spec.rb +59 -0
  46. data/spec/unit/berkshelf/api/cache_builder/worker/opscode_spec.rb +41 -0
  47. data/spec/unit/berkshelf/api/cache_builder/worker_spec.rb +80 -0
  48. data/spec/unit/berkshelf/api/cache_builder_spec.rb +37 -0
  49. data/spec/unit/berkshelf/api/cache_manager_spec.rb +123 -0
  50. data/spec/unit/berkshelf/api/config_spec.rb +24 -0
  51. data/spec/unit/berkshelf/api/dependency_cache_spec.rb +109 -0
  52. data/spec/unit/berkshelf/api/endpoint/v1_spec.rb +18 -0
  53. data/spec/unit/berkshelf/api/logging_spec.rb +28 -0
  54. data/spec/unit/berkshelf/api/mixin/services_spec.rb +68 -0
  55. data/spec/unit/berkshelf/api/rack_app_spec.rb +6 -0
  56. data/spec/unit/berkshelf/api/rest_gateway_spec.rb +26 -0
  57. data/spec/unit/berkshelf/api/site_connector/opscode_spec.rb +85 -0
  58. data/spec/unit/berkshelf/api/srv_ctl_spec.rb +56 -0
  59. metadata +293 -0
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::Endpoint::V1 do
4
+ include Rack::Test::Methods
5
+ include Berkshelf::API::Mixin::Services
6
+
7
+ before { Berkshelf::API::CacheManager.start }
8
+ let(:app) { described_class.new }
9
+
10
+ describe "GET /universe" do
11
+ before { get '/universe' }
12
+ subject { last_response }
13
+ let(:app_cache) { cache_manager.cache }
14
+
15
+ its(:status) { should be(200) }
16
+ its(:body) { should eq(app_cache.to_json) }
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::Logging do
4
+ describe "ClassMethods" do
5
+ subject { described_class }
6
+
7
+ describe "::init" do
8
+ after { described_class.init(location: nil) }
9
+
10
+ it "sets the Celluloid.logger to ::logger" do
11
+ subject.init
12
+ expect(Celluloid.logger).to eql(subject.logger)
13
+ end
14
+ end
15
+
16
+ describe "::logger" do
17
+ it "returns a Logger object" do
18
+ expect(subject.logger).to be_a(Logger)
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "#logger" do
24
+ it "returns a Logger object" do
25
+ expect(subject.logger).to be_a(Logger)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'berkshelf/api/rest_gateway'
3
+
4
+ describe Berkshelf::API::Mixin::Services do
5
+ let(:includer) do
6
+ Class.new { include Berkshelf::API::Mixin::Services }.new
7
+ end
8
+
9
+ describe "#cache_builder" do
10
+ subject { includer.cache_builder }
11
+
12
+ context "when the CacheBuilder is running" do
13
+ before { Berkshelf::API::CacheBuilder.start }
14
+
15
+ it "returns the running instance of CacheBuilder" do
16
+ expect(subject).to be_a(Berkshelf::API::CacheBuilder)
17
+ end
18
+ end
19
+
20
+ context "when the CacheBuilder is not running" do
21
+ before { Berkshelf::API::CacheBuilder.stop }
22
+
23
+ it "raises a NotStartedError" do
24
+ expect { subject }.to raise_error(Berkshelf::API::NotStartedError)
25
+ end
26
+ end
27
+ end
28
+
29
+ describe "#cache_manager" do
30
+ subject { includer.cache_manager }
31
+
32
+ context "when the CacheManager is running" do
33
+ before { Berkshelf::API::CacheManager.start }
34
+
35
+ it "returns the running instance of CacheManager" do
36
+ expect(subject).to be_a(Berkshelf::API::CacheManager)
37
+ end
38
+ end
39
+
40
+ context "when the CacheManager is not running" do
41
+ before { Berkshelf::API::CacheManager.stop }
42
+
43
+ it "raises a NotStartedError" do
44
+ expect { subject }.to raise_error(Berkshelf::API::NotStartedError)
45
+ end
46
+ end
47
+ end
48
+
49
+ describe "#rest_gateway" do
50
+ subject { includer.rest_gateway }
51
+
52
+ context "when the RESTGateway is running" do
53
+ before { Berkshelf::API::RESTGateway.start }
54
+
55
+ it "returns the running instance of RESTGateway" do
56
+ expect(subject).to be_a(Berkshelf::API::RESTGateway)
57
+ end
58
+ end
59
+
60
+ context "when the RESTGateway is not running" do
61
+ before { Berkshelf::API::RESTGateway.stop }
62
+
63
+ it "raises a NotStartedError" do
64
+ expect { subject }.to raise_error(Berkshelf::API::NotStartedError)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::RackApp do
4
+ subject { described_class }
5
+ its(:endpoints) { should have(1).item.at_least }
6
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'berkshelf/api/rest_gateway'
3
+
4
+ describe Berkshelf::API::RESTGateway do
5
+ describe "ClassMethods" do
6
+ describe "::new" do
7
+ let(:options) { Hash.new }
8
+ subject { described_class.new(options) }
9
+
10
+ its(:host) { should eql(described_class::DEFAULT_OPTIONS[:host]) }
11
+ its(:port) { should eql(described_class::DEFAULT_OPTIONS[:port]) }
12
+ its(:workers) { should eql(described_class::DEFAULT_OPTIONS[:workers]) }
13
+ its(:rack_app) { should be_a(Berkshelf::API::RackApp) }
14
+
15
+ context "given a different port" do
16
+ before { options[:port] = 26210 }
17
+ its(:port) { should eql(26210) }
18
+ end
19
+
20
+ context "given a different amount of workers" do
21
+ before { options[:workers] = 20 }
22
+ its(:workers) { should eql(20) }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::SiteConnector::Opscode do
4
+ let(:connection) { double("connection") }
5
+ let(:total_response) { double("total", status: 200, body: { "total" => 10 } ) }
6
+ let(:cookbooks_response) do
7
+ double("cookbooks", status: 200, body: {
8
+ "items"=> [
9
+ {"cookbook_name" => "chicken"},
10
+ {"cookbook_name" => "tuna"}
11
+ ]})
12
+ end
13
+ let(:chicken_versions_response) do
14
+ double("chicken_versions", status: 200, body: {
15
+ "versions" => [
16
+ "http://www.example.com/api/v1/cookbooks/chicken/versions/1_0",
17
+ "http://www.example.com/api/v1/cookbooks/chicken/versions/2_0"
18
+ ]})
19
+ end
20
+
21
+ subject { described_class.new }
22
+
23
+ describe "#cookbooks" do
24
+ it "should fetch all the cookbooks and return a list of their names" do
25
+ connection.should_receive(:get).
26
+ with("cookbooks").
27
+ and_return(total_response)
28
+
29
+ connection.should_receive(:get).
30
+ with("cookbooks?start=0&items=10").
31
+ and_return(cookbooks_response)
32
+
33
+ subject.should_receive(:connection).at_least(1).times.and_return(connection)
34
+ expect(subject.cookbooks).to eql(["chicken", "tuna"])
35
+ end
36
+ end
37
+
38
+ describe "#versions" do
39
+ it "should call the server for the cookbook provied and return a list of available version number" do
40
+ connection.should_receive(:get).
41
+ with("cookbooks/chicken").
42
+ and_return(chicken_versions_response)
43
+
44
+ subject.should_receive(:connection).at_least(1).times.and_return(connection)
45
+ expect(subject.versions("chicken")).to eql(["1.0", "2.0"])
46
+ end
47
+ end
48
+
49
+ describe "#find" do
50
+ let(:name) { "nginx" }
51
+ let(:version) { "1.4.0" }
52
+ let(:result) { subject.find(name, version) }
53
+
54
+ it "returns the cookbook and version information" do
55
+ expect(result.cookbook).to eq('http://cookbooks.opscode.com/api/v1/cookbooks/nginx')
56
+ expect(result.version).to eq('1.4.0')
57
+ end
58
+
59
+ context "when the cookbook is not found" do
60
+ let(:name) { "not_a_real_cookbook_that_anyone_should_ever_make" }
61
+
62
+ it "returns nil" do
63
+ expect(result).to be_nil
64
+ end
65
+ end
66
+ end
67
+
68
+ describe "#download" do
69
+ let(:name) { "chicken" }
70
+ let(:version) { "1.0.0" }
71
+ let(:destination) { "location" }
72
+
73
+ it "should download then ungzip/tar the cookbook" do
74
+ response = { file: "http://file" }
75
+ tempfile = double('tempfile', path: '/some/path', unlink: nil)
76
+
77
+ subject.should_receive(:find).with(name, version).and_return(response)
78
+ subject.should_receive(:stream).with("http://file").and_return(tempfile)
79
+ Archive.should_receive(:extract).with(tempfile.path, destination)
80
+
81
+ subject.download(name, version, destination)
82
+ end
83
+ end
84
+ end
85
+
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::SrvCtl do
4
+ describe "ClassMethods" do
5
+ describe "::parse_options" do
6
+ let(:args) { Array.new }
7
+ let(:filename) { "berks-api" }
8
+
9
+ subject { described_class.parse_options(args, filename) }
10
+
11
+ it "returns a hash" do
12
+ expect(subject).to be_a(Hash)
13
+ end
14
+
15
+ context "given -p" do
16
+ let(:args) { ["-p", "1234"] }
17
+
18
+ it "sets :pid_file to the given value" do
19
+ expect(subject[:port]).to eql(1234)
20
+ end
21
+ end
22
+
23
+ context "given -v" do
24
+ let(:args) { ["-v"] }
25
+
26
+ it "sets :log_level to INFO" do
27
+ expect(subject[:log_level]).to eql("INFO")
28
+ end
29
+ end
30
+
31
+ context "given -d" do
32
+ let(:args) { ["-d"] }
33
+
34
+ it "sets :log_level to DEBUG" do
35
+ expect(subject[:log_level]).to eql("DEBUG")
36
+ end
37
+ end
38
+
39
+ context "given -q" do
40
+ let(:args) { ["-q"] }
41
+
42
+ it "sets :log_location to /dev/null" do
43
+ expect(subject[:log_location]).to eql("/dev/null")
44
+ end
45
+ end
46
+
47
+ context "given -v and -d" do
48
+ let(:args) { ["-v", "-d"] }
49
+
50
+ it "sets :log_level to DEBUG" do
51
+ expect(subject[:log_level]).to eql("DEBUG")
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
metadata ADDED
@@ -0,0 +1,293 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: berkshelf-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jamie Winsor
8
+ - Andrew Garson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-07-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ridley
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: 1.3.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 1.3.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: celluloid
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 0.14.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 0.14.0
42
+ - !ruby/object:Gem::Dependency
43
+ name: reel
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 0.4.0.pre
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 0.4.0.pre
56
+ - !ruby/object:Gem::Dependency
57
+ name: grape
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 0.5.0
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.5.0
70
+ - !ruby/object:Gem::Dependency
71
+ name: hashie
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 2.0.4
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: 2.0.4
84
+ - !ruby/object:Gem::Dependency
85
+ name: faraday
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :runtime
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: retryable
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: 1.3.3
105
+ type: :runtime
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: 1.3.3
112
+ - !ruby/object:Gem::Dependency
113
+ name: archive
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - '='
117
+ - !ruby/object:Gem::Version
118
+ version: 0.0.2
119
+ type: :runtime
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - '='
124
+ - !ruby/object:Gem::Version
125
+ version: 0.0.2
126
+ - !ruby/object:Gem::Dependency
127
+ name: buff-config
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ~>
131
+ - !ruby/object:Gem::Version
132
+ version: '0.1'
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: '0.1'
140
+ - !ruby/object:Gem::Dependency
141
+ name: bundler
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ~>
145
+ - !ruby/object:Gem::Version
146
+ version: '1.3'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ~>
152
+ - !ruby/object:Gem::Version
153
+ version: '1.3'
154
+ - !ruby/object:Gem::Dependency
155
+ name: thor
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ~>
159
+ - !ruby/object:Gem::Version
160
+ version: 0.18.0
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ~>
166
+ - !ruby/object:Gem::Version
167
+ version: 0.18.0
168
+ - !ruby/object:Gem::Dependency
169
+ name: chef-zero
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ~>
173
+ - !ruby/object:Gem::Version
174
+ version: '1.5'
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - ~>
180
+ - !ruby/object:Gem::Version
181
+ version: '1.5'
182
+ description: Berkshelf dependency API server
183
+ email:
184
+ - jamie@vialstudios.com
185
+ - agarson@riotgames
186
+ executables:
187
+ - berks-api
188
+ extensions: []
189
+ extra_rdoc_files: []
190
+ files:
191
+ - .gitignore
192
+ - .ruby-version
193
+ - .travis.yml
194
+ - CONTRIBUTING.md
195
+ - Gemfile
196
+ - Guardfile
197
+ - LICENSE
198
+ - README.md
199
+ - Thorfile
200
+ - berkshelf-api.gemspec
201
+ - bin/berks-api
202
+ - lib/berkshelf-api.rb
203
+ - lib/berkshelf/api.rb
204
+ - lib/berkshelf/api/application.rb
205
+ - lib/berkshelf/api/cache_builder.rb
206
+ - lib/berkshelf/api/cache_builder/worker.rb
207
+ - lib/berkshelf/api/cache_builder/worker/chef_server.rb
208
+ - lib/berkshelf/api/cache_builder/worker/opscode.rb
209
+ - lib/berkshelf/api/cache_manager.rb
210
+ - lib/berkshelf/api/config.rb
211
+ - lib/berkshelf/api/cucumber.rb
212
+ - lib/berkshelf/api/dependency_cache.rb
213
+ - lib/berkshelf/api/endpoint.rb
214
+ - lib/berkshelf/api/endpoint/v1.rb
215
+ - lib/berkshelf/api/errors.rb
216
+ - lib/berkshelf/api/generic_server.rb
217
+ - lib/berkshelf/api/logging.rb
218
+ - lib/berkshelf/api/mixin.rb
219
+ - lib/berkshelf/api/mixin/services.rb
220
+ - lib/berkshelf/api/rack_app.rb
221
+ - lib/berkshelf/api/remote_cookbook.rb
222
+ - lib/berkshelf/api/rest_gateway.rb
223
+ - lib/berkshelf/api/rspec.rb
224
+ - lib/berkshelf/api/rspec/server.rb
225
+ - lib/berkshelf/api/site_connector.rb
226
+ - lib/berkshelf/api/site_connector/opscode.rb
227
+ - lib/berkshelf/api/srv_ctl.rb
228
+ - lib/berkshelf/api/version.rb
229
+ - spec/fixtures/reset.pem
230
+ - spec/spec_helper.rb
231
+ - spec/support/actor_mocking.rb
232
+ - spec/support/chef_server.rb
233
+ - spec/unit/berkshelf/api/application_spec.rb
234
+ - spec/unit/berkshelf/api/cache_builder/worker/chef_server_spec.rb
235
+ - spec/unit/berkshelf/api/cache_builder/worker/opscode_spec.rb
236
+ - spec/unit/berkshelf/api/cache_builder/worker_spec.rb
237
+ - spec/unit/berkshelf/api/cache_builder_spec.rb
238
+ - spec/unit/berkshelf/api/cache_manager_spec.rb
239
+ - spec/unit/berkshelf/api/config_spec.rb
240
+ - spec/unit/berkshelf/api/dependency_cache_spec.rb
241
+ - spec/unit/berkshelf/api/endpoint/v1_spec.rb
242
+ - spec/unit/berkshelf/api/logging_spec.rb
243
+ - spec/unit/berkshelf/api/mixin/services_spec.rb
244
+ - spec/unit/berkshelf/api/rack_app_spec.rb
245
+ - spec/unit/berkshelf/api/rest_gateway_spec.rb
246
+ - spec/unit/berkshelf/api/site_connector/opscode_spec.rb
247
+ - spec/unit/berkshelf/api/srv_ctl_spec.rb
248
+ homepage: https://github.com/RiotGames/berkshelf-api
249
+ licenses:
250
+ - Apache 2.0
251
+ metadata: {}
252
+ post_install_message:
253
+ rdoc_options: []
254
+ require_paths:
255
+ - lib
256
+ required_ruby_version: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - '>='
259
+ - !ruby/object:Gem::Version
260
+ version: 1.9.3
261
+ required_rubygems_version: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - '>='
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
266
+ requirements: []
267
+ rubyforge_project:
268
+ rubygems_version: 2.0.3
269
+ signing_key:
270
+ specification_version: 4
271
+ summary: A server which indexes cookbooks from various sources and hosts it over a
272
+ REST API
273
+ test_files:
274
+ - spec/fixtures/reset.pem
275
+ - spec/spec_helper.rb
276
+ - spec/support/actor_mocking.rb
277
+ - spec/support/chef_server.rb
278
+ - spec/unit/berkshelf/api/application_spec.rb
279
+ - spec/unit/berkshelf/api/cache_builder/worker/chef_server_spec.rb
280
+ - spec/unit/berkshelf/api/cache_builder/worker/opscode_spec.rb
281
+ - spec/unit/berkshelf/api/cache_builder/worker_spec.rb
282
+ - spec/unit/berkshelf/api/cache_builder_spec.rb
283
+ - spec/unit/berkshelf/api/cache_manager_spec.rb
284
+ - spec/unit/berkshelf/api/config_spec.rb
285
+ - spec/unit/berkshelf/api/dependency_cache_spec.rb
286
+ - spec/unit/berkshelf/api/endpoint/v1_spec.rb
287
+ - spec/unit/berkshelf/api/logging_spec.rb
288
+ - spec/unit/berkshelf/api/mixin/services_spec.rb
289
+ - spec/unit/berkshelf/api/rack_app_spec.rb
290
+ - spec/unit/berkshelf/api/rest_gateway_spec.rb
291
+ - spec/unit/berkshelf/api/site_connector/opscode_spec.rb
292
+ - spec/unit/berkshelf/api/srv_ctl_spec.rb
293
+ has_rdoc: