pocketknife 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,94 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Pocketknife" do
4
+ describe "new" do
5
+ before do
6
+ @pocketknife = Pocketknife.new
7
+ end
8
+
9
+ it "should instantiate a Pocketknife" do
10
+ @pocketknife.should be_a_kind_of(Pocketknife)
11
+ end
12
+
13
+ it "should have normal verbosity" do
14
+ @pocketknife.verbosity.should be_nil
15
+ end
16
+
17
+ it "should prompt for installation if needed" do
18
+ @pocketknife.can_install.should be_nil
19
+ end
20
+
21
+ it "should have a NodeManager instance" do
22
+ @pocketknife.node_manager.should be_a_kind_of(Pocketknife::NodeManager)
23
+ end
24
+
25
+ it "should have a NodeManager instance that knows about it" do
26
+ @pocketknife.node_manager.pocketknife.should == @pocketknife
27
+ end
28
+ end
29
+
30
+ describe "cli" do
31
+ describe "create" do
32
+ describe "without name" do
33
+ it "should raise an exception and not create anything" do
34
+ mktmpdircd do |dir|
35
+ lambda { Pocketknife.cli(['-c', '-q']) }.should raise_error(Errno::ENOENT)
36
+ Dir["#{Dir.pwd}/*"].should be_empty
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "create" do
44
+ it "should create a project" do
45
+ mktmpdircd do |dir|
46
+ project = 'myproject'
47
+ Pocketknife.new(:verbosity => false).create(project)
48
+ Dir["#{Dir.pwd}/#{project}/*"].should_not be_empty
49
+ Dir["#{Dir.pwd}/#{project}/cookbooks"].should_not be_empty
50
+ Dir["#{Dir.pwd}/#{project}/nodes"].should_not be_empty
51
+ Dir["#{Dir.pwd}/#{project}/roles"].should_not be_empty
52
+ Dir["#{Dir.pwd}/#{project}/site-cookbooks"].should_not be_empty
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "node" do
58
+ before(:each) do
59
+ @previous_dir = Dir.pwd
60
+ @dir = mkproject
61
+ end
62
+
63
+ after(:each) do
64
+ FileUtils.rm_rf(@dir) if @dir
65
+ Dir.chdir(@previous_dir)
66
+ end
67
+
68
+ it "should fail when asked to return an unknown node" do
69
+ node = "foo"
70
+ pocketknife = Pocketknife.new
71
+ begin
72
+ pocketknife.node(node)
73
+ rescue Pocketknife::NoSuchNode => e
74
+ e.node.should == node
75
+ else
76
+ fail "Exception wasn't thrown"
77
+ end
78
+ end
79
+
80
+ it "should return a known node, that has a name and pocketknife" do
81
+ name = "mynode"
82
+ path = Pathname.new("nodes/#{name}.json")
83
+ path.open("w") do |h|
84
+ h.write("{}")
85
+ end
86
+
87
+ pocketknife = Pocketknife.new
88
+ node = pocketknife.node(name)
89
+
90
+ node.name.should == name
91
+ node.pocketknife.should == pocketknife
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'pocketknife'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
@@ -0,0 +1,3 @@
1
+ # Standard libraries used in tests.
2
+ require 'fileutils'
3
+ require 'tmpdir'
@@ -0,0 +1,32 @@
1
+ # Creates temporary directory and cd's into it.
2
+ #
3
+ # If a block is supplied, it is executed within this directory, and when done, it cd's back and removes the directory.
4
+ #
5
+ # Without a block, it just creates the directory, cd's into it and returns the directory's path for you to cleanup yourself.
6
+ def mktmpdircd(&block)
7
+ if block
8
+ Dir.mktmpdir do |dir|
9
+ Dir.chdir(dir) do
10
+ yield(dir)
11
+ end
12
+ end
13
+ else
14
+ dir = Dir.mktmpdir
15
+ Dir.chdir(dir)
16
+ return dir
17
+ end
18
+ end
19
+
20
+ def mkproject(&block)
21
+ create = lambda { Pocketknife.new(:verbosity => false).create('.') }
22
+ if block
23
+ mktmpdircd do |dir|
24
+ create.call
25
+ yield(dir)
26
+ end
27
+ else
28
+ dir = mktmpdircd
29
+ create.call
30
+ return dir
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pocketknife
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Igal Koshevoy
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-16 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ version_requirements: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ hash: 11
28
+ segments:
29
+ - 0
30
+ - 5
31
+ - 0
32
+ version: 0.5.0
33
+ requirement: *id001
34
+ prerelease: false
35
+ type: :runtime
36
+ name: archive-tar-minitar
37
+ - !ruby/object:Gem::Dependency
38
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 59
44
+ segments:
45
+ - 0
46
+ - 9
47
+ - 0
48
+ version: 0.9.0
49
+ requirement: *id002
50
+ prerelease: false
51
+ type: :runtime
52
+ name: rye
53
+ - !ruby/object:Gem::Dependency
54
+ version_requirements: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 11
60
+ segments:
61
+ - 2
62
+ - 1
63
+ - 0
64
+ version: 2.1.0
65
+ requirement: *id003
66
+ prerelease: false
67
+ type: :development
68
+ name: bluecloth
69
+ - !ruby/object:Gem::Dependency
70
+ version_requirements: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 2
78
+ - 3
79
+ - 0
80
+ version: 2.3.0
81
+ requirement: *id004
82
+ prerelease: false
83
+ type: :development
84
+ name: rspec
85
+ - !ruby/object:Gem::Dependency
86
+ version_requirements: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 7
92
+ segments:
93
+ - 0
94
+ - 6
95
+ - 0
96
+ version: 0.6.0
97
+ requirement: *id005
98
+ prerelease: false
99
+ type: :development
100
+ name: yard
101
+ - !ruby/object:Gem::Dependency
102
+ version_requirements: &id006 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ hash: 23
108
+ segments:
109
+ - 1
110
+ - 0
111
+ - 0
112
+ version: 1.0.0
113
+ requirement: *id006
114
+ prerelease: false
115
+ type: :development
116
+ name: bundler
117
+ - !ruby/object:Gem::Dependency
118
+ version_requirements: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ hash: 15
124
+ segments:
125
+ - 1
126
+ - 6
127
+ - 0
128
+ version: 1.6.0
129
+ requirement: *id007
130
+ prerelease: false
131
+ type: :development
132
+ name: jeweler
133
+ - !ruby/object:Gem::Dependency
134
+ version_requirements: &id008 !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ hash: 3
140
+ segments:
141
+ - 0
142
+ version: "0"
143
+ requirement: *id008
144
+ prerelease: false
145
+ type: :development
146
+ name: rcov
147
+ description: pocketknife is a tool for managing chef-solo nodes.
148
+ email: igal+pocketknife@pragmaticraft.com
149
+ executables:
150
+ - pocketknife
151
+ - pocketknife
152
+ extensions: []
153
+
154
+ extra_rdoc_files:
155
+ - LICENSE.txt
156
+ - README.md
157
+ files:
158
+ - .document
159
+ - .yardopts
160
+ - Gemfile
161
+ - Gemfile.lock
162
+ - LICENSE.txt
163
+ - README.md
164
+ - Rakefile
165
+ - bin/pocketknife
166
+ - lib/pocketknife.rb
167
+ - lib/pocketknife/errors.rb
168
+ - lib/pocketknife/node.rb
169
+ - lib/pocketknife/node_manager.rb
170
+ - lib/pocketknife/version.rb
171
+ - pocketknife.gemspec
172
+ - spec/pocketknife_execution_error_spec.rb
173
+ - spec/pocketknife_node_manager_spec.rb
174
+ - spec/pocketknife_node_spec.rb
175
+ - spec/pocketknife_spec.rb
176
+ - spec/spec_helper.rb
177
+ - spec/support/libraries.rb
178
+ - spec/support/mkproject.rb
179
+ has_rdoc: true
180
+ homepage: http://github.com/igal/pocketknife
181
+ licenses:
182
+ - MIT
183
+ post_install_message:
184
+ rdoc_options: []
185
+
186
+ require_paths:
187
+ - lib
188
+ required_ruby_version: !ruby/object:Gem::Requirement
189
+ none: false
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ hash: 3
194
+ segments:
195
+ - 0
196
+ version: "0"
197
+ required_rubygems_version: !ruby/object:Gem::Requirement
198
+ none: false
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ hash: 3
203
+ segments:
204
+ - 0
205
+ version: "0"
206
+ requirements: []
207
+
208
+ rubyforge_project:
209
+ rubygems_version: 1.3.7
210
+ signing_key:
211
+ specification_version: 3
212
+ summary: pocketknife is a tool for managing chef-solo nodes.
213
+ test_files: []
214
+