berkshelf 0.1.1 → 0.1.2
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.
- data/features/step_definitions/berksfile_steps.rb +8 -0
- data/features/support/env.rb +15 -8
- data/features/upload_command.feature +13 -0
- data/lib/berkshelf/berksfile.rb +22 -27
- data/lib/berkshelf/cached_cookbook.rb +5 -1
- data/lib/berkshelf/resolver.rb +11 -12
- data/lib/berkshelf/uploader.rb +23 -36
- data/lib/berkshelf/version.rb +1 -1
- data/spec/unit/berkshelf/resolver_spec.rb +16 -2
- data/spec/unit/berkshelf/uploader_spec.rb +14 -47
- metadata +43 -41
@@ -0,0 +1,8 @@
|
|
1
|
+
Given /^a Berksfile with path location sources to fixtures:$/ do |cookbooks|
|
2
|
+
lines = []
|
3
|
+
cookbooks.raw.each do |name, fixture|
|
4
|
+
fixture_path = fixtures_path.join("cookbooks", fixture)
|
5
|
+
lines << "cookbook '#{name}', path: '#{fixture_path}'"
|
6
|
+
end
|
7
|
+
write_file("Berksfile", lines.join("\n"))
|
8
|
+
end
|
data/features/support/env.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
-
Bundler.setup
|
4
3
|
require 'spork'
|
5
4
|
|
6
5
|
Spork.prefork do
|
@@ -12,6 +11,12 @@ Spork.prefork do
|
|
12
11
|
APP_ROOT = File.expand_path('../../../', __FILE__)
|
13
12
|
|
14
13
|
ENV["BERKSHELF_PATH"] = File.join(APP_ROOT, "tmp", "berkshelf")
|
14
|
+
|
15
|
+
begin
|
16
|
+
CONFIG = YAML.load(File.read(File.join(APP_ROOT, "features", "config.yml")))
|
17
|
+
rescue Errno::ENOENT
|
18
|
+
raise "Please create a config file at features/config.yml from the sample found at features/config.sample.yml"
|
19
|
+
end
|
15
20
|
|
16
21
|
Dir[File.join(APP_ROOT, "spec/support/**/*.rb")].each {|f| require f}
|
17
22
|
|
@@ -22,9 +27,9 @@ Spork.prefork do
|
|
22
27
|
end
|
23
28
|
|
24
29
|
Before do
|
25
|
-
Chef::Config[:chef_server_url] =
|
26
|
-
Chef::Config[:client_key] =
|
27
|
-
Chef::Config[:node_name] =
|
30
|
+
Chef::Config[:chef_server_url] = CONFIG['chef_server_url']
|
31
|
+
Chef::Config[:client_key] = CONFIG['client_key']
|
32
|
+
Chef::Config[:node_name] = CONFIG['node_name']
|
28
33
|
clean_cookbook_store
|
29
34
|
@aruba_io_wait_seconds = 5
|
30
35
|
end
|
@@ -43,10 +48,12 @@ Spork.prefork do
|
|
43
48
|
FileUtils.mkdir_p(cookbook_store)
|
44
49
|
end
|
45
50
|
|
46
|
-
def
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
def app_root_path
|
52
|
+
Pathname.new(APP_ROOT)
|
53
|
+
end
|
54
|
+
|
55
|
+
def fixtures_path
|
56
|
+
app_root_path.join('spec/fixtures')
|
50
57
|
end
|
51
58
|
end
|
52
59
|
|
@@ -41,3 +41,16 @@ Feature: upload command
|
|
41
41
|
| mysql | 1.2.4 |
|
42
42
|
| openssl | 1.0.0 |
|
43
43
|
And the exit status should be 0
|
44
|
+
|
45
|
+
@slow_process
|
46
|
+
Scenario: running the upload command with a Berksfile containing a source that has a path location
|
47
|
+
Given a Berksfile with path location sources to fixtures:
|
48
|
+
| example_cookbook | example_cookbook-0.5.0 |
|
49
|
+
And the Chef server does not have the cookbooks:
|
50
|
+
| example_cookbook | 0.5.0 |
|
51
|
+
When I run the upload command
|
52
|
+
Then the output should contain "Using example_cookbook (0.5.0) at path:"
|
53
|
+
And the output should contain "Uploading example_cookbook (0.5.0) to:"
|
54
|
+
And the Chef server should have the cookbooks:
|
55
|
+
| example_cookbook | 0.5.0 |
|
56
|
+
And the exit status should be 0
|
data/lib/berkshelf/berksfile.rb
CHANGED
@@ -67,12 +67,9 @@ module Berkshelf
|
|
67
67
|
@sources.has_key?(source.to_s)
|
68
68
|
end
|
69
69
|
|
70
|
-
# @
|
71
|
-
#
|
72
|
-
#
|
73
|
-
# Options:
|
74
|
-
# exclude: An array of groups to exclude from the returned Array
|
75
|
-
# of sources
|
70
|
+
# @option options [Symbol, Array] :exclude
|
71
|
+
# Group(s) to exclude to exclude from the returned Array of sources
|
72
|
+
# group to not be installed
|
76
73
|
#
|
77
74
|
# @return [Array<Berkshelf::CookbookSource>]
|
78
75
|
def sources(options = {})
|
@@ -119,12 +116,9 @@ module Berkshelf
|
|
119
116
|
end
|
120
117
|
alias_method :get_source, :[]
|
121
118
|
|
122
|
-
# @
|
123
|
-
# a
|
124
|
-
#
|
125
|
-
# Options:
|
126
|
-
# without: An array of groups to exclude which will cause any sources
|
127
|
-
# marked as a member of the group to not be installed
|
119
|
+
# @option options [Symbol, Array] :without
|
120
|
+
# Group(s) to exclude which will cause any sources marked as a member of the
|
121
|
+
# group to not be installed
|
128
122
|
def install(options = {})
|
129
123
|
resolver = Resolver.new(Berkshelf.downloader, sources(exclude: options[:without]))
|
130
124
|
resolver.resolve
|
@@ -134,26 +128,27 @@ module Berkshelf
|
|
134
128
|
# @param [String] chef_server_url
|
135
129
|
# the full URL to the Chef Server to upload to
|
136
130
|
#
|
137
|
-
# Example:
|
138
131
|
# "https://api.opscode.com/organizations/vialstudios"
|
139
132
|
#
|
140
|
-
# @
|
141
|
-
# a
|
142
|
-
#
|
143
|
-
#
|
144
|
-
#
|
145
|
-
#
|
146
|
-
#
|
147
|
-
#
|
148
|
-
#
|
149
|
-
#
|
133
|
+
# @option options [Symbol, Array] :without
|
134
|
+
# Group(s) to exclude which will cause any sources marked as a member of the
|
135
|
+
# group to not be installed
|
136
|
+
# @option options [String] :node_name
|
137
|
+
# the name of the client used to sign REST requests to the Chef Server
|
138
|
+
# @option options [String] :client_key
|
139
|
+
# the filepath location for the client's key used to sign REST requests
|
140
|
+
# to the Chef Server
|
141
|
+
# @option options [Boolean] :force Upload the Cookbook even if the version
|
142
|
+
# already exists and is frozen on the target Chef Server
|
143
|
+
# @option options [Boolean] :freeze Freeze the uploaded Cookbook on the Chef
|
144
|
+
# Server so that it cannot be overwritten
|
150
145
|
def upload(chef_server_url, options = {})
|
151
|
-
uploader = Uploader.new(
|
146
|
+
uploader = Uploader.new(chef_server_url, options)
|
152
147
|
resolver = Resolver.new(Berkshelf.downloader, sources(exclude: options[:without]))
|
153
148
|
|
154
|
-
resolver.resolve.each do |
|
155
|
-
Berkshelf.ui.info "Uploading #{
|
156
|
-
uploader.upload!(
|
149
|
+
resolver.resolve.each do |cb|
|
150
|
+
Berkshelf.ui.info "Uploading #{cb.cookbook_name} (#{cb.version}) to: #{chef_server_url}"
|
151
|
+
uploader.upload!(cb, options)
|
157
152
|
end
|
158
153
|
end
|
159
154
|
|
@@ -71,7 +71,7 @@ module Berkshelf
|
|
71
71
|
|
72
72
|
def initialize(name, path, metadata)
|
73
73
|
@cookbook_name = name
|
74
|
-
@path = path
|
74
|
+
@path = Pathname.new(path)
|
75
75
|
@metadata = metadata
|
76
76
|
@files = Array.new
|
77
77
|
@manifest = Mash.new(
|
@@ -178,6 +178,10 @@ module Berkshelf
|
|
178
178
|
result.to_json(*a)
|
179
179
|
end
|
180
180
|
|
181
|
+
def to_s
|
182
|
+
"#{cookbook_name} (#{version}) '#{path}'"
|
183
|
+
end
|
184
|
+
|
181
185
|
private
|
182
186
|
|
183
187
|
attr_reader :files
|
data/lib/berkshelf/resolver.rb
CHANGED
@@ -79,20 +79,19 @@ module Berkshelf
|
|
79
79
|
@sources.collect { |name, source| source }
|
80
80
|
end
|
81
81
|
|
82
|
-
#
|
83
|
-
#
|
84
|
-
# their locked version as values.
|
82
|
+
# Finds a solution for the currently added sources and their dependencies and
|
83
|
+
# returns an array of CachedCookbooks.
|
85
84
|
#
|
86
|
-
#
|
87
|
-
# {
|
88
|
-
# "nginx" => 0.101.0,
|
89
|
-
# "build-essential" => 1.0.2,
|
90
|
-
# "runit" => 0.15.0,
|
91
|
-
# "bluepill" => 1.0.4,
|
92
|
-
# "ohai" => 1.0.2
|
93
|
-
# }
|
85
|
+
# @return [Array<Berkshelf::CachedCookbook>]
|
94
86
|
def resolve
|
95
|
-
quietly { selector.find_solution(solution_constraints) }
|
87
|
+
solution = quietly { selector.find_solution(solution_constraints) }
|
88
|
+
|
89
|
+
[].tap do |cached_cookbooks|
|
90
|
+
solution.each do |name, version|
|
91
|
+
source = get_source(name)
|
92
|
+
cached_cookbooks << CachedCookbook.new(source.name, source.local_path, source.metadata)
|
93
|
+
end
|
94
|
+
end
|
96
95
|
end
|
97
96
|
|
98
97
|
# @param [#to_s] source
|
data/lib/berkshelf/uploader.rb
CHANGED
@@ -5,64 +5,51 @@ require 'chef/config'
|
|
5
5
|
module Berkshelf
|
6
6
|
# @author Jamie Winsor <jamie@vialstudios.com>
|
7
7
|
class Uploader
|
8
|
-
attr_reader :cookbook_store
|
9
8
|
attr_reader :server_url
|
10
9
|
attr_reader :queue
|
11
10
|
|
12
|
-
# @param [Berkshelf::CookbookStore] cookbook_store
|
13
|
-
# the CookbookStore containing the Cookbooks you with to upload
|
14
11
|
# @param [String] server_url
|
15
12
|
# the URL to the Chef Server to upload Cookbooks to
|
16
|
-
# @param [Hash] options
|
17
|
-
# a hash of options
|
18
13
|
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
14
|
+
# @option options [String] :node_name
|
15
|
+
# the name of the client used to sign REST requests to the Chef Server
|
16
|
+
#
|
17
|
+
# Default: the value of Chef::Config[:node_name]
|
18
|
+
# @option options [String] :client_key
|
19
|
+
# the filepath location for the client's key used to sign REST requests
|
20
|
+
# to the Chef Server
|
24
21
|
#
|
25
|
-
#
|
26
|
-
|
27
|
-
#
|
28
|
-
# Default: the value of Chef::Config[:client_key]
|
29
|
-
def initialize(cookbook_store, server_url, options = {})
|
22
|
+
# Default: the value of Chef::Config[:client_key]
|
23
|
+
def initialize(server_url, options = {})
|
30
24
|
options[:node_name] ||= Chef::Config[:node_name]
|
31
25
|
options[:client_key] ||= Chef::Config[:client_key]
|
32
26
|
|
33
|
-
@cookbook_store = cookbook_store
|
34
27
|
@server_url = server_url
|
35
28
|
@rest = Chef::REST.new(server_url, options[:node_name], options[:client_key])
|
36
29
|
@queue = []
|
37
30
|
end
|
38
31
|
|
39
|
-
# Uploads
|
32
|
+
# Uploads a CachedCookbook from a CookbookStore to this instances Chef Server URL
|
40
33
|
#
|
41
|
-
# @param [
|
42
|
-
#
|
43
|
-
# @param [String] version
|
44
|
-
# version of the Cookbook to upload
|
45
|
-
# @param [Hash] options
|
46
|
-
# a hash of options
|
34
|
+
# @param [CachedCookbook] cookbook
|
35
|
+
# a cached cookbook to upload
|
47
36
|
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
37
|
+
# @option options [Boolean] :force
|
38
|
+
# Upload the Cookbook even if the version already exists and is frozen on
|
39
|
+
# the target Chef Server
|
40
|
+
# @option options [Boolean] :freeze
|
41
|
+
# Freeze the uploaded Cookbook on the Chef Server so that it cannot be
|
42
|
+
# overwritten
|
53
43
|
#
|
54
44
|
# @return [TXResult]
|
55
|
-
def upload(
|
56
|
-
upload!(
|
45
|
+
def upload(cookbook, options = {})
|
46
|
+
upload!(cookbook, options)
|
57
47
|
rescue BerkshelfError => e
|
58
48
|
TXResult.new(:error, e.message)
|
59
49
|
end
|
60
50
|
|
61
|
-
#
|
62
|
-
def upload!(
|
63
|
-
cookbook = cookbook_store.cookbook(name, version)
|
64
|
-
raise UploadFailure, "Source not downloaded" if cookbook.nil?
|
65
|
-
|
51
|
+
# @see #upload
|
52
|
+
def upload!(cookbook, options = {})
|
66
53
|
cookbook.validate!
|
67
54
|
|
68
55
|
checksums = cookbook.checksums.dup
|
@@ -71,7 +58,7 @@ module Berkshelf
|
|
71
58
|
commit_sandbox(new_sandbox)
|
72
59
|
save_cookbook(cookbook, options)
|
73
60
|
|
74
|
-
TXResult.new(:ok, "#{
|
61
|
+
TXResult.new(:ok, "#{cookbook.cookbook_name} (#{cookbook.version}) uploaded to: #{server_url}")
|
75
62
|
end
|
76
63
|
|
77
64
|
private
|
data/lib/berkshelf/version.rb
CHANGED
@@ -116,10 +116,24 @@ module Berkshelf
|
|
116
116
|
describe "#resolve" do
|
117
117
|
before(:each) do
|
118
118
|
subject.add_source(source)
|
119
|
+
@solution = subject.resolve
|
119
120
|
end
|
120
121
|
|
121
|
-
it "returns
|
122
|
-
|
122
|
+
it "returns an array of CachedCookbooks" do
|
123
|
+
@solution.each do |item|
|
124
|
+
item.should be_a(CachedCookbook)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it "returns a CachedCookbook for each resolved source" do
|
129
|
+
@solution.should have(2).items
|
130
|
+
end
|
131
|
+
|
132
|
+
it "resolves the given mysql source" do
|
133
|
+
@solution[0].cookbook_name.should eql("mysql")
|
134
|
+
@solution[0].version.should eql("1.2.4")
|
135
|
+
@solution[1].cookbook_name.should eql("openssl")
|
136
|
+
@solution[1].version.should eql("1.0.0")
|
123
137
|
end
|
124
138
|
end
|
125
139
|
end
|
@@ -2,68 +2,35 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Berkshelf
|
4
4
|
describe Uploader do
|
5
|
-
let(:cookbook_store) { double('cookbook_store') }
|
6
5
|
let(:server_url) { "https://api.opscode.com/organizations/vialstudios" }
|
7
6
|
let(:client_key) { '/Users/reset/.chef/reset.pem' }
|
8
7
|
let(:node_name) { 'reset' }
|
9
8
|
|
10
|
-
subject { Uploader.new(
|
9
|
+
subject { Uploader.new(server_url, client_key: client_key, node_name: node_name) }
|
11
10
|
|
12
11
|
describe "#upload" do
|
13
|
-
let(:cookbook) { double('nginx', name: "nginx", version: "0.101.2") }
|
12
|
+
let(:cookbook) { double('nginx', name: "nginx-0.101.2", cookbook_name: "nginx", version: "0.101.2") }
|
14
13
|
|
15
|
-
context "when cookbook is
|
14
|
+
context "when cookbook is valid" do
|
16
15
|
before(:each) do
|
17
|
-
|
16
|
+
cookbook.should_receive(:validate!).and_return(true)
|
17
|
+
cookbook.should_receive(:checksums).and_return("da97c94bb6acb2b7900cbf951654fea3"=>"/Users/reset/code/berkshelf/spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb")
|
18
|
+
subject.should_receive(:create_sandbox)
|
19
|
+
subject.should_receive(:upload_checksums_to_sandbox)
|
20
|
+
subject.should_receive(:commit_sandbox)
|
21
|
+
subject.should_receive(:save_cookbook)
|
18
22
|
end
|
19
23
|
|
20
|
-
|
21
|
-
|
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
|
24
|
+
it "returns a successful TXResult" do
|
25
|
+
subject.upload(cookbook).should be_success
|
41
26
|
end
|
42
27
|
end
|
43
28
|
|
44
|
-
context "when cookbook is not
|
45
|
-
before(:each)
|
46
|
-
cookbook_store.stub(:cookbook) { nil }
|
47
|
-
end
|
29
|
+
context "when cookbook is not valid" do
|
30
|
+
before(:each) { cookbook.should_receive(:validate!).and_raise(CookbookSyntaxError) }
|
48
31
|
|
49
32
|
it "returns a failed TXResult" do
|
50
|
-
subject.upload(cookbook.
|
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)
|
33
|
+
subject.upload(cookbook).should be_failed
|
67
34
|
end
|
68
35
|
end
|
69
36
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: berkshelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,11 +12,11 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-06-
|
15
|
+
date: 2012-06-22 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: dep_selector
|
19
|
-
requirement: &
|
19
|
+
requirement: &70134686922100 !ruby/object:Gem::Requirement
|
20
20
|
none: false
|
21
21
|
requirements:
|
22
22
|
- - ! '>='
|
@@ -24,10 +24,10 @@ dependencies:
|
|
24
24
|
version: '0'
|
25
25
|
type: :runtime
|
26
26
|
prerelease: false
|
27
|
-
version_requirements: *
|
27
|
+
version_requirements: *70134686922100
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: chef
|
30
|
-
requirement: &
|
30
|
+
requirement: &70134686921160 !ruby/object:Gem::Requirement
|
31
31
|
none: false
|
32
32
|
requirements:
|
33
33
|
- - ~>
|
@@ -35,10 +35,10 @@ dependencies:
|
|
35
35
|
version: 0.10.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
|
-
version_requirements: *
|
38
|
+
version_requirements: *70134686921160
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
40
|
name: minitar
|
41
|
-
requirement: &
|
41
|
+
requirement: &70134686920480 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
44
|
- - ! '>='
|
@@ -46,10 +46,10 @@ dependencies:
|
|
46
46
|
version: '0'
|
47
47
|
type: :runtime
|
48
48
|
prerelease: false
|
49
|
-
version_requirements: *
|
49
|
+
version_requirements: *70134686920480
|
50
50
|
- !ruby/object:Gem::Dependency
|
51
51
|
name: thor
|
52
|
-
requirement: &
|
52
|
+
requirement: &70134686919240 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
54
54
|
requirements:
|
55
55
|
- - ~>
|
@@ -57,10 +57,10 @@ dependencies:
|
|
57
57
|
version: 0.15.2
|
58
58
|
type: :runtime
|
59
59
|
prerelease: false
|
60
|
-
version_requirements: *
|
60
|
+
version_requirements: *70134686919240
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: cucumber
|
63
|
-
requirement: &
|
63
|
+
requirement: &70134686918520 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
65
65
|
requirements:
|
66
66
|
- - ! '>='
|
@@ -68,10 +68,10 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
type: :development
|
70
70
|
prerelease: false
|
71
|
-
version_requirements: *
|
71
|
+
version_requirements: *70134686918520
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: vcr
|
74
|
-
requirement: &
|
74
|
+
requirement: &70134686917060 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
76
76
|
requirements:
|
77
77
|
- - ! '>='
|
@@ -79,10 +79,10 @@ dependencies:
|
|
79
79
|
version: '0'
|
80
80
|
type: :development
|
81
81
|
prerelease: false
|
82
|
-
version_requirements: *
|
82
|
+
version_requirements: *70134686917060
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: webmock
|
85
|
-
requirement: &
|
85
|
+
requirement: &70134686932520 !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
87
87
|
requirements:
|
88
88
|
- - ! '>='
|
@@ -90,10 +90,10 @@ dependencies:
|
|
90
90
|
version: '0'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
|
-
version_requirements: *
|
93
|
+
version_requirements: *70134686932520
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: aruba
|
96
|
-
requirement: &
|
96
|
+
requirement: &70134686931720 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
99
|
- - ! '>='
|
@@ -101,10 +101,10 @@ dependencies:
|
|
101
101
|
version: '0'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
|
-
version_requirements: *
|
104
|
+
version_requirements: *70134686931720
|
105
105
|
- !ruby/object:Gem::Dependency
|
106
106
|
name: rspec
|
107
|
-
requirement: &
|
107
|
+
requirement: &70134686931040 !ruby/object:Gem::Requirement
|
108
108
|
none: false
|
109
109
|
requirements:
|
110
110
|
- - ! '>='
|
@@ -112,10 +112,10 @@ dependencies:
|
|
112
112
|
version: '0'
|
113
113
|
type: :development
|
114
114
|
prerelease: false
|
115
|
-
version_requirements: *
|
115
|
+
version_requirements: *70134686931040
|
116
116
|
- !ruby/object:Gem::Dependency
|
117
117
|
name: json_spec
|
118
|
-
requirement: &
|
118
|
+
requirement: &70134686930320 !ruby/object:Gem::Requirement
|
119
119
|
none: false
|
120
120
|
requirements:
|
121
121
|
- - ! '>='
|
@@ -123,10 +123,10 @@ dependencies:
|
|
123
123
|
version: '0'
|
124
124
|
type: :development
|
125
125
|
prerelease: false
|
126
|
-
version_requirements: *
|
126
|
+
version_requirements: *70134686930320
|
127
127
|
- !ruby/object:Gem::Dependency
|
128
128
|
name: simplecov
|
129
|
-
requirement: &
|
129
|
+
requirement: &70134686929320 !ruby/object:Gem::Requirement
|
130
130
|
none: false
|
131
131
|
requirements:
|
132
132
|
- - ! '>='
|
@@ -134,10 +134,10 @@ dependencies:
|
|
134
134
|
version: '0'
|
135
135
|
type: :development
|
136
136
|
prerelease: false
|
137
|
-
version_requirements: *
|
137
|
+
version_requirements: *70134686929320
|
138
138
|
- !ruby/object:Gem::Dependency
|
139
139
|
name: fuubar
|
140
|
-
requirement: &
|
140
|
+
requirement: &70134686928360 !ruby/object:Gem::Requirement
|
141
141
|
none: false
|
142
142
|
requirements:
|
143
143
|
- - ! '>='
|
@@ -145,10 +145,10 @@ dependencies:
|
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
|
-
version_requirements: *
|
148
|
+
version_requirements: *70134686928360
|
149
149
|
- !ruby/object:Gem::Dependency
|
150
150
|
name: spork
|
151
|
-
requirement: &
|
151
|
+
requirement: &70134686927880 !ruby/object:Gem::Requirement
|
152
152
|
none: false
|
153
153
|
requirements:
|
154
154
|
- - ! '>='
|
@@ -156,10 +156,10 @@ dependencies:
|
|
156
156
|
version: '0'
|
157
157
|
type: :development
|
158
158
|
prerelease: false
|
159
|
-
version_requirements: *
|
159
|
+
version_requirements: *70134686927880
|
160
160
|
- !ruby/object:Gem::Dependency
|
161
161
|
name: yard
|
162
|
-
requirement: &
|
162
|
+
requirement: &70134686927220 !ruby/object:Gem::Requirement
|
163
163
|
none: false
|
164
164
|
requirements:
|
165
165
|
- - ! '>='
|
@@ -167,10 +167,10 @@ dependencies:
|
|
167
167
|
version: '0'
|
168
168
|
type: :development
|
169
169
|
prerelease: false
|
170
|
-
version_requirements: *
|
170
|
+
version_requirements: *70134686927220
|
171
171
|
- !ruby/object:Gem::Dependency
|
172
172
|
name: guard
|
173
|
-
requirement: &
|
173
|
+
requirement: &70134686926260 !ruby/object:Gem::Requirement
|
174
174
|
none: false
|
175
175
|
requirements:
|
176
176
|
- - ! '>='
|
@@ -178,10 +178,10 @@ dependencies:
|
|
178
178
|
version: '0'
|
179
179
|
type: :development
|
180
180
|
prerelease: false
|
181
|
-
version_requirements: *
|
181
|
+
version_requirements: *70134686926260
|
182
182
|
- !ruby/object:Gem::Dependency
|
183
183
|
name: guard-rspec
|
184
|
-
requirement: &
|
184
|
+
requirement: &70134686925600 !ruby/object:Gem::Requirement
|
185
185
|
none: false
|
186
186
|
requirements:
|
187
187
|
- - ! '>='
|
@@ -189,10 +189,10 @@ dependencies:
|
|
189
189
|
version: '0'
|
190
190
|
type: :development
|
191
191
|
prerelease: false
|
192
|
-
version_requirements: *
|
192
|
+
version_requirements: *70134686925600
|
193
193
|
- !ruby/object:Gem::Dependency
|
194
194
|
name: guard-cucumber
|
195
|
-
requirement: &
|
195
|
+
requirement: &70134686924680 !ruby/object:Gem::Requirement
|
196
196
|
none: false
|
197
197
|
requirements:
|
198
198
|
- - ! '>='
|
@@ -200,10 +200,10 @@ dependencies:
|
|
200
200
|
version: '0'
|
201
201
|
type: :development
|
202
202
|
prerelease: false
|
203
|
-
version_requirements: *
|
203
|
+
version_requirements: *70134686924680
|
204
204
|
- !ruby/object:Gem::Dependency
|
205
205
|
name: guard-spork
|
206
|
-
requirement: &
|
206
|
+
requirement: &70134686940300 !ruby/object:Gem::Requirement
|
207
207
|
none: false
|
208
208
|
requirements:
|
209
209
|
- - ! '>='
|
@@ -211,10 +211,10 @@ dependencies:
|
|
211
211
|
version: '0'
|
212
212
|
type: :development
|
213
213
|
prerelease: false
|
214
|
-
version_requirements: *
|
214
|
+
version_requirements: *70134686940300
|
215
215
|
- !ruby/object:Gem::Dependency
|
216
216
|
name: guard-yard
|
217
|
-
requirement: &
|
217
|
+
requirement: &70134686939060 !ruby/object:Gem::Requirement
|
218
218
|
none: false
|
219
219
|
requirements:
|
220
220
|
- - ! '>='
|
@@ -222,7 +222,7 @@ dependencies:
|
|
222
222
|
version: '0'
|
223
223
|
type: :development
|
224
224
|
prerelease: false
|
225
|
-
version_requirements: *
|
225
|
+
version_requirements: *70134686939060
|
226
226
|
description: Manages a Cookbook's, or an Application's, Cookbook dependencies
|
227
227
|
email:
|
228
228
|
- josiah@skirmisher.net
|
@@ -245,6 +245,7 @@ files:
|
|
245
245
|
- features/init_command.feature
|
246
246
|
- features/install.feature
|
247
247
|
- features/lockfile.feature
|
248
|
+
- features/step_definitions/berksfile_steps.rb
|
248
249
|
- features/step_definitions/chef_server_steps.rb
|
249
250
|
- features/step_definitions/cli_steps.rb
|
250
251
|
- features/step_definitions/filesystem_steps.rb
|
@@ -345,7 +346,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
345
346
|
version: '0'
|
346
347
|
segments:
|
347
348
|
- 0
|
348
|
-
hash: -
|
349
|
+
hash: -4431400407552958690
|
349
350
|
requirements: []
|
350
351
|
rubyforge_project:
|
351
352
|
rubygems_version: 1.8.11
|
@@ -357,6 +358,7 @@ test_files:
|
|
357
358
|
- features/init_command.feature
|
358
359
|
- features/install.feature
|
359
360
|
- features/lockfile.feature
|
361
|
+
- features/step_definitions/berksfile_steps.rb
|
360
362
|
- features/step_definitions/chef_server_steps.rb
|
361
363
|
- features/step_definitions/cli_steps.rb
|
362
364
|
- features/step_definitions/filesystem_steps.rb
|