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