knife_cookbook_dependencies 0.0.1 → 0.0.2

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