berkshelf 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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] = config['chef_server_url']
26
- Chef::Config[:client_key] = config['client_key']
27
- Chef::Config[:node_name] = 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 config
47
- @config ||= YAML.load(File.read(File.join(APP_ROOT, "features", "config.yml")))
48
- rescue Errno::ENOENT
49
- raise "Please create a config file at features/config.yml from the sample found at features/config.sample.yml"
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
@@ -67,12 +67,9 @@ module Berkshelf
67
67
  @sources.has_key?(source.to_s)
68
68
  end
69
69
 
70
- # @param [Hash] options
71
- # a hash of options
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
- # @param [Hash] options
123
- # a hash of options
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
- # @param [Hash] options
141
- # a hash of options
142
- #
143
- # Options:
144
- # without: An array of groups to exclude which will cause any sources
145
- # marked as a member of the group to not be installed
146
- # force: Upload the Cookbook even if the version already exists and is
147
- # frozen on the target Chef Server
148
- # freeze: Freeze the uploaded Cookbook on the Chef Server so that it
149
- # cannot be overwritten
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(Berkshelf.cookbook_store, chef_server_url)
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 |name, version|
155
- Berkshelf.ui.info "Uploading #{name} (#{version}) to: #{chef_server_url}"
156
- uploader.upload!(name, version, options)
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
@@ -79,20 +79,19 @@ module Berkshelf
79
79
  @sources.collect { |name, source| source }
80
80
  end
81
81
 
82
- # @return [Hash]
83
- # a hash containing package names - in this case Cookbook names - as keys and
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
- # Example:
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
@@ -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
- # Options:
20
- # node_name: the name of the client used to sign REST requests to
21
- # the Chef Server.
22
- #
23
- # Default: the value of Chef::Config[:node_name]
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
- # client_key: the filepath location for the client's key used to sign
26
- # REST requests to the Chef Server.
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 the given CookbookSource to the given Chef server url.
32
+ # Uploads a CachedCookbook from a CookbookStore to this instances Chef Server URL
40
33
  #
41
- # @param [String] name
42
- # name of the Cookbook to upload
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
- # Options:
49
- # force: Upload the Cookbook even if the version already exists and is
50
- # frozen on the target Chef Server
51
- # freeze: Freeze the uploaded Cookbook on the Chef Server so that it
52
- # cannot be overwritten
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(name, version, options = {})
56
- upload!(name, version, options)
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
- # See #upload. This function will raise if an error occurs.
62
- def upload!(name, version, options = {})
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, "#{name} (#{version}) uploaded to: #{server_url}")
61
+ TXResult.new(:ok, "#{cookbook.cookbook_name} (#{cookbook.version}) uploaded to: #{server_url}")
75
62
  end
76
63
 
77
64
  private
@@ -1,3 +1,3 @@
1
1
  module Berkshelf
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -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 a hash containing the solution for the sources and dependencies" do
122
- subject.resolve.should eql("mysql" => DepSelector::Version.new("1.2.4"), "openssl" => DepSelector::Version.new("1.0.0"))
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(cookbook_store, server_url, client_key: client_key, node_name: node_name) }
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 downloaded (cached)" do
14
+ context "when cookbook is valid" do
16
15
  before(:each) do
17
- cookbook_store.stub(:cookbook) { cookbook }
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
- context "when cookbook is valid" do
21
- before(:each) do
22
- cookbook.should_receive(:validate!).and_return(true)
23
- cookbook.should_receive(:checksums).and_return("da97c94bb6acb2b7900cbf951654fea3"=>"/Users/reset/code/berkshelf/spec/fixtures/cookbooks/example_cookbook-0.5.0/recipes/default.rb")
24
- subject.should_receive(:create_sandbox)
25
- subject.should_receive(:upload_checksums_to_sandbox)
26
- subject.should_receive(:commit_sandbox)
27
- subject.should_receive(:save_cookbook)
28
- end
29
-
30
- it "returns a successful TXResult" do
31
- subject.upload(cookbook.name, cookbook.version).should be_success
32
- end
33
- end
34
-
35
- context "when cookbook is not valid" do
36
- before(:each) { cookbook.should_receive(:validate!).and_raise(CookbookSyntaxError) }
37
-
38
- it "returns a failed TXResult" do
39
- subject.upload(cookbook.name, cookbook.version).should be_failed
40
- end
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 downloaded (cached)" do
45
- before(:each) do
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.name, cookbook.version)
51
- end
52
- end
53
- end
54
-
55
- describe "#upload!" do
56
- let(:cookbook) { double('nginx', name: "nginx", version: "0.101.2") }
57
-
58
- context "when cookbook is not downloaded (cached)" do
59
- before(:each) do
60
- cookbook_store.stub(:cookbook) { nil }
61
- end
62
-
63
- it "raises UploadFailure if upload was not successful" do
64
- lambda {
65
- subject.upload!(cookbook.name, cookbook.version)
66
- }.should raise_error(UploadFailure)
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.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-21 00:00:00.000000000 Z
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: &70178588369440 !ruby/object:Gem::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: *70178588369440
27
+ version_requirements: *70134686922100
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: chef
30
- requirement: &70178588368880 !ruby/object:Gem::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: *70178588368880
38
+ version_requirements: *70134686921160
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: minitar
41
- requirement: &70178588368420 !ruby/object:Gem::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: *70178588368420
49
+ version_requirements: *70134686920480
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: thor
52
- requirement: &70178588367600 !ruby/object:Gem::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: *70178588367600
60
+ version_requirements: *70134686919240
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: cucumber
63
- requirement: &70178588367060 !ruby/object:Gem::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: *70178588367060
71
+ version_requirements: *70134686918520
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: vcr
74
- requirement: &70178588366380 !ruby/object:Gem::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: *70178588366380
82
+ version_requirements: *70134686917060
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: webmock
85
- requirement: &70178588365400 !ruby/object:Gem::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: *70178588365400
93
+ version_requirements: *70134686932520
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: aruba
96
- requirement: &70178588364400 !ruby/object:Gem::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: *70178588364400
104
+ version_requirements: *70134686931720
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: rspec
107
- requirement: &70178588363700 !ruby/object:Gem::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: *70178588363700
115
+ version_requirements: *70134686931040
116
116
  - !ruby/object:Gem::Dependency
117
117
  name: json_spec
118
- requirement: &70178588362640 !ruby/object:Gem::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: *70178588362640
126
+ version_requirements: *70134686930320
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: simplecov
129
- requirement: &70178588362120 !ruby/object:Gem::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: *70178588362120
137
+ version_requirements: *70134686929320
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: fuubar
140
- requirement: &70178588555700 !ruby/object:Gem::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: *70178588555700
148
+ version_requirements: *70134686928360
149
149
  - !ruby/object:Gem::Dependency
150
150
  name: spork
151
- requirement: &70178588554160 !ruby/object:Gem::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: *70178588554160
159
+ version_requirements: *70134686927880
160
160
  - !ruby/object:Gem::Dependency
161
161
  name: yard
162
- requirement: &70178588552920 !ruby/object:Gem::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: *70178588552920
170
+ version_requirements: *70134686927220
171
171
  - !ruby/object:Gem::Dependency
172
172
  name: guard
173
- requirement: &70178588551560 !ruby/object:Gem::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: *70178588551560
181
+ version_requirements: *70134686926260
182
182
  - !ruby/object:Gem::Dependency
183
183
  name: guard-rspec
184
- requirement: &70178588549860 !ruby/object:Gem::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: *70178588549860
192
+ version_requirements: *70134686925600
193
193
  - !ruby/object:Gem::Dependency
194
194
  name: guard-cucumber
195
- requirement: &70178588549140 !ruby/object:Gem::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: *70178588549140
203
+ version_requirements: *70134686924680
204
204
  - !ruby/object:Gem::Dependency
205
205
  name: guard-spork
206
- requirement: &70178588548100 !ruby/object:Gem::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: *70178588548100
214
+ version_requirements: *70134686940300
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: guard-yard
217
- requirement: &70178588562980 !ruby/object:Gem::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: *70178588562980
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: -3668778717482206330
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