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.
@@ -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