berkshelf-api 1.1.1 → 1.2.0.rc1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce86ff18c66c5969773219d3ca52057c3a26f7e9
4
- data.tar.gz: bc4ec3d58c036d345bcd87a2ecc0e884b9747137
3
+ metadata.gz: 34d85c7aab58658330e2d602a0e14b90f5fae361
4
+ data.tar.gz: 086aaca8e72f22a5929b0c387f7bcd764649f4f5
5
5
  SHA512:
6
- metadata.gz: 9843ba1124acbebff0cdf228974e21b92737396dc5bcd7e91dd5cae4b40a915f551970ccadd3555ae49b5c36c4827a283011329b7a7adc56fdac5a2ebd48faae
7
- data.tar.gz: 45e259721177024b33d2a80fc74c289ac2082ac1f19c1c79922cac06741880dc6c6400e171cd3a216124e3d5945b03e6fb06ad1401960b01a28b33b3fa13eab8
6
+ metadata.gz: b33d96269b99e1b66364a04c1f3b552c08060b04468a9936386acc169ffc4dd855668e810549c9426154739a9c9a85fa0c4e805ecad7d18def382d2e79ab35d2
7
+ data.tar.gz: 7b4a98ea88197847dd83f710e558df8446d2c11fe01954517faf8051ac311891627452a84174467b297370a69248f9eb2bfafef741997712a2437d902824b03a
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ /tags
data/.travis.yml CHANGED
@@ -2,6 +2,7 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
+ - 2.1
5
6
  notifications:
6
7
  irc:
7
8
  channels:
data/Gemfile CHANGED
@@ -6,7 +6,6 @@ group :development do
6
6
  gem 'coolline'
7
7
  gem 'fuubar'
8
8
  gem 'redcarpet', platforms: :ruby
9
- gem 'rspec'
10
9
  gem 'yard'
11
10
 
12
11
  gem 'guard'
@@ -33,7 +32,7 @@ group :development do
33
32
  end
34
33
  end
35
34
 
36
- group :test do
35
+ group :development, :test do
37
36
  gem 'rack-test'
38
37
  gem 'rspec'
39
38
  gem 'spork'
data/README.md CHANGED
@@ -8,9 +8,14 @@ A server which indexes cookbooks from various sources and hosts it over a REST A
8
8
 
9
9
  $ gem install berkshelf-api
10
10
 
11
- ## Usage
11
+ ## Running the server
12
12
 
13
- TODO: Write usage instructions here
13
+ $ berks-api
14
+ I, [2014-02-21T12:05:07.639699 #43671] INFO -- : Cache Manager starting...
15
+ I, [2014-02-21T12:05:07.639883 #43671] INFO -- : Loading save from /Users/reset/.berkshelf/api-server/cerch
16
+ I, [2014-02-21T12:05:07.640462 #43671] INFO -- : Cache contains 0 items
17
+ I, [2014-02-21T12:05:07.641021 #43671] INFO -- : Cache Builder starting...
18
+ I, [2014-02-21T12:05:07.723779 #43671] INFO -- : REST Gateway listening on 0.0.0.0:26200
14
19
 
15
20
  ## Supported Platforms
16
21
 
@@ -22,7 +27,7 @@ Ruby 1.9.1 and 1.9.2 are not officially supported. If you encounter problems, pl
22
27
 
23
28
  ## Configuring Endpoints
24
29
 
25
- You may configure the endpoints to index by editing the JSON configuration file (default: `~/.berkshelf/api-server/config.json`).
30
+ You may configure the endpoints to index by editing the JSON configuration file (default: `#{ENV['HOME']}/.berkshelf/api-server/config.json`).
26
31
 
27
32
  ### Opscode Community Site
28
33
 
@@ -59,7 +64,8 @@ You may configure the endpoints to index by editing the JSON configuration file
59
64
  ### Github Organization
60
65
 
61
66
  Github limits the rate of requests to their API if not authenticated. For this reason the access_token option
62
- is required.
67
+ is required. The api_endpoint, web_endpoint and ssl_verify options are only needed when you want to point to
68
+ a Github Enterprise server within your own organization
63
69
 
64
70
  ```json
65
71
  {
@@ -68,7 +74,27 @@ is required.
68
74
  "type": "github",
69
75
  "options": {
70
76
  "organization": "opscode-cookbooks",
71
- "access_token": ""
77
+ "access_token": "",
78
+ "api_endpoint": "https://github.enterprise.local/api/v3",
79
+ "web_endpoint": "https://github.enterprise.local",
80
+ "ssl_verify": true
81
+ }
82
+ }
83
+ ]
84
+ }
85
+ ```
86
+
87
+ ### FileStore directory
88
+
89
+ A local directory containing cookbooks.
90
+
91
+ ```json
92
+ {
93
+ "endpoints": [
94
+ {
95
+ "type": "file_store",
96
+ "options": {
97
+ "path": "/Users/chef/code/cookbooks"
72
98
  }
73
99
  }
74
100
  ]
@@ -19,14 +19,15 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
  spec.required_ruby_version = ">= 1.9.3"
21
21
 
22
- spec.add_dependency 'ridley', '~> 2.0'
22
+ spec.add_dependency 'ridley', '~> 3.0.0.rc1'
23
23
  spec.add_dependency 'celluloid', '~> 0.15'
24
24
  spec.add_dependency 'reel', '>= 0.4.0'
25
- spec.add_dependency 'grape', '~> 0.5.0'
25
+ spec.add_dependency 'grape', '~> 0.6'
26
+ spec.add_dependency 'grape-msgpack', '~> 0.1'
26
27
  spec.add_dependency 'hashie', '>= 2.0.4'
27
- spec.add_dependency 'faraday', '~> 0.8.0'
28
+ spec.add_dependency 'faraday', '~> 0.9.0'
28
29
  spec.add_dependency 'retryable', '~> 1.3.3'
29
- spec.add_dependency 'archive', '= 0.0.2'
30
+ spec.add_dependency 'archive', '= 0.0.5'
30
31
  spec.add_dependency 'buff-config', '~> 0.1'
31
32
  spec.add_dependency 'octokit', '~> 2.6'
32
33
  spec.add_dependency 'solve'
@@ -6,6 +6,9 @@ module Berkshelf::API
6
6
 
7
7
  finalizer :finalize_callback
8
8
 
9
+ # @return [String]
10
+ attr_reader :url
11
+
9
12
  # @option options [String] :url
10
13
  # the URL of the target Chef Server
11
14
  # @option options [String] :client_name
@@ -15,11 +18,17 @@ module Berkshelf::API
15
18
  # @option options [Boolean] :ssl_verify
16
19
  # turn ssl verification off if you have an unsigned SSL certificate
17
20
  def initialize(options = {})
18
- @connection = Ridley::Client.new_link(server_url: options[:url], client_key: options[:client_key],
21
+ @url = options[:url]
22
+ @connection = Ridley::Client.new_link(server_url: url, client_key: options[:client_key],
19
23
  client_name: options[:client_name], ssl: { verify: options[:ssl_verify] })
20
24
  super
21
25
  end
22
26
 
27
+ # @return [String]
28
+ def to_s
29
+ friendly_name(url)
30
+ end
31
+
23
32
  # @return [Array<RemoteCookbook>]
24
33
  # The list of cookbooks this builder can find
25
34
  def cookbooks
@@ -0,0 +1,63 @@
1
+ module Berkshelf::API
2
+ class CacheBuilder
3
+ module Worker
4
+ class FileStore < Worker::Base
5
+ worker_type "file_store"
6
+
7
+ # @return [String]
8
+ attr_reader :path
9
+
10
+ # @option options [String] :path
11
+ # the directory to search for local cookbooks
12
+ def initialize(options = {})
13
+ @path = Pathname(options[:path])
14
+ super(options)
15
+ end
16
+
17
+ # @return [String]
18
+ def to_s
19
+ friendly_name(path)
20
+ end
21
+
22
+ # @return [Array<RemoteCookbook>]
23
+ # The list of cookbooks this builder can find
24
+ def cookbooks
25
+ [].tap do |cookbook_versions|
26
+ @path.each_child do |dir|
27
+ next unless dir.cookbook?
28
+ begin
29
+ cookbook = Ridley::Chef::Cookbook.from_path(dir)
30
+ cookbook_versions << RemoteCookbook.new(cookbook.cookbook_name, cookbook.version,
31
+ self.class.worker_type, cookbook.path, priority)
32
+ rescue => ex
33
+ log.debug ex.message
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ # @param [RemoteCookbook] remote
40
+ #
41
+ # @return [Ridley::Chef::Cookbook::Metadata]
42
+ def metadata(remote)
43
+ load_metadata(remote.location_path)
44
+ end
45
+
46
+ private
47
+
48
+ # Helper function for loading metadata from a particular directory
49
+ #
50
+ # @param [String] path
51
+ # path of directory to load from
52
+ #
53
+ # @return [Ridley::Chef::Cookbook::Metadata, nil]
54
+ def load_metadata(path)
55
+ cookbook = Ridley::Chef::Cookbook.from_path(path)
56
+ cookbook.metadata
57
+ rescue => ex
58
+ nil
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -17,11 +17,18 @@ module Berkshelf::API
17
17
  # authentication token for accessing the Github organization. This is necessary
18
18
  # since Github throttles unauthenticated API requests
19
19
  def initialize(options = {})
20
- @connection = Octokit::Client.new(access_token: options[:access_token], auto_paginate: true)
20
+ @connection = Octokit::Client.new(access_token: options[:access_token], auto_paginate: true,
21
+ api_endpoint: options[:api_endpoint], web_endpoint: options[:web_endpoint],
22
+ connection_options: {ssl: {verify: options[:ssl_verify].nil? ? true : options[:ssl_verify]}})
21
23
  @organization = options[:organization]
22
24
  super(options)
23
25
  end
24
26
 
27
+ # @return [String]
28
+ def to_s
29
+ friendly_name(organization)
30
+ end
31
+
25
32
  # @return [Array<RemoteCookbook>]
26
33
  # The list of cookbooks this builder can find
27
34
  def cookbooks
@@ -22,6 +22,11 @@ module Berkshelf::API
22
22
  @priority = options[:priority]
23
23
  end
24
24
 
25
+ # @return [String]
26
+ def to_s
27
+ friendly_name
28
+ end
29
+
25
30
  # @abstract
26
31
  #
27
32
  # @param [RemoteCookbook] remote
@@ -38,6 +43,17 @@ module Berkshelf::API
38
43
  def cookbooks
39
44
  raise RuntimeError, "must be implemented"
40
45
  end
46
+
47
+ private
48
+
49
+ # @param [String] data
50
+ # any string to append to the worker_type
51
+ # @return [String]
52
+ def friendly_name(data = nil)
53
+ string = self.class.worker_type.dup
54
+ string << ": #{data}" if data
55
+ string
56
+ end
41
57
  end
42
58
 
43
59
  class << self
@@ -23,7 +23,7 @@ module Berkshelf::API
23
23
  attr_reader :cache
24
24
 
25
25
  def initialize
26
- log.info "Cache Manager starting..."
26
+ log.info "#{self} starting..."
27
27
  @cache = DependencyCache.new
28
28
  load_save if File.exist?(self.class.cache_file)
29
29
  every(SAVE_INTERVAL) { save }
@@ -79,9 +79,9 @@ module Berkshelf::API
79
79
 
80
80
  # @param [CacheBuilder::Worker::Base] worker
81
81
  def process_worker(worker)
82
- log.info "processing #{worker}"
82
+ log.info "Processing #{worker}"
83
83
  remote_cookbooks = worker.cookbooks
84
- log.info "found #{remote_cookbooks.size} cookbooks from #{worker}"
84
+ log.info "Found #{remote_cookbooks.size} cookbooks from #{worker}"
85
85
  created_cookbooks, deleted_cookbooks = diff(remote_cookbooks, worker.priority)
86
86
  log.debug "#{created_cookbooks.size} cookbooks to be added to the cache from #{worker}"
87
87
  log.debug "#{deleted_cookbooks.size} cookbooks to be removed from the cache from #{worker}"
@@ -93,7 +93,7 @@ module Berkshelf::API
93
93
  created_cookbooks_with_metadata = []
94
94
  until created_cookbooks.empty?
95
95
  work = created_cookbooks.slice!(0,500)
96
- log.info "processing metadata for #{work.size} cookbooks with #{created_cookbooks.size} remaining on #{worker}"
96
+ log.info "Processing metadata for #{work.size} cookbooks with #{created_cookbooks.size} remaining on #{worker}"
97
97
  work.map! do |remote|
98
98
  [ remote, worker.future(:metadata, remote) ]
99
99
  end.map! do |remote, metadata|
@@ -103,7 +103,7 @@ module Berkshelf::API
103
103
  created_cookbooks_with_metadata += work.compact
104
104
  end
105
105
 
106
- log.info "about to merge cookbooks"
106
+ log.info "About to merge cookbooks"
107
107
  merge(created_cookbooks_with_metadata, deleted_cookbooks)
108
108
  log.info "#{self} cache updated."
109
109
  end
@@ -124,6 +124,11 @@ module Berkshelf::API
124
124
  log.info "Cache contains #{@cache.cookbooks.size} items"
125
125
  end
126
126
 
127
+ # @return [String]
128
+ def to_s
129
+ "Cache manager"
130
+ end
131
+
127
132
  private
128
133
 
129
134
  def merge(created_cookbooks, deleted_cookbooks)
@@ -6,14 +6,14 @@ module Berkshelf::API
6
6
  class << self
7
7
  # @return [String]
8
8
  def default_path
9
- home_path = ENV['BERKSHELF_API_PATH'] || "~/.berkshelf/api-server"
9
+ home_path = ENV['BERKSHELF_API_PATH'] || "#{ENV['HOME']}/.berkshelf/api-server"
10
10
  File.expand_path(File.join(home_path, "config.json"))
11
11
  end
12
12
  end
13
13
 
14
14
  attribute 'home_path',
15
15
  type: String,
16
- default: File.expand_path("~/.berkshelf/api-server")
16
+ default: File.expand_path("#{ENV['HOME']}/.berkshelf/api-server")
17
17
 
18
18
  attribute 'endpoints',
19
19
  type: Array,
@@ -0,0 +1,9 @@
1
+ class Pathname
2
+ # Returns true or false if the path contains a "metadata.json" or a "metadata.rb" file.
3
+ #
4
+ # @return [Boolean]
5
+ def cookbook?
6
+ join("metadata.json").exist? || join("metadata.rb").exist?
7
+ end
8
+ alias_method :chef_cookbook?, :cookbook?
9
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
2
+ require_relative "core_ext/#{File.basename(path, '.rb')}"
3
+ end
@@ -117,6 +117,15 @@ module Berkshelf::API
117
117
  JSON.generate(output, options)
118
118
  end
119
119
 
120
+ # @param [Hash] options
121
+ #
122
+ # @return [String]
123
+ def to_msgpack(options = {})
124
+ output = to_hash
125
+ output['endpoints_checksum'] = Application.config.endpoints_checksum if options[:saving]
126
+ MessagePack.pack(output)
127
+ end
128
+
120
129
  # @return [Array<RemoteCookbook>]
121
130
  def cookbooks
122
131
  [].tap do |remote_cookbooks|
@@ -3,7 +3,7 @@ module Berkshelf::API
3
3
  class V1 < Endpoint::Base
4
4
  helpers Berkshelf::API::Mixin::Services
5
5
  version 'v1', using: :header, vendor: 'berkshelf'
6
- format :json
6
+ default_format :json
7
7
 
8
8
  rescue_from Grape::Exceptions::Validation do |e|
9
9
  body = JSON.generate({status: e.status, message: e.message, param: e.param})
@@ -1,4 +1,5 @@
1
1
  require 'grape'
2
+ require 'grape-msgpack'
2
3
 
3
4
  module Berkshelf::API
4
5
  module Endpoint
@@ -99,14 +99,14 @@ module Berkshelf::API
99
99
  #
100
100
  # @return [String, nil]
101
101
  def download(name, version, destination = Dir.mktmpdir)
102
- log.debug "downloading #{name}(#{version})"
102
+ log.debug "Downloading #{name}(#{version})"
103
103
  if uri = download_uri(name, version)
104
104
  begin
105
105
  archive = stream(uri)
106
106
  Archive.extract(archive.path, destination)
107
107
  destination
108
108
  rescue => ex
109
- log.warn "error downloading/extracting #{name} (#{version}): #{ex}"
109
+ log.warn "Error downloading/extracting #{name} (#{version}): #{ex}"
110
110
  nil
111
111
  ensure
112
112
  archive.unlink unless archive.nil?
@@ -1,5 +1,5 @@
1
1
  module Berkshelf
2
2
  module API
3
- VERSION = "1.1.1"
3
+ VERSION = "1.2.0.rc1"
4
4
  end
5
5
  end
data/lib/berkshelf/api.rb CHANGED
@@ -5,6 +5,8 @@ require 'ridley'
5
5
  require 'faraday'
6
6
  require 'json'
7
7
 
8
+ require_relative 'api/core_ext'
9
+
8
10
  module Berkshelf
9
11
  module API
10
12
  require_relative 'api/errors'
@@ -0,0 +1,6 @@
1
+ name "example_cookbook"
2
+ maintainer "Josiah Kiehl"
3
+ maintainer_email "jkiehl@riotgames.com"
4
+ license "DO WHAT YOU WANT CAUSE A PIRATE IS FREE"
5
+ description "Installs/Configures example_cookbook"
6
+ version "0.5.0"
@@ -0,0 +1,9 @@
1
+ shared_examples_for "a human-readable string" do
2
+ it "does not start with Ruby object notation" do
3
+ expect(subject.to_s).to_not start_with("#<")
4
+ end
5
+
6
+ it "does not contain a hex prefix" do
7
+ expect(subject.to_s).to_not match(%r{0x[0-9a-f]+})
8
+ end
9
+ end
@@ -11,6 +11,8 @@ describe Berkshelf::API::CacheBuilder::Worker::ChefServer do
11
11
  client_key: fixtures_path.join("reset.pem"))
12
12
  end
13
13
 
14
+ it_behaves_like "a human-readable string"
15
+
14
16
  describe "#cookbooks" do
15
17
  before do
16
18
  chef_cookbook("ruby", "1.0.0")
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe Berkshelf::API::CacheBuilder::Worker::FileStore do
4
+ describe "ClassMethods" do
5
+ subject { described_class }
6
+ its(:worker_type) { should eql("file_store") }
7
+ end
8
+
9
+ subject do
10
+ described_class.new(path: fixtures_path.join("cookbooks"))
11
+ end
12
+
13
+ it_behaves_like "a human-readable string"
14
+
15
+ describe "#cookbooks" do
16
+ it "returns an array containing an item for each valid cookbook on the server" do
17
+ expect(subject.cookbooks).to have(1).items
18
+ end
19
+
20
+ it "returns an array of RemoteCookbooks" do
21
+ subject.cookbooks.each do |cookbook|
22
+ expect(cookbook).to be_a(Berkshelf::API::RemoteCookbook)
23
+ end
24
+ end
25
+
26
+ it "each RemoteCookbook is tagged with a location_type matching the worker_type of the builder" do
27
+ subject.cookbooks.each do |cookbook|
28
+ expect(cookbook.location_type).to eql(described_class.worker_type)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -44,6 +44,8 @@ describe Berkshelf::API::CacheBuilder::Worker::Github do
44
44
  described_class.new(organization: "opscode-cookbooks", access_token: "asdf")
45
45
  end
46
46
 
47
+ it_behaves_like "a human-readable string"
48
+
47
49
  describe "#cookbooks" do
48
50
  before do
49
51
  expect(connection).to receive(:organization_repositories) { repos }
@@ -20,6 +20,8 @@ describe Berkshelf::API::CacheBuilder::Worker::Opscode do
20
20
  described_class.new
21
21
  end
22
22
 
23
+ it_behaves_like "a human-readable string"
24
+
23
25
  describe "#cookbooks" do
24
26
  let(:location_type) { described_class.worker_type }
25
27
  let(:location_path) { Berkshelf::API::SiteConnector::Opscode::V1_API}
@@ -41,6 +41,8 @@ describe Berkshelf::API::CacheManager do
41
41
 
42
42
  subject { described_class.new }
43
43
 
44
+ it_behaves_like "a human-readable string"
45
+
44
46
  describe "#add" do
45
47
  pending
46
48
  end
@@ -6,6 +6,7 @@ describe Berkshelf::API::Endpoint::V1 do
6
6
 
7
7
  let(:app) { described_class.new }
8
8
  let(:cache_warm) { false }
9
+ let(:rack_env) { Hash.new }
9
10
 
10
11
  before do
11
12
  Berkshelf::API::CacheManager.start
@@ -15,14 +16,34 @@ describe Berkshelf::API::Endpoint::V1 do
15
16
  subject { last_response }
16
17
 
17
18
  describe "GET /universe" do
18
- before { get '/universe' }
19
+ before { get '/universe', {}, rack_env }
19
20
  let(:app_cache) { cache_manager.cache }
20
21
 
21
22
  context "the cache has been warmed" do
22
23
  let(:cache_warm) { true }
24
+ context "the default format is json" do
25
+ subject { last_response }
26
+ let(:app_cache) { cache_manager.cache }
23
27
 
24
- its(:status) { should be(200) }
25
- its(:body) { should eq(app_cache.to_json) }
28
+ its(:status) { should be(200) }
29
+ its(:body) { should eq(app_cache.to_json) }
30
+ end
31
+ context "the user requests json" do
32
+ subject { last_response }
33
+ let(:app_cache) { cache_manager.cache }
34
+ let(:rack_env) { { 'HTTP_ACCEPT' => 'application/json' } }
35
+
36
+ its(:status) { should be(200) }
37
+ its(:body) { should eq(app_cache.to_json) }
38
+ end
39
+ context "the user requests msgpack" do
40
+ subject { last_response }
41
+ let(:app_cache) { cache_manager.cache }
42
+ let(:rack_env) { { 'HTTP_ACCEPT' => 'application/x-msgpack' } }
43
+
44
+ its(:status) { should be(200) }
45
+ its(:body) { should eq(app_cache.to_msgpack) }
46
+ end
26
47
  end
27
48
 
28
49
  context "the cache is still warming" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkshelf-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Winsor
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-06 00:00:00.000000000 Z
12
+ date: 2014-04-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ridley
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ~>
19
19
  - !ruby/object:Gem::Version
20
- version: '2.0'
20
+ version: 3.0.0.rc1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
- version: '2.0'
27
+ version: 3.0.0.rc1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: celluloid
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -59,14 +59,28 @@ dependencies:
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 0.5.0
62
+ version: '0.6'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - ~>
68
68
  - !ruby/object:Gem::Version
69
- version: 0.5.0
69
+ version: '0.6'
70
+ - !ruby/object:Gem::Dependency
71
+ name: grape-msgpack
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ version: '0.1'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ~>
82
+ - !ruby/object:Gem::Version
83
+ version: '0.1'
70
84
  - !ruby/object:Gem::Dependency
71
85
  name: hashie
72
86
  requirement: !ruby/object:Gem::Requirement
@@ -87,14 +101,14 @@ dependencies:
87
101
  requirements:
88
102
  - - ~>
89
103
  - !ruby/object:Gem::Version
90
- version: 0.8.0
104
+ version: 0.9.0
91
105
  type: :runtime
92
106
  prerelease: false
93
107
  version_requirements: !ruby/object:Gem::Requirement
94
108
  requirements:
95
109
  - - ~>
96
110
  - !ruby/object:Gem::Version
97
- version: 0.8.0
111
+ version: 0.9.0
98
112
  - !ruby/object:Gem::Dependency
99
113
  name: retryable
100
114
  requirement: !ruby/object:Gem::Requirement
@@ -115,14 +129,14 @@ dependencies:
115
129
  requirements:
116
130
  - - '='
117
131
  - !ruby/object:Gem::Version
118
- version: 0.0.2
132
+ version: 0.0.5
119
133
  type: :runtime
120
134
  prerelease: false
121
135
  version_requirements: !ruby/object:Gem::Requirement
122
136
  requirements:
123
137
  - - '='
124
138
  - !ruby/object:Gem::Version
125
- version: 0.0.2
139
+ version: 0.0.5
126
140
  - !ruby/object:Gem::Dependency
127
141
  name: buff-config
128
142
  requirement: !ruby/object:Gem::Requirement
@@ -234,10 +248,13 @@ files:
234
248
  - lib/berkshelf/api/cache_builder.rb
235
249
  - lib/berkshelf/api/cache_builder/worker.rb
236
250
  - lib/berkshelf/api/cache_builder/worker/chef_server.rb
251
+ - lib/berkshelf/api/cache_builder/worker/file_store.rb
237
252
  - lib/berkshelf/api/cache_builder/worker/github.rb
238
253
  - lib/berkshelf/api/cache_builder/worker/opscode.rb
239
254
  - lib/berkshelf/api/cache_manager.rb
240
255
  - lib/berkshelf/api/config.rb
256
+ - lib/berkshelf/api/core_ext.rb
257
+ - lib/berkshelf/api/core_ext/pathname.rb
241
258
  - lib/berkshelf/api/cucumber.rb
242
259
  - lib/berkshelf/api/dependency_cache.rb
243
260
  - lib/berkshelf/api/endpoint.rb
@@ -256,12 +273,15 @@ files:
256
273
  - lib/berkshelf/api/site_connector/opscode.rb
257
274
  - lib/berkshelf/api/srv_ctl.rb
258
275
  - lib/berkshelf/api/version.rb
276
+ - spec/fixtures/cookbooks/example_cookbook/metadata.rb
259
277
  - spec/fixtures/reset.pem
260
278
  - spec/spec_helper.rb
261
279
  - spec/support/actor_mocking.rb
262
280
  - spec/support/chef_server.rb
281
+ - spec/support/human_reaable.rb
263
282
  - spec/unit/berkshelf/api/application_spec.rb
264
283
  - spec/unit/berkshelf/api/cache_builder/worker/chef_server_spec.rb
284
+ - spec/unit/berkshelf/api/cache_builder/worker/file_store_spec.rb
265
285
  - spec/unit/berkshelf/api/cache_builder/worker/github_spec.rb
266
286
  - spec/unit/berkshelf/api/cache_builder/worker/opscode_spec.rb
267
287
  - spec/unit/berkshelf/api/cache_builder/worker_spec.rb
@@ -291,9 +311,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
291
311
  version: 1.9.3
292
312
  required_rubygems_version: !ruby/object:Gem::Requirement
293
313
  requirements:
294
- - - '>='
314
+ - - '>'
295
315
  - !ruby/object:Gem::Version
296
- version: '0'
316
+ version: 1.3.1
297
317
  requirements: []
298
318
  rubyforge_project:
299
319
  rubygems_version: 2.0.14
@@ -302,12 +322,15 @@ specification_version: 4
302
322
  summary: A server which indexes cookbooks from various sources and hosts it over a
303
323
  REST API
304
324
  test_files:
325
+ - spec/fixtures/cookbooks/example_cookbook/metadata.rb
305
326
  - spec/fixtures/reset.pem
306
327
  - spec/spec_helper.rb
307
328
  - spec/support/actor_mocking.rb
308
329
  - spec/support/chef_server.rb
330
+ - spec/support/human_reaable.rb
309
331
  - spec/unit/berkshelf/api/application_spec.rb
310
332
  - spec/unit/berkshelf/api/cache_builder/worker/chef_server_spec.rb
333
+ - spec/unit/berkshelf/api/cache_builder/worker/file_store_spec.rb
311
334
  - spec/unit/berkshelf/api/cache_builder/worker/github_spec.rb
312
335
  - spec/unit/berkshelf/api/cache_builder/worker/opscode_spec.rb
313
336
  - spec/unit/berkshelf/api/cache_builder/worker_spec.rb