pocketknife 0.1.0 → 0.2.0

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.
@@ -4,21 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{pocketknife}
8
- s.version = "0.1.0"
7
+ s.name = "pocketknife"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Igal Koshevoy"]
12
- s.date = %q{2011-05-17}
13
- s.description = %q{pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef.
14
-
15
- Using pocketknife, you create a project that describes the configuration of your computers and then deploy it to bring them to their intended state.
16
-
17
- With pocketknife, you don't need to setup or manage a specialized chef-server node or rely on an unreliable network connection to a distant hosted service whose security you don't control, deal with managing chef's security keys, or deal with manually synchronizing data with the chef-server datastore.
18
-
19
- With pocketknife, all of your cookbooks, roles and nodes are stored in easy-to-use files that you can edit, share, backup and version control with tools you already have.
20
- }
21
- s.email = %q{igal+pocketknife@pragmaticraft.com}
12
+ s.date = "2012-06-18"
13
+ s.description = "pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef.\n\nUsing pocketknife, you create a project that describes the configuration of your computers and then deploy it to bring them to their intended state.\n\nWith pocketknife, you don't need to setup or manage a specialized chef-server node or rely on an unreliable network connection to a distant hosted service whose security you don't control, deal with managing chef's security keys, or deal with manually synchronizing data with the chef-server datastore.\n\nWith pocketknife, all of your cookbooks, roles and nodes are stored in easy-to-use files that you can edit, share, backup and version control with tools you already have.\n"
14
+ s.email = "igal+pocketknife@pragmaticraft.com"
22
15
  s.executables = ["pocketknife", "pocketknife"]
23
16
  s.extra_rdoc_files = [
24
17
  "LICENSE.txt",
@@ -26,9 +19,10 @@ With pocketknife, all of your cookbooks, roles and nodes are stored in easy-to-u
26
19
  ]
27
20
  s.files = [
28
21
  ".document",
22
+ ".travis.yml",
29
23
  ".yardopts",
24
+ "CHANGES.md",
30
25
  "Gemfile",
31
- "Gemfile.lock",
32
26
  "LICENSE.txt",
33
27
  "README.md",
34
28
  "Rakefile",
@@ -38,6 +32,7 @@ With pocketknife, all of your cookbooks, roles and nodes are stored in easy-to-u
38
32
  "lib/pocketknife/node.rb",
39
33
  "lib/pocketknife/node_manager.rb",
40
34
  "lib/pocketknife/version.rb",
35
+ "lib/shellwords.rb",
41
36
  "pocketknife.gemspec",
42
37
  "spec/pocketknife_execution_error_spec.rb",
43
38
  "spec/pocketknife_node_manager_spec.rb",
@@ -45,46 +40,58 @@ With pocketknife, all of your cookbooks, roles and nodes are stored in easy-to-u
45
40
  "spec/pocketknife_spec.rb",
46
41
  "spec/spec_helper.rb",
47
42
  "spec/support/libraries.rb",
48
- "spec/support/mkproject.rb"
43
+ "spec/support/mkproject.rb",
44
+ "spec/support/silence_stream.rb"
49
45
  ]
50
- s.homepage = %q{http://github.com/igal/pocketknife}
46
+ s.homepage = "http://github.com/igal/pocketknife"
51
47
  s.licenses = ["MIT"]
52
48
  s.require_paths = ["lib"]
53
- s.rubygems_version = %q{1.3.7}
54
- s.summary = %q{pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef.}
49
+ s.rubygems_version = "1.8.11"
50
+ s.summary = "pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef."
55
51
 
56
52
  if s.respond_to? :specification_version then
57
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
53
  s.specification_version = 3
59
54
 
60
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
56
  s.add_runtime_dependency(%q<archive-tar-minitar>, ["~> 0.5.0"])
62
57
  s.add_runtime_dependency(%q<rye>, ["~> 0.9.0"])
63
- s.add_development_dependency(%q<bluecloth>, ["~> 2.1.0"])
64
- s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
65
- s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
66
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
67
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
58
+ s.add_development_dependency(%q<rake>, [">= 0"])
59
+ s.add_development_dependency(%q<bluecloth>, ["~> 2.2.0"])
60
+ s.add_development_dependency(%q<rspec>, ["~> 2.10.0"])
61
+ s.add_development_dependency(%q<yard>, ["~> 0.8.0"])
62
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.0"])
68
63
  s.add_development_dependency(%q<rcov>, [">= 0"])
64
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
65
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
66
+ s.add_development_dependency(%q<debugger-ruby_core_source>, [">= 0"])
67
+ s.add_development_dependency(%q<debugger>, [">= 0"])
69
68
  else
70
69
  s.add_dependency(%q<archive-tar-minitar>, ["~> 0.5.0"])
71
70
  s.add_dependency(%q<rye>, ["~> 0.9.0"])
72
- s.add_dependency(%q<bluecloth>, ["~> 2.1.0"])
73
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
74
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
75
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
76
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
71
+ s.add_dependency(%q<rake>, [">= 0"])
72
+ s.add_dependency(%q<bluecloth>, ["~> 2.2.0"])
73
+ s.add_dependency(%q<rspec>, ["~> 2.10.0"])
74
+ s.add_dependency(%q<yard>, ["~> 0.8.0"])
75
+ s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
77
76
  s.add_dependency(%q<rcov>, [">= 0"])
77
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
78
+ s.add_dependency(%q<simplecov>, [">= 0"])
79
+ s.add_dependency(%q<debugger-ruby_core_source>, [">= 0"])
80
+ s.add_dependency(%q<debugger>, [">= 0"])
78
81
  end
79
82
  else
80
83
  s.add_dependency(%q<archive-tar-minitar>, ["~> 0.5.0"])
81
84
  s.add_dependency(%q<rye>, ["~> 0.9.0"])
82
- s.add_dependency(%q<bluecloth>, ["~> 2.1.0"])
83
- s.add_dependency(%q<rspec>, ["~> 2.3.0"])
84
- s.add_dependency(%q<yard>, ["~> 0.6.0"])
85
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
86
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
85
+ s.add_dependency(%q<rake>, [">= 0"])
86
+ s.add_dependency(%q<bluecloth>, ["~> 2.2.0"])
87
+ s.add_dependency(%q<rspec>, ["~> 2.10.0"])
88
+ s.add_dependency(%q<yard>, ["~> 0.8.0"])
89
+ s.add_dependency(%q<jeweler>, ["~> 1.8.0"])
87
90
  s.add_dependency(%q<rcov>, [">= 0"])
91
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
92
+ s.add_dependency(%q<simplecov>, [">= 0"])
93
+ s.add_dependency(%q<debugger-ruby_core_source>, [">= 0"])
94
+ s.add_dependency(%q<debugger>, [">= 0"])
88
95
  end
89
96
  end
90
97
 
@@ -1,9 +1,12 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "PocketKnife::Node" do
4
- def node_factory(name=nil, pocketknife=nil, connection=nil)
5
- name ||= "mynode"
6
- pocketknife ||= Pocketknife.new(:verbosity => false)
4
+ def node_factory(opts={})
5
+ connection = opts.delete(:connection)
6
+ name = opts.delete(:name) || "mynode"
7
+ pocketknife = opts.delete(:pocketknife) || Pocketknife.new(opts)
8
+ pocketknife.verbosity = false
9
+
7
10
  node = Pocketknife::Node.new(name, pocketknife)
8
11
  node.stub(:connection => connection || true) unless connection == false
9
12
  return node
@@ -13,7 +16,7 @@ describe "PocketKnife::Node" do
13
16
  before do
14
17
  @pocketknife = Pocketknife.new
15
18
  @name = "mynode"
16
- @node = node_factory(@name, @pocketknife)
19
+ @node = node_factory(:name => @name, :pocketknife => @pocketknife)
17
20
  end
18
21
 
19
22
  it "should have a name" do
@@ -27,7 +30,7 @@ describe "PocketKnife::Node" do
27
30
 
28
31
  describe "#connection" do
29
32
  it "should instantiate a new connection" do
30
- node = node_factory(nil, nil, false)
33
+ node = node_factory(:connection => false)
31
34
  rye = mock(Rye::Box)
32
35
  rye.should_receive(:disable_safe_mode)
33
36
  Rye::Box.should_receive(:new).with("mynode", {:user => "root"}).and_return(rye)
@@ -36,7 +39,7 @@ describe "PocketKnife::Node" do
36
39
  end
37
40
 
38
41
  it "should return an existing connection" do
39
- node = node_factory(nil, nil, false)
42
+ node = node_factory(:connection => false)
40
43
  rye = mock(Rye::Box)
41
44
  rye.should_receive(:disable_safe_mode)
42
45
  Rye::Box.should_receive(:new).with("mynode", {:user => "root"}).and_return(rye)
@@ -52,13 +55,13 @@ describe "PocketKnife::Node" do
52
55
  end
53
56
 
54
57
  it "should find an existing executable" do
55
- @node.connection.should_receive(:execute).with(%{which "chef-solo" && test -x `which "chef-solo"`}).and_return(true)
58
+ @node.connection.should_receive(:execute).with(%{which chef-solo && test -x `which chef-solo`}).and_return(true)
56
59
 
57
60
  @node.has_executable?("chef-solo").should be_true
58
61
  end
59
62
 
60
63
  it "should not find a missing executable" do
61
- @node.connection.should_receive(:execute).with(%{which "chef-solo" && test -x `which "chef-solo"`}).and_raise(Rye::Err.new("omg"))
64
+ @node.connection.should_receive(:execute).with(%{which chef-solo && test -x `which chef-solo`}).and_raise(Rye::Err.new("omg"))
62
65
 
63
66
  @node.has_executable?("chef-solo").should be_false
64
67
  end
@@ -250,17 +253,17 @@ cd /root &&
250
253
  end
251
254
 
252
255
  describe "#upload" do
253
- it "should upload configuration" do
256
+ it "should upload configuration with tar" do
254
257
  mkproject do
255
- node = node_factory
258
+ node = node_factory :transfer_mechanism => :tar
256
259
 
257
260
  local_node_json = node.local_node_json_pathname
258
261
  local_node_json.open("w") { |h| h.write("{}") }
259
262
 
260
263
  node.should_receive(:execute).with(<<-HERE)
261
264
  umask 0377 &&
262
- rm -rf "/etc/chef" "/var/local/pocketknife" "/var/local/pocketknife/cache" "/usr/local/sbin/chef-solo-apply" "/usr/local/sbin/csa" &&
263
- mkdir -p "/etc/chef" "/var/local/pocketknife" "/var/local/pocketknife/cache" "/usr/local/sbin"
265
+ rm -rf /etc/chef /var/local/pocketknife /var/local/pocketknife/cache /usr/local/sbin/chef-solo-apply /usr/local/sbin/csa &&
266
+ mkdir -p /etc/chef /var/local/pocketknife /var/local/pocketknife/cache /usr/local/sbin
264
267
  HERE
265
268
 
266
269
  node.connection.should_receive(:file_upload).with(local_node_json.to_s, "/etc/chef/node.json")
@@ -268,16 +271,48 @@ umask 0377 &&
268
271
  node.connection.should_receive(:file_upload).with(Pocketknife::Node::TMP_TARBALL.to_s, "/var/local/pocketknife/cache/pocketknife.tmp")
269
272
 
270
273
  node.should_receive(:execute).with(<<-HERE, true)
271
- cd "/var/local/pocketknife/cache" &&
272
- tar xf "/var/local/pocketknife/cache/pocketknife.tmp" &&
274
+ cd /var/local/pocketknife/cache &&
275
+ tar xf /var/local/pocketknife/cache/pocketknife.tmp &&
273
276
  chmod -R u+rwX,go= . &&
274
277
  chown -R root:root . &&
275
- mv "solo.rb.tmp" "/etc/chef/solo.rb" &&
276
- mv "chef-solo-apply.tmp" "/usr/local/sbin/chef-solo-apply" &&
277
- chmod u+x "/usr/local/sbin/chef-solo-apply" &&
278
- ln -s "chef-solo-apply" "/usr/local/sbin/csa" &&
279
- rm "/var/local/pocketknife/cache/pocketknife.tmp" &&
280
- mv * "/var/local/pocketknife"
278
+ mv solo.rb.tmp /etc/chef/solo.rb &&
279
+ mv chef-solo-apply.tmp /usr/local/sbin/chef-solo-apply &&
280
+ chmod u+x /usr/local/sbin/chef-solo-apply &&
281
+ ln -s chef-solo-apply /usr/local/sbin/csa &&
282
+ rm /var/local/pocketknife/cache/pocketknife.tmp &&
283
+ mv * /var/local/pocketknife
284
+ HERE
285
+
286
+ node.upload
287
+ end
288
+ end
289
+
290
+ it "should upload configuration with rsync" do
291
+ mkproject do
292
+ node = node_factory :transfer_mechanism => :rsync
293
+
294
+ local_node_json = node.local_node_json_pathname
295
+ local_node_json.open("w") { |h| h.write("{}") }
296
+
297
+ node.should_receive(:execute).with(<<-HERE)
298
+ umask 0377 &&
299
+ rm -rf /etc/chef /var/local/pocketknife /var/local/pocketknife/cache /usr/local/sbin/chef-solo-apply /usr/local/sbin/csa &&
300
+ mkdir -p /etc/chef /var/local/pocketknife /var/local/pocketknife/cache /usr/local/sbin
301
+ HERE
302
+
303
+ base = "root@#{node.name}:"
304
+ k = Pocketknife::Node
305
+ node.should_receive(:rsync_file).with(local_node_json.to_s, "#{base}#{k::NODE_JSON}")
306
+ node.should_receive(:rsync_file).with("#{k::TMP_SOLO_RB}", "#{base}#{k::SOLO_RB}")
307
+ node.should_receive(:rsync_file).with("#{k::TMP_CHEF_SOLO_APPLY}", "#{base}#{k::CHEF_SOLO_APPLY}")
308
+ node.should_receive(:rsync_directory).with("#{k::VAR_POCKETKNIFE_COOKBOOKS.basename}/", "#{base}#{k::VAR_POCKETKNIFE_COOKBOOKS}")
309
+ node.should_receive(:rsync_directory).with("#{k::VAR_POCKETKNIFE_SITE_COOKBOOKS.basename}/", "#{base}#{k::VAR_POCKETKNIFE_SITE_COOKBOOKS}")
310
+ node.should_receive(:rsync_directory).with("#{k::VAR_POCKETKNIFE_ROLES.basename}/", "#{base}#{k::VAR_POCKETKNIFE_ROLES}")
311
+
312
+ node.should_receive(:execute).with(<<-HERE, true)
313
+ cd /var/local/pocketknife/cache &&
314
+ chmod u+x /usr/local/sbin/chef-solo-apply &&
315
+ ln -s chef-solo-apply /usr/local/sbin/csa
281
316
  HERE
282
317
 
283
318
  node.upload
@@ -295,5 +330,14 @@ cd "/var/local/pocketknife/cache" &&
295
330
 
296
331
  node.apply
297
332
  end
333
+
334
+ it "should apply configuration with overridden runlist" do
335
+ node = node_factory :runlist => "myrunlist"
336
+ node.should_receive(:install)
337
+ node.should_receive(:execute).with("chef-solo -j /etc/chef/node.json -o myrunlist", true)
338
+ node.stub(:say)
339
+
340
+ node.apply
341
+ end
298
342
  end
299
343
  end
@@ -32,7 +32,11 @@ describe "Pocketknife" do
32
32
  describe "without name" do
33
33
  it "should raise an exception and not create anything" do
34
34
  mktmpdircd do |dir|
35
- lambda { Pocketknife.cli(['-c', '-q']) }.should raise_error(Errno::ENOENT)
35
+ lambda {
36
+ silence_stream(STDOUT) {
37
+ Pocketknife.cli(['-c', '-q'])
38
+ }
39
+ }.should raise_error(SystemExit)
36
40
  Dir["#{Dir.pwd}/*"].should be_empty
37
41
  end
38
42
  end
@@ -1,3 +1,10 @@
1
+ if ENV['SIMPLECOV']
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter '/spec/'
5
+ end
6
+ end
7
+
1
8
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
9
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
10
  require 'rspec'
@@ -8,5 +15,5 @@ require 'pocketknife'
8
15
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
16
 
10
17
  RSpec.configure do |config|
11
-
18
+
12
19
  end
@@ -0,0 +1,11 @@
1
+ # Silences any stream for the duration of the block.
2
+ #
3
+ # File activesupport/lib/active_support/core_ext/kernel/reporting.rb, line 39
4
+ def silence_stream(stream)
5
+ old_stream = stream.dup
6
+ stream.reopen(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ? 'NUL:' : '/dev/null')
7
+ stream.sync = true
8
+ yield
9
+ ensure
10
+ stream.reopen(old_stream)
11
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pocketknife
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Igal Koshevoy
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-17 00:00:00 -07:00
19
- default_executable:
18
+ date: 2012-06-18 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -30,10 +29,10 @@ dependencies:
30
29
  - 5
31
30
  - 0
32
31
  version: 0.5.0
33
- requirement: *id001
32
+ name: archive-tar-minitar
34
33
  prerelease: false
35
34
  type: :runtime
36
- name: archive-tar-minitar
35
+ requirement: *id001
37
36
  - !ruby/object:Gem::Dependency
38
37
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
38
  none: false
@@ -46,90 +45,88 @@ dependencies:
46
45
  - 9
47
46
  - 0
48
47
  version: 0.9.0
49
- requirement: *id002
48
+ name: rye
50
49
  prerelease: false
51
50
  type: :runtime
52
- name: rye
51
+ requirement: *id002
53
52
  - !ruby/object:Gem::Dependency
54
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
55
54
  none: false
56
55
  requirements:
57
- - - ~>
56
+ - - ">="
58
57
  - !ruby/object:Gem::Version
59
- hash: 11
58
+ hash: 3
60
59
  segments:
61
- - 2
62
- - 1
63
60
  - 0
64
- version: 2.1.0
65
- requirement: *id003
61
+ version: "0"
62
+ name: rake
66
63
  prerelease: false
67
64
  type: :development
68
- name: bluecloth
65
+ requirement: *id003
69
66
  - !ruby/object:Gem::Dependency
70
67
  version_requirements: &id004 !ruby/object:Gem::Requirement
71
68
  none: false
72
69
  requirements:
73
70
  - - ~>
74
71
  - !ruby/object:Gem::Version
75
- hash: 3
72
+ hash: 7
76
73
  segments:
77
74
  - 2
78
- - 3
75
+ - 2
79
76
  - 0
80
- version: 2.3.0
81
- requirement: *id004
77
+ version: 2.2.0
78
+ name: bluecloth
82
79
  prerelease: false
83
80
  type: :development
84
- name: rspec
81
+ requirement: *id004
85
82
  - !ruby/object:Gem::Dependency
86
83
  version_requirements: &id005 !ruby/object:Gem::Requirement
87
84
  none: false
88
85
  requirements:
89
86
  - - ~>
90
87
  - !ruby/object:Gem::Version
91
- hash: 7
88
+ hash: 39
92
89
  segments:
90
+ - 2
91
+ - 10
93
92
  - 0
94
- - 6
95
- - 0
96
- version: 0.6.0
97
- requirement: *id005
93
+ version: 2.10.0
94
+ name: rspec
98
95
  prerelease: false
99
96
  type: :development
100
- name: yard
97
+ requirement: *id005
101
98
  - !ruby/object:Gem::Dependency
102
99
  version_requirements: &id006 !ruby/object:Gem::Requirement
103
100
  none: false
104
101
  requirements:
105
102
  - - ~>
106
103
  - !ruby/object:Gem::Version
107
- hash: 23
104
+ hash: 63
108
105
  segments:
109
- - 1
110
106
  - 0
107
+ - 8
111
108
  - 0
112
- version: 1.0.0
113
- requirement: *id006
109
+ version: 0.8.0
110
+ name: yard
114
111
  prerelease: false
115
112
  type: :development
116
- name: bundler
113
+ requirement: *id006
117
114
  - !ruby/object:Gem::Dependency
118
115
  version_requirements: &id007 !ruby/object:Gem::Requirement
119
116
  none: false
120
117
  requirements:
121
118
  - - ~>
122
119
  - !ruby/object:Gem::Version
123
- hash: 15
120
+ hash: 55
124
121
  segments:
125
122
  - 1
126
- - 6
123
+ - 8
127
124
  - 0
128
- version: 1.6.0
129
- requirement: *id007
125
+ version: 1.8.0
126
+ name: jeweler
130
127
  prerelease: false
131
128
  type: :development
132
- name: jeweler
129
+ requirement: *id007
133
130
  - !ruby/object:Gem::Dependency
134
131
  version_requirements: &id008 !ruby/object:Gem::Requirement
135
132
  none: false
@@ -140,10 +137,66 @@ dependencies:
140
137
  segments:
141
138
  - 0
142
139
  version: "0"
140
+ name: rcov
141
+ prerelease: false
142
+ type: :development
143
143
  requirement: *id008
144
+ - !ruby/object:Gem::Dependency
145
+ version_requirements: &id009 !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ name: ruby-debug
144
155
  prerelease: false
145
156
  type: :development
146
- name: rcov
157
+ requirement: *id009
158
+ - !ruby/object:Gem::Dependency
159
+ version_requirements: &id010 !ruby/object:Gem::Requirement
160
+ none: false
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ hash: 3
165
+ segments:
166
+ - 0
167
+ version: "0"
168
+ name: simplecov
169
+ prerelease: false
170
+ type: :development
171
+ requirement: *id010
172
+ - !ruby/object:Gem::Dependency
173
+ version_requirements: &id011 !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ hash: 3
179
+ segments:
180
+ - 0
181
+ version: "0"
182
+ name: debugger-ruby_core_source
183
+ prerelease: false
184
+ type: :development
185
+ requirement: *id011
186
+ - !ruby/object:Gem::Dependency
187
+ version_requirements: &id012 !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ hash: 3
193
+ segments:
194
+ - 0
195
+ version: "0"
196
+ name: debugger
197
+ prerelease: false
198
+ type: :development
199
+ requirement: *id012
147
200
  description: |
148
201
  pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef.
149
202
 
@@ -156,7 +209,6 @@ description: |
156
209
  email: igal+pocketknife@pragmaticraft.com
157
210
  executables:
158
211
  - pocketknife
159
- - pocketknife
160
212
  extensions: []
161
213
 
162
214
  extra_rdoc_files:
@@ -164,9 +216,10 @@ extra_rdoc_files:
164
216
  - README.md
165
217
  files:
166
218
  - .document
219
+ - .travis.yml
167
220
  - .yardopts
221
+ - CHANGES.md
168
222
  - Gemfile
169
- - Gemfile.lock
170
223
  - LICENSE.txt
171
224
  - README.md
172
225
  - Rakefile
@@ -176,6 +229,7 @@ files:
176
229
  - lib/pocketknife/node.rb
177
230
  - lib/pocketknife/node_manager.rb
178
231
  - lib/pocketknife/version.rb
232
+ - lib/shellwords.rb
179
233
  - pocketknife.gemspec
180
234
  - spec/pocketknife_execution_error_spec.rb
181
235
  - spec/pocketknife_node_manager_spec.rb
@@ -184,7 +238,7 @@ files:
184
238
  - spec/spec_helper.rb
185
239
  - spec/support/libraries.rb
186
240
  - spec/support/mkproject.rb
187
- has_rdoc: true
241
+ - spec/support/silence_stream.rb
188
242
  homepage: http://github.com/igal/pocketknife
189
243
  licenses:
190
244
  - MIT
@@ -214,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
268
  requirements: []
215
269
 
216
270
  rubyforge_project:
217
- rubygems_version: 1.3.7
271
+ rubygems_version: 1.8.11
218
272
  signing_key:
219
273
  specification_version: 3
220
274
  summary: pocketknife is a devops tool for managing computers running chef-solo, powered by Opscode Chef.