knife_cookbook_dependencies 0.0.1 → 0.0.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/Guardfile ADDED
@@ -0,0 +1,11 @@
1
+ guard 'spork' do
2
+ watch('Gemfile')
3
+ watch('spec/spec_helper.rb') { :rspec }
4
+ watch(%r{^spec/support/}) { :rspec }
5
+ end
6
+
7
+ guard 'rspec', :version => 2, :cli => "--color --drb --format Fuubar", :all_on_start => false, :all_after_pass => false do
8
+ watch(%r{^spec/.+_spec\.rb$})
9
+ watch(%r{^lib/tryhard/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
10
+ watch('spec/spec_helper.rb') { "spec" }
11
+ end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012 Josiah Kiehl
1
+ Copyright (c) 2012 Riot Games
2
2
 
3
3
  MIT License
4
4
 
data/README.rdoc CHANGED
@@ -1,5 +1,30 @@
1
- = Remy, cookbook manager
1
+ = Knife Cookbook Dependencies
2
2
 
3
- Gusteau:: What do I always say? Anyone can cook.
4
- Remy:: Yeah. Anyone can, that doesn't mean that anyone should.
5
- Gusteau:: Well, that is not stopping him. See?
3
+ = Running tests
4
+
5
+ === Install prerequisites
6
+
7
+ Install the latest version of {Bundler}[http://gembundler.com]
8
+
9
+ $ gem install bundler
10
+
11
+ Clone the project
12
+
13
+ $ git clone git://github.com/RiotGames/knife_cookbook_dependencies.git
14
+
15
+ and run:
16
+
17
+ $ cd knife_cookbook_dependencies
18
+ $ bundle install
19
+
20
+ Bundler will install all gems and their dependencies required for testing and developing.
21
+
22
+ === Running RSpec tests
23
+
24
+ $ bundle exec guard start
25
+
26
+ = Authors and Contributors
27
+
28
+ * Josiah Kiehl (<josiah@skirmisher.net>)
29
+ * Jamie Winsor (<jamie@vialstudios.com>)
30
+ * Erik Hollensbe (<erik@hollensbe.org>)
@@ -1,30 +1,33 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require File.expand_path('../lib/knife_cookbook_dependencies/version', __FILE__)
3
3
 
4
- Gem::Specification.new do |gem|
5
-
4
+ Gem::Specification.new do |s|
6
5
  # TODO FIXME need to modify all of these
7
-
8
- gem.authors = ["Josiah Kiehl"]
9
- gem.email = ["josiah@skirmisher.net"]
10
- gem.description = %q{Resolves cookbook dependencies}
11
- gem.summary = gem.description
12
- gem.homepage = "http://github.com/RiotGames/knife_cookbook_dependencies"
13
-
14
- gem.files = `git ls-files`.split($\)
15
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
16
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
- gem.name = "knife_cookbook_dependencies"
18
- gem.require_paths = ["lib"]
19
- gem.version = KnifeCookbookDependencies::VERSION
6
+ s.authors = ["Josiah Kiehl", "Jamie Winsor", "Erik Hollensbe"]
7
+ s.email = ["josiah@skirmisher.net", "jamie@vialstudios.com", "erik@hollensbe.org"]
8
+ s.description = %q{Resolves cookbook dependencies}
9
+ s.summary = s.description
10
+ s.homepage = "https://github.com/RiotGames/knife_cookbook_dependencies"
11
+ s.files = `git ls-files`.split($\)
12
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
14
+ s.name = "knife_cookbook_dependencies"
15
+ s.require_paths = ["lib"]
16
+ s.version = KnifeCookbookDependencies::VERSION
20
17
 
21
18
  # FIXME will want to adjust this later
22
- gem.add_runtime_dependency 'dep_selector', '>= 0'
23
- gem.add_runtime_dependency 'chef', '~> 0.10.0'
24
- gem.add_runtime_dependency 'minitar', '>= 0'
19
+ s.add_runtime_dependency 'dep_selector'
20
+ s.add_runtime_dependency 'chef', '~> 0.10.0'
21
+ s.add_runtime_dependency 'minitar'
25
22
 
26
- gem.add_development_dependency 'rake', '~> 0.9.0'
27
- gem.add_development_dependency 'rspec', '>= 0'
28
- gem.add_development_dependency 'rdoc', '~> 3.0'
29
- gem.add_development_dependency 'simplecov', '>= 0'
23
+ s.add_development_dependency 'aruba'
24
+ s.add_development_dependency 'rake', '~> 0.9.0'
25
+ s.add_development_dependency 'rdoc', '~> 3.0'
26
+ s.add_development_dependency 'rspec'
27
+ s.add_development_dependency 'simplecov'
28
+ s.add_development_dependency 'fuubar'
29
+ s.add_development_dependency 'spork'
30
+ s.add_development_dependency 'guard'
31
+ s.add_development_dependency 'guard-rspec'
32
+ s.add_development_dependency 'guard-spork'
30
33
  end
@@ -12,12 +12,15 @@ require 'knife_cookbook_dependencies/dependency_reader'
12
12
  require 'knife_cookbook_dependencies/dsl'
13
13
  require 'knife_cookbook_dependencies/cookbookfile'
14
14
  require 'knife_cookbook_dependencies/git'
15
+ require 'knife_cookbook_dependencies/error_messages'
15
16
 
16
17
  module KnifeCookbookDependencies
17
18
  DEFAULT_FILENAME = 'Cookbookfile'
18
19
  COOKBOOKS_DIRECTORY = 'cookbooks'
19
20
 
20
21
  class << self
22
+ attr_accessor :ui
23
+
21
24
  def shelf
22
25
  @shelf ||= KnifeCookbookDependencies::Shelf.new
23
26
  end
@@ -26,10 +29,6 @@ module KnifeCookbookDependencies
26
29
  @shelf = nil
27
30
  end
28
31
 
29
- def ui=(ui)
30
- @ui = ui
31
- end
32
-
33
32
  def ui
34
33
  @ui ||= Chef::Knife::UI.new(STDOUT, STDERR, STDIN, {})
35
34
  end
@@ -46,7 +46,9 @@ module KnifeCookbookDependencies
46
46
  return
47
47
  else
48
48
  csd = Chef::Knife::CookbookSiteDownload.new([name, latest_constrained_version.to_s, "--file", download_filename])
49
- output = KnifeCookbookDependencies::KnifeUtils.capture_knife_output(csd)
49
+ self.class.rescue_404 do
50
+ output = KnifeCookbookDependencies::KnifeUtils.capture_knife_output(csd)
51
+ end
50
52
 
51
53
  if show_output
52
54
  puts output
@@ -118,7 +120,9 @@ module KnifeCookbookDependencies
118
120
 
119
121
  def cookbook_data
120
122
  css = Chef::Knife::CookbookSiteShow.new([@name])
121
- @cookbook_data ||= JSON.parse(KnifeCookbookDependencies::KnifeUtils.capture_knife_output(css))
123
+ self.class.rescue_404 do
124
+ @cookbook_data ||= JSON.parse(KnifeCookbookDependencies::KnifeUtils.capture_knife_output(css))
125
+ end
122
126
  end
123
127
 
124
128
  def download_filename
@@ -180,5 +184,17 @@ module KnifeCookbookDependencies
180
184
  def == other
181
185
  other.name == @name and other.version_constraints == @version_constraints
182
186
  end
187
+
188
+ class << self
189
+ def rescue_404
190
+ begin
191
+ yield
192
+ rescue Net::HTTPServerException => e
193
+ KnifeCookbookDependencies.ui.fatal ErrorMessages.missing_cookbook(@name) if e.message.match(/404/)
194
+ exit 100
195
+ end
196
+ end
197
+ end
198
+
183
199
  end
184
200
  end
@@ -22,8 +22,13 @@ module KnifeCookbookDependencies
22
22
  else
23
23
  filename = KnifeCookbookDependencies::DEFAULT_FILENAME unless File.exist?(filename)
24
24
  end
25
-
26
- read File.open(filename).read
25
+
26
+ begin
27
+ read File.open(filename).read
28
+ rescue Errno::ENOENT => e
29
+ KnifeCookbookDependencies.ui.fatal ErrorMessages.missing_cookbookfile
30
+ exit 100
31
+ end
27
32
  KnifeCookbookDependencies.shelf.resolve_dependencies
28
33
  KnifeCookbookDependencies.shelf.populate_cookbooks_directory
29
34
  KnifeCookbookDependencies.shelf.write_lockfile unless lockfile
@@ -0,0 +1,13 @@
1
+ module KnifeCookbookDependencies
2
+ module ErrorMessages
3
+ class << self
4
+ def missing_cookbook name
5
+ "The cookbook #{name} was not found on the Opscode Community site. Provide a git or path key for #{name} if it is unpublished."
6
+ end
7
+
8
+ def missing_cookbookfile
9
+ "There is no Cookbookfile in #{Dir.pwd}."
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module KnifeCookbookDependencies
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+ require 'chef/knife/cookbook_dependencies_install'
3
+ require 'aruba/api'
4
+
5
+
6
+ describe "knife cookbook dependencies install" do
7
+ describe "should print a friendly error message" do
8
+ include Aruba::Api
9
+
10
+ it "for missing cookbooks" do
11
+ pending "Knife commands produce no output when run with aruba. I'm not sure why." # TODO FIXME
12
+
13
+ cookbook_name = 'thisisamissingcookbook'
14
+ with_cookbookfile %Q[cookbook "#{cookbook_name}"] do
15
+ cmd = 'cat nofile' #'knife cookbook dependencies install'
16
+ process = run(cmd)
17
+ process.output(true).should match(/#{KnifeCookbookDependencies::ErrorMessages.missing_cookbook(cookbook_name)}/)
18
+ end
19
+ end
20
+ it "for missing Cookbookfile"
21
+ end
22
+ end
@@ -8,8 +8,7 @@ module KnifeCookbookDependencies
8
8
  subject.clean
9
9
  end
10
10
 
11
- describe do
12
-
11
+ describe do
13
12
  before do
14
13
  Cookbook.any_instance.stub(:versions).and_return ['0.1.1', '0.9.0', '1.0.0', '1.1.8'].collect {|v| Gem::Version.new(v) }
15
14
  end
@@ -40,7 +39,6 @@ module KnifeCookbookDependencies
40
39
  File.exists?(File.join(KnifeCookbookDependencies::COOKBOOKS_DIRECTORY, example_cookbook_from_path.name)).should be_true
41
40
  end
42
41
  end
43
-
44
42
  end
45
43
 
46
44
  describe "#versions" do
@@ -51,15 +49,14 @@ module KnifeCookbookDependencies
51
49
 
52
50
  describe '#version_from_metadata_file' do
53
51
  it "should be able to handle single quoted strings" do
54
- Cookbook.any_instance.stub(:metadata_file).and_return <<M
55
- version '1.2.3'
56
- M
52
+ Cookbook.any_instance.stub(:metadata_file).and_return(%Q{version '1.2.3'})
53
+
57
54
  subject.version_from_metadata_file.should == DepSelector::Version.new('1.2.3')
58
55
  end
56
+
59
57
  it "should be able to handle double quoted strings" do
60
- Cookbook.any_instance.stub(:metadata_file).and_return <<M
61
- version "1.2.3"
62
- M
58
+ Cookbook.any_instance.stub(:metadata_file).and_return(%Q{version "1.2.3"})
59
+
63
60
  subject.version_from_metadata_file.should == DepSelector::Version.new('1.2.3')
64
61
  end
65
62
  end
data/spec/spec_helper.rb CHANGED
@@ -1,21 +1,59 @@
1
- $:.push File.join(File.dirname(__FILE__), '..')
2
- $:.push File.join(File.dirname(__FILE__), '..', 'lib')
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'spork'
3
4
 
4
- require 'simplecov'
5
- require 'pp'
5
+ Spork.prefork do
6
+ require 'rspec'
7
+ require 'simplecov'
8
+ require 'pp'
9
+
10
+ APP_ROOT = File.expand_path('../../', __FILE__)
11
+
12
+ Dir[File.join(APP_ROOT, "spec/support/**/*.rb")].each {|f| require f}
6
13
 
7
- RSpec.configure do |config|
8
- config.after do
9
- KnifeCookbookDependencies.clean
14
+ RSpec.configure do |config|
15
+ config.mock_with :rspec
16
+ config.treat_symbols_as_metadata_keys_with_true_values = true
17
+ config.filter_run :focus => true
18
+ config.run_all_when_everything_filtered = true
19
+
20
+ config.after do
21
+ KnifeCookbookDependencies.clean
22
+ end
10
23
  end
11
- end
12
24
 
13
- SimpleCov.start do
14
- add_filter 'spec/'
15
- end
25
+ SimpleCov.start do
26
+ add_filter 'spec/'
27
+ end
28
+
29
+ def capture(stream)
30
+ begin
31
+ stream = stream.to_s
32
+ eval "$#{stream} = StringIO.new"
33
+ yield
34
+ result = eval("$#{stream}").string
35
+ ensure
36
+ eval("$#{stream} = #{stream.upcase}")
37
+ end
38
+
39
+ result
40
+ end
41
+
42
+ def example_cookbook_from_path
43
+ @example_cookbook_from_path ||= KnifeCookbookDependencies::Cookbook.new('example_cookbook', path: File.join(File.dirname(__FILE__), 'fixtures', 'cookbooks'))
44
+ end
16
45
 
17
- require 'knife_cookbook_dependencies'
46
+ def with_cookbookfile content
47
+ Dir.chdir(ENV['TMPDIR']) do
48
+ File.open('Cookbookfile', 'w') do |f|
49
+ f.write content
50
+ end
51
+ yield
52
+ end
53
+ end
54
+
55
+ end
18
56
 
19
- def example_cookbook_from_path
20
- @example_cookbook_from_path ||= KnifeCookbookDependencies::Cookbook.new('example_cookbook', path: File.join(File.dirname(__FILE__), 'fixtures', 'cookbooks'))
57
+ Spork.each_run do
58
+ require 'knife_cookbook_dependencies'
21
59
  end
metadata CHANGED
@@ -1,19 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knife_cookbook_dependencies
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Josiah Kiehl
9
+ - Jamie Winsor
10
+ - Erik Hollensbe
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
- date: 2012-05-08 00:00:00.000000000 Z
14
+ date: 2012-05-10 00:00:00.000000000 Z
13
15
  dependencies:
14
16
  - !ruby/object:Gem::Dependency
15
17
  name: dep_selector
16
- requirement: &70196647928780 !ruby/object:Gem::Requirement
18
+ requirement: &70289787000100 !ruby/object:Gem::Requirement
17
19
  none: false
18
20
  requirements:
19
21
  - - ! '>='
@@ -21,10 +23,10 @@ dependencies:
21
23
  version: '0'
22
24
  type: :runtime
23
25
  prerelease: false
24
- version_requirements: *70196647928780
26
+ version_requirements: *70289787000100
25
27
  - !ruby/object:Gem::Dependency
26
28
  name: chef
27
- requirement: &70196647928060 !ruby/object:Gem::Requirement
29
+ requirement: &70289786999120 !ruby/object:Gem::Requirement
28
30
  none: false
29
31
  requirements:
30
32
  - - ~>
@@ -32,10 +34,10 @@ dependencies:
32
34
  version: 0.10.0
33
35
  type: :runtime
34
36
  prerelease: false
35
- version_requirements: *70196647928060
37
+ version_requirements: *70289786999120
36
38
  - !ruby/object:Gem::Dependency
37
39
  name: minitar
38
- requirement: &70196647943200 !ruby/object:Gem::Requirement
40
+ requirement: &70289786998280 !ruby/object:Gem::Requirement
39
41
  none: false
40
42
  requirements:
41
43
  - - ! '>='
@@ -43,10 +45,21 @@ dependencies:
43
45
  version: '0'
44
46
  type: :runtime
45
47
  prerelease: false
46
- version_requirements: *70196647943200
48
+ version_requirements: *70289786998280
49
+ - !ruby/object:Gem::Dependency
50
+ name: aruba
51
+ requirement: &70289786997780 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *70289786997780
47
60
  - !ruby/object:Gem::Dependency
48
61
  name: rake
49
- requirement: &70196647940420 !ruby/object:Gem::Requirement
62
+ requirement: &70289786996860 !ruby/object:Gem::Requirement
50
63
  none: false
51
64
  requirements:
52
65
  - - ~>
@@ -54,10 +67,21 @@ dependencies:
54
67
  version: 0.9.0
55
68
  type: :development
56
69
  prerelease: false
57
- version_requirements: *70196647940420
70
+ version_requirements: *70289786996860
71
+ - !ruby/object:Gem::Dependency
72
+ name: rdoc
73
+ requirement: &70289786995900 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: '3.0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *70289786995900
58
82
  - !ruby/object:Gem::Dependency
59
83
  name: rspec
60
- requirement: &70196647936660 !ruby/object:Gem::Requirement
84
+ requirement: &70289786994760 !ruby/object:Gem::Requirement
61
85
  none: false
62
86
  requirements:
63
87
  - - ! '>='
@@ -65,21 +89,65 @@ dependencies:
65
89
  version: '0'
66
90
  type: :development
67
91
  prerelease: false
68
- version_requirements: *70196647936660
92
+ version_requirements: *70289786994760
69
93
  - !ruby/object:Gem::Dependency
70
- name: rdoc
71
- requirement: &70196647944920 !ruby/object:Gem::Requirement
94
+ name: simplecov
95
+ requirement: &70289786994280 !ruby/object:Gem::Requirement
72
96
  none: false
73
97
  requirements:
74
- - - ~>
98
+ - - ! '>='
75
99
  - !ruby/object:Gem::Version
76
- version: '3.0'
100
+ version: '0'
77
101
  type: :development
78
102
  prerelease: false
79
- version_requirements: *70196647944920
103
+ version_requirements: *70289786994280
80
104
  - !ruby/object:Gem::Dependency
81
- name: simplecov
82
- requirement: &70196647960000 !ruby/object:Gem::Requirement
105
+ name: fuubar
106
+ requirement: &70289786993720 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ type: :development
113
+ prerelease: false
114
+ version_requirements: *70289786993720
115
+ - !ruby/object:Gem::Dependency
116
+ name: spork
117
+ requirement: &70289786993060 !ruby/object:Gem::Requirement
118
+ none: false
119
+ requirements:
120
+ - - ! '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ type: :development
124
+ prerelease: false
125
+ version_requirements: *70289786993060
126
+ - !ruby/object:Gem::Dependency
127
+ name: guard
128
+ requirement: &70289786992500 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: *70289786992500
137
+ - !ruby/object:Gem::Dependency
138
+ name: guard-rspec
139
+ requirement: &70289786991860 !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: *70289786991860
148
+ - !ruby/object:Gem::Dependency
149
+ name: guard-spork
150
+ requirement: &70289786991260 !ruby/object:Gem::Requirement
83
151
  none: false
84
152
  requirements:
85
153
  - - ! '>='
@@ -87,10 +155,12 @@ dependencies:
87
155
  version: '0'
88
156
  type: :development
89
157
  prerelease: false
90
- version_requirements: *70196647960000
158
+ version_requirements: *70289786991260
91
159
  description: Resolves cookbook dependencies
92
160
  email:
93
161
  - josiah@skirmisher.net
162
+ - jamie@vialstudios.com
163
+ - erik@hollensbe.org
94
164
  executables: []
95
165
  extensions: []
96
166
  extra_rdoc_files: []
@@ -98,7 +168,7 @@ files:
98
168
  - .gitignore
99
169
  - .rbenv-version
100
170
  - Gemfile
101
- - Gemfile.lock
171
+ - Guardfile
102
172
  - LICENSE
103
173
  - README.rdoc
104
174
  - Rakefile
@@ -109,12 +179,14 @@ files:
109
179
  - lib/knife_cookbook_dependencies/cookbookfile.rb
110
180
  - lib/knife_cookbook_dependencies/dependency_reader.rb
111
181
  - lib/knife_cookbook_dependencies/dsl.rb
182
+ - lib/knife_cookbook_dependencies/error_messages.rb
112
183
  - lib/knife_cookbook_dependencies/git.rb
113
184
  - lib/knife_cookbook_dependencies/knife_utils.rb
114
185
  - lib/knife_cookbook_dependencies/lockfile.rb
115
186
  - lib/knife_cookbook_dependencies/metacookbook.rb
116
187
  - lib/knife_cookbook_dependencies/shelf.rb
117
188
  - lib/knife_cookbook_dependencies/version.rb
189
+ - spec/acceptance/knife_cookbook_dependencies_spec.rb
118
190
  - spec/fixtures/cookbooks/example_cookbook/README.md
119
191
  - spec/fixtures/cookbooks/example_cookbook/metadata.rb
120
192
  - spec/fixtures/cookbooks/example_cookbook/recipes/default.rb
@@ -126,7 +198,7 @@ files:
126
198
  - spec/lib/knife_cookbook_dependencies/shelf_spec.rb
127
199
  - spec/spec_helper.rb
128
200
  - todo.txt
129
- homepage: http://github.com/RiotGames/knife_cookbook_dependencies
201
+ homepage: https://github.com/RiotGames/knife_cookbook_dependencies
130
202
  licenses: []
131
203
  post_install_message:
132
204
  rdoc_options: []
@@ -151,6 +223,7 @@ signing_key:
151
223
  specification_version: 3
152
224
  summary: Resolves cookbook dependencies
153
225
  test_files:
226
+ - spec/acceptance/knife_cookbook_dependencies_spec.rb
154
227
  - spec/fixtures/cookbooks/example_cookbook/README.md
155
228
  - spec/fixtures/cookbooks/example_cookbook/metadata.rb
156
229
  - spec/fixtures/cookbooks/example_cookbook/recipes/default.rb