one_inch_punch 0.2.2 → 0.2.3
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/History.txt +7 -0
- data/Manifest.txt +0 -2
- data/bin/punch +1 -1
- data/config/hoe.rb +2 -2
- data/lib/punch/instance.rb +2 -2
- data/lib/punch/version.rb +1 -1
- data/lib/punch.rb +8 -6
- data/spec/fixnum_spec.rb +1 -1
- data/spec/punch_command_spec.rb +254 -165
- data/spec/punch_instance_spec.rb +109 -62
- data/spec/punch_spec.rb +198 -124
- data/spec/spec_helper.rb +3 -20
- metadata +6 -8
- data/spec/spec.opts +0 -1
- data/tasks/rspec.rake +0 -21
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 0.2.3 2008-12-11
|
2
|
+
|
3
|
+
* 1 enhancements:
|
4
|
+
* Logging a message now automatically adds a time
|
5
|
+
* A time can be specified for the log message (with now as a default)
|
6
|
+
* punch command takes options for message logging
|
7
|
+
|
1
8
|
== 0.2.2 2008-12-01
|
2
9
|
|
3
10
|
* 1 enhancement:
|
data/Manifest.txt
CHANGED
data/bin/punch
CHANGED
data/config/hoe.rb
CHANGED
@@ -11,8 +11,8 @@ EXTRA_DEPENDENCIES = [
|
|
11
11
|
# ['activesupport', '>= 1.3.1']
|
12
12
|
] # An array of rubygem dependencies [name, version]
|
13
13
|
EXTRA_DEV_DEPENDENCIES = [
|
14
|
-
['
|
15
|
-
['
|
14
|
+
['bacon', '>= 1.1.0'],
|
15
|
+
['facon', '>= 0.4.1']
|
16
16
|
] # An array of rubygem dependencies [name, version]
|
17
17
|
|
18
18
|
@config_file = "~/.rubyforge/user-config.yml"
|
data/lib/punch/instance.rb
CHANGED
data/lib/punch/version.rb
CHANGED
data/lib/punch.rb
CHANGED
@@ -62,8 +62,8 @@ class Punch
|
|
62
62
|
data[project] ||= []
|
63
63
|
time = time_from_options(options)
|
64
64
|
data[project].push({'in' => time})
|
65
|
-
log(project,
|
66
|
-
log(project, options[:message]) if options[:message]
|
65
|
+
log(project, 'punch in', :time => time)
|
66
|
+
log(project, options[:message], :time => time) if options[:message]
|
67
67
|
true
|
68
68
|
end
|
69
69
|
|
@@ -104,11 +104,13 @@ class Punch
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
def log(project, message)
|
107
|
+
def log(project, message, options = {})
|
108
|
+
raise ArgumentError, "Message is not an optional argument" if message.is_a?(Hash)
|
108
109
|
return false unless in?(project)
|
109
110
|
project_data = data[project].last
|
110
111
|
project_data['log'] ||= []
|
111
|
-
|
112
|
+
time = time_from_options(options)
|
113
|
+
project_data['log'].push "#{message} @ #{time.strftime('%Y-%m-%dT%H:%M:%S%z')}"
|
112
114
|
true
|
113
115
|
end
|
114
116
|
|
@@ -118,8 +120,8 @@ class Punch
|
|
118
120
|
def do_out_single(project, options)
|
119
121
|
return false if out?(project)
|
120
122
|
time = time_from_options(options)
|
121
|
-
log(project, options[:message]) if options[:message]
|
122
|
-
log(project,
|
123
|
+
log(project, options[:message], :time => time) if options[:message]
|
124
|
+
log(project, 'punch out', :time => time)
|
123
125
|
data[project].last['out'] = time
|
124
126
|
end
|
125
127
|
|
data/spec/fixnum_spec.rb
CHANGED
data/spec/punch_command_spec.rb
CHANGED
@@ -1,77 +1,78 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/spec_helper.rb'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
rescue SystemExit
|
9
|
-
end
|
3
|
+
def run_command(*args)
|
4
|
+
Object.const_set(:ARGV, args)
|
5
|
+
begin
|
6
|
+
eval File.read(File.join(File.dirname(__FILE__), *%w[.. bin punch]))
|
7
|
+
rescue SystemExit
|
10
8
|
end
|
11
|
-
|
12
|
-
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
describe 'punch command' do
|
13
|
+
before do
|
13
14
|
[:ARGV, :OPTIONS, :MANDATORY_OPTIONS].each do |const|
|
14
15
|
Object.send(:remove_const, const) if Object.const_defined?(const)
|
15
16
|
end
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
self.stubs(:puts).when(@states['puts'].is('setup'))
|
23
|
-
Punch.stubs(:load).when(@states['load'].is('setup'))
|
24
|
-
Punch.stubs(:write).when(@states['write'].is('setup'))
|
18
|
+
self.stub!(:puts)
|
19
|
+
Punch.stub!(:load)
|
20
|
+
Punch.stub!(:write)
|
25
21
|
|
26
22
|
@project = 'myproj'
|
27
23
|
end
|
28
24
|
|
29
25
|
it 'should exist' do
|
30
|
-
lambda { run_command }.
|
26
|
+
lambda { run_command }.should.not.raise(Errno::ENOENT)
|
31
27
|
end
|
32
28
|
|
33
29
|
it 'should require a command' do
|
34
|
-
self.
|
30
|
+
self.should.receive(:puts) do |output|
|
31
|
+
output.should.match(/usage.+command/i)
|
32
|
+
end
|
35
33
|
run_command
|
36
34
|
end
|
37
35
|
|
38
36
|
describe "when the command is 'total'" do
|
39
|
-
before
|
40
|
-
Punch.
|
37
|
+
before do
|
38
|
+
Punch.stub!(:total)
|
41
39
|
end
|
42
40
|
|
43
41
|
it 'should load punch data' do
|
44
|
-
Punch.
|
42
|
+
Punch.should.receive(:load)
|
45
43
|
run_command('total', @project)
|
46
44
|
end
|
47
45
|
|
48
46
|
it 'should get the total for the requested project' do
|
49
|
-
Punch.
|
47
|
+
Punch.should.receive(:total) do |proj, _|
|
48
|
+
proj.should == @project
|
49
|
+
end
|
50
50
|
run_command('total', @project)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should get the total for all projects if none given' do
|
54
|
-
Punch.
|
54
|
+
Punch.should.receive(:total) do |proj, _|
|
55
|
+
proj.should.be.nil
|
56
|
+
end
|
55
57
|
run_command('total')
|
56
58
|
end
|
57
59
|
|
58
60
|
it 'should output the total' do
|
59
61
|
result = 'total data'
|
60
|
-
Punch.
|
61
|
-
self.
|
62
|
+
Punch.stub!(:total).and_return(result)
|
63
|
+
self.should.receive(:puts).with(result.inspect)
|
62
64
|
run_command('total', @project)
|
63
65
|
end
|
64
66
|
|
65
67
|
it 'should output the total as YAML if no project given' do
|
66
68
|
result = 'total data'
|
67
|
-
Punch.
|
68
|
-
self.
|
69
|
+
Punch.stub!(:total).and_return(result)
|
70
|
+
self.should.receive(:puts).with(result.to_yaml)
|
69
71
|
run_command('total')
|
70
72
|
end
|
71
73
|
|
72
74
|
it 'should not write the data' do
|
73
|
-
|
74
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
75
|
+
Punch.should.receive(:write).never
|
75
76
|
run_command('total')
|
76
77
|
end
|
77
78
|
|
@@ -79,300 +80,353 @@ describe 'punch command' do
|
|
79
80
|
it "should pass on an 'after' time option given by --after" do
|
80
81
|
time_option = '2008-08-26 09:47'
|
81
82
|
time = Time.local(2008, 8, 26, 9, 47)
|
82
|
-
Punch.
|
83
|
+
Punch.should.receive(:total) do |proj, options|
|
84
|
+
proj.should == @project
|
85
|
+
options[:after].should == time
|
86
|
+
end
|
83
87
|
run_command('total', @project, '--after', time_option)
|
84
88
|
end
|
85
89
|
|
86
90
|
it "should pass on a 'before' time option given by --before" do
|
87
91
|
time_option = '2008-08-23 15:39'
|
88
92
|
time = Time.local(2008, 8, 23, 15, 39)
|
89
|
-
Punch.
|
93
|
+
Punch.should.receive(:total) do |proj, options|
|
94
|
+
proj.should == @project
|
95
|
+
options[:before].should == time
|
96
|
+
end
|
90
97
|
run_command('total', @project, '--before', time_option)
|
91
98
|
end
|
92
99
|
|
93
100
|
it 'should handle a time option given as a date' do
|
94
101
|
time_option = '2008-08-23'
|
95
102
|
time = Time.local(2008, 8, 23)
|
96
|
-
Punch.
|
103
|
+
Punch.should.receive(:total) do |proj, options|
|
104
|
+
proj.should == @project
|
105
|
+
options[:before].should == time
|
106
|
+
end
|
97
107
|
run_command('total', @project, '--before', time_option)
|
98
108
|
end
|
99
109
|
|
100
110
|
it 'should accept time options if no project given' do
|
101
111
|
time_option = '2008-08-26 09:47'
|
102
112
|
time = Time.local(2008, 8, 26, 9, 47)
|
103
|
-
Punch.
|
113
|
+
Punch.should.receive(:total) do |proj, options|
|
114
|
+
proj.should.be.nil
|
115
|
+
options[:before].should == time
|
116
|
+
end
|
104
117
|
run_command('total', '--before', time_option)
|
105
118
|
end
|
106
119
|
|
107
120
|
it 'should also pass the formatting option' do
|
108
121
|
time_option = '2008-08-26 09:47'
|
109
|
-
Punch.
|
122
|
+
Punch.should.receive(:total) do |proj, options|
|
123
|
+
proj.should == @project
|
124
|
+
options[:format].should == true
|
125
|
+
end
|
110
126
|
run_command('total', @project, '--before', time_option)
|
111
127
|
end
|
112
128
|
end
|
113
129
|
|
114
130
|
it 'should pass only the formatting option if no options specified' do
|
115
|
-
Punch.
|
131
|
+
Punch.should.receive(:total) do |proj, options|
|
132
|
+
proj.should == @project
|
133
|
+
options[:format].should == true
|
134
|
+
end
|
116
135
|
run_command('total', @project)
|
117
136
|
end
|
118
137
|
end
|
119
138
|
|
120
139
|
describe "when the command is 'status'" do
|
121
|
-
before
|
122
|
-
Punch.
|
140
|
+
before do
|
141
|
+
Punch.stub!(:status)
|
123
142
|
end
|
124
143
|
|
125
144
|
it 'should load punch data' do
|
126
|
-
Punch.
|
145
|
+
Punch.should.receive(:load)
|
127
146
|
run_command('status', @project)
|
128
147
|
end
|
129
148
|
|
130
149
|
it 'should get the status for the requested project' do
|
131
|
-
Punch.
|
150
|
+
Punch.should.receive(:status).with(@project)
|
132
151
|
run_command('status', @project)
|
133
152
|
end
|
134
153
|
|
135
154
|
it 'should get the status for all projects if none given' do
|
136
|
-
Punch.
|
155
|
+
Punch.should.receive(:status).with(nil)
|
137
156
|
run_command('status')
|
138
157
|
end
|
139
158
|
|
140
159
|
it 'should output the status' do
|
141
160
|
result = 'status data'
|
142
|
-
Punch.
|
143
|
-
self.
|
161
|
+
Punch.stub!(:status).and_return(result)
|
162
|
+
self.should.receive(:puts).with(result.inspect)
|
144
163
|
run_command('status', @project)
|
145
164
|
end
|
146
165
|
|
147
166
|
it 'should output the status as YAML if no project given' do
|
148
167
|
result = 'status data'
|
149
|
-
Punch.
|
150
|
-
self.
|
168
|
+
Punch.stub!(:status).and_return(result)
|
169
|
+
self.should.receive(:puts).with(result.to_yaml)
|
151
170
|
run_command('status')
|
152
171
|
end
|
153
172
|
|
154
173
|
it 'should not write the data' do
|
155
|
-
|
156
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
174
|
+
Punch.should.receive(:write).never
|
157
175
|
run_command('status')
|
158
176
|
end
|
159
177
|
end
|
160
178
|
|
161
179
|
describe "when the command is 'in'" do
|
162
|
-
before
|
163
|
-
|
164
|
-
Punch.stubs(:in).when(@states['write'].is('setup'))
|
180
|
+
before do
|
181
|
+
Punch.stub!(:in)
|
165
182
|
end
|
166
183
|
|
167
184
|
it 'should load punch data' do
|
168
|
-
Punch.
|
185
|
+
Punch.should.receive(:load)
|
169
186
|
run_command('in', @project)
|
170
187
|
end
|
171
188
|
|
172
189
|
it 'should punch in to the given project' do
|
173
|
-
Punch.
|
190
|
+
Punch.should.receive(:in).with(@project, {})
|
174
191
|
run_command('in', @project)
|
175
192
|
end
|
176
193
|
|
177
194
|
it 'should pass a time if specified on the command line (with --time)' do
|
178
195
|
time_option = '2008-08-23 15:39'
|
179
196
|
time = Time.local(2008, 8, 23, 15, 39)
|
180
|
-
Punch.
|
197
|
+
Punch.should.receive(:in) do |proj, options|
|
198
|
+
proj.should == @project
|
199
|
+
options[:time].should == time
|
200
|
+
end
|
181
201
|
run_command('in', @project, '--time', time_option)
|
182
202
|
end
|
183
203
|
|
184
204
|
it 'should pass a time if specified on the command line (with --at)' do
|
185
205
|
time_option = '2008-08-23 15:39'
|
186
206
|
time = Time.local(2008, 8, 23, 15, 39)
|
187
|
-
Punch.
|
207
|
+
Punch.should.receive(:in) do |proj, options|
|
208
|
+
proj.should == @project
|
209
|
+
options[:time].should == time
|
210
|
+
end
|
188
211
|
run_command('in', @project, '--at', time_option)
|
189
212
|
end
|
190
213
|
|
191
214
|
it 'should pass a message if specified on the command line (with --message)' do
|
192
215
|
message = 'About to do some amazing work'
|
193
|
-
Punch.
|
216
|
+
Punch.should.receive(:in) do |proj, options|
|
217
|
+
proj.should == @project
|
218
|
+
options[:message].should == message
|
219
|
+
end
|
194
220
|
run_command('in', @project, '--message', message)
|
195
221
|
end
|
196
222
|
|
197
223
|
it 'should pass a message if specified on the command line (with -m)' do
|
198
224
|
message = 'About to do some amazing work'
|
199
|
-
Punch.
|
225
|
+
Punch.should.receive(:in) do |proj, options|
|
226
|
+
proj.should == @project
|
227
|
+
options[:message].should == message
|
228
|
+
end
|
200
229
|
run_command('in', @project, '-m', message)
|
201
230
|
end
|
202
231
|
|
203
232
|
describe 'when punched in successfully' do
|
204
|
-
before
|
205
|
-
Punch.
|
233
|
+
before do
|
234
|
+
Punch.stub!(:in).and_return(true)
|
206
235
|
end
|
207
236
|
|
208
237
|
it 'should write the data' do
|
209
|
-
Punch.
|
238
|
+
Punch.should.receive(:write)
|
210
239
|
run_command('in', @project)
|
211
240
|
end
|
212
241
|
|
213
242
|
it 'should not print anything' do
|
214
|
-
|
215
|
-
self.expects(:puts).never.when(@states['puts'].is('test'))
|
243
|
+
self.should.receive(:puts).never
|
216
244
|
run_command('in', @project)
|
217
245
|
end
|
218
246
|
end
|
219
247
|
|
220
248
|
describe 'when not punched in successfully' do
|
221
|
-
before
|
222
|
-
Punch.
|
249
|
+
before do
|
250
|
+
Punch.stub!(:in).and_return(false)
|
223
251
|
end
|
224
252
|
|
225
253
|
it 'should not write the data' do
|
226
|
-
|
227
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
254
|
+
Punch.should.receive(:write).never
|
228
255
|
run_command('in', @project)
|
229
256
|
end
|
230
257
|
|
231
258
|
it 'should print a message' do
|
232
|
-
self.
|
259
|
+
self.should.receive(:puts) do |output|
|
260
|
+
output.should.match(/already.+in/i)
|
261
|
+
end
|
233
262
|
run_command('in', @project)
|
234
263
|
end
|
235
264
|
end
|
236
265
|
|
237
266
|
describe 'when no project given' do
|
238
267
|
it 'should display an error message' do
|
239
|
-
self.
|
268
|
+
self.should.receive(:puts) do |output|
|
269
|
+
output.should.match(/project.+require/i)
|
270
|
+
end
|
240
271
|
run_command('in')
|
241
272
|
end
|
242
273
|
|
243
274
|
it 'should not punch in' do
|
244
|
-
|
245
|
-
Punch.
|
246
|
-
Punch.expects(:in).never.when(@states['in'].is('test'))
|
275
|
+
Punch.stub!(:write)
|
276
|
+
Punch.should.receive(:in).never
|
247
277
|
run_command('in')
|
248
278
|
end
|
249
279
|
|
250
280
|
it 'should not write the data' do
|
251
|
-
|
252
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
281
|
+
Punch.should.receive(:write).never
|
253
282
|
run_command('in')
|
254
283
|
end
|
255
284
|
end
|
256
285
|
end
|
257
286
|
|
258
287
|
describe "when the command is 'out'" do
|
259
|
-
before
|
260
|
-
Punch.
|
288
|
+
before do
|
289
|
+
Punch.stub!(:out)
|
261
290
|
end
|
262
291
|
|
263
292
|
it 'should load punch data' do
|
264
|
-
Punch.
|
293
|
+
Punch.should.receive(:load)
|
265
294
|
run_command('out', @project)
|
266
295
|
end
|
267
296
|
|
268
297
|
it 'should punch out of the given project' do
|
269
|
-
Punch.
|
298
|
+
Punch.should.receive(:out).with(@project, {})
|
270
299
|
run_command('out', @project)
|
271
300
|
end
|
272
301
|
|
273
302
|
it 'should pass a time if specified on the command line (with --time)' do
|
274
303
|
time_option = '2008-08-23 15:39'
|
275
304
|
time = Time.local(2008, 8, 23, 15, 39)
|
276
|
-
Punch.
|
305
|
+
Punch.should.receive(:out) do |proj, options|
|
306
|
+
proj.should == @project
|
307
|
+
options[:time].should == time
|
308
|
+
end
|
277
309
|
run_command('out', @project, '--time', time_option)
|
278
310
|
end
|
279
311
|
|
280
312
|
it 'should pass a time if specified on the command line (with --at)' do
|
281
313
|
time_option = '2008-08-23 15:39'
|
282
314
|
time = Time.local(2008, 8, 23, 15, 39)
|
283
|
-
Punch.
|
315
|
+
Punch.should.receive(:out) do |proj, options|
|
316
|
+
proj.should == @project
|
317
|
+
options[:time].should == time
|
318
|
+
end
|
284
319
|
run_command('out', @project, '--at', time_option)
|
285
320
|
end
|
286
321
|
|
287
322
|
it 'should pass a message if specified on the command line (with --message)' do
|
288
323
|
message = 'Finished doing some stellar work'
|
289
|
-
Punch.
|
324
|
+
Punch.should.receive(:out) do |proj, options|
|
325
|
+
proj.should == @project
|
326
|
+
options[:message].should == message
|
327
|
+
end
|
290
328
|
run_command('out', @project, '--message', message)
|
291
329
|
end
|
292
330
|
|
293
331
|
it 'should pass a message if specified on the command line (with -m)' do
|
294
332
|
message = 'Finished doing some stellar work'
|
295
|
-
Punch.
|
333
|
+
Punch.should.receive(:out) do |proj, options|
|
334
|
+
proj.should == @project
|
335
|
+
options[:message].should == message
|
336
|
+
end
|
296
337
|
run_command('out', @project, '-m', message)
|
297
338
|
end
|
298
339
|
|
299
340
|
describe 'if no project given' do
|
300
341
|
it 'should punch out of all projects' do
|
301
|
-
Punch.
|
342
|
+
Punch.should.receive(:out).with(nil, {})
|
302
343
|
run_command('out')
|
303
344
|
end
|
304
345
|
|
305
346
|
it 'should pass a time if specified on the command line (with --time)' do
|
306
347
|
time_option = '2008-08-23 15:39'
|
307
348
|
time = Time.local(2008, 8, 23, 15, 39)
|
308
|
-
Punch.
|
349
|
+
Punch.should.receive(:out) do |proj, options|
|
350
|
+
proj.should.be.nil
|
351
|
+
options[:time].should == time
|
352
|
+
end
|
309
353
|
run_command('out', '--time', time_option)
|
310
354
|
end
|
311
355
|
|
312
356
|
it 'should pass a time if specified on the command line (with --at)' do
|
313
357
|
time_option = '2008-08-23 15:39'
|
314
358
|
time = Time.local(2008, 8, 23, 15, 39)
|
315
|
-
Punch.
|
359
|
+
Punch.should.receive(:out) do |proj, options|
|
360
|
+
proj.should.be.nil
|
361
|
+
options[:time].should == time
|
362
|
+
end
|
316
363
|
run_command('out', '--at', time_option)
|
317
364
|
end
|
318
365
|
|
319
366
|
it 'should pass a message if specified on the command line (with --message)' do
|
320
367
|
message = 'Finished doing some stellar work'
|
321
|
-
Punch.
|
368
|
+
Punch.should.receive(:out) do |proj, options|
|
369
|
+
proj.should.be.nil
|
370
|
+
options[:message].should == message
|
371
|
+
end
|
322
372
|
run_command('out', '--message', message)
|
323
373
|
end
|
324
374
|
|
325
375
|
it 'should pass a message if specified on the command line (with -m)' do
|
326
376
|
message = 'Finished doing some stellar work'
|
327
|
-
Punch.
|
377
|
+
Punch.should.receive(:out) do |proj, options|
|
378
|
+
proj.should.be.nil
|
379
|
+
options[:message].should == message
|
380
|
+
end
|
328
381
|
run_command('out', '-m', message)
|
329
382
|
end
|
330
383
|
end
|
331
384
|
|
332
385
|
describe 'when punched out successfully' do
|
333
|
-
before
|
334
|
-
Punch.
|
386
|
+
before do
|
387
|
+
Punch.stub!(:out).and_return(true)
|
335
388
|
end
|
336
389
|
|
337
390
|
it 'should write the data' do
|
338
|
-
Punch.
|
391
|
+
Punch.should.receive(:write)
|
339
392
|
run_command('out', @project)
|
340
393
|
end
|
341
394
|
|
342
395
|
it 'should not print anything' do
|
343
|
-
|
344
|
-
self.expects(:puts).never.when(@states['puts'].is('test'))
|
396
|
+
self.should.receive(:puts).never
|
345
397
|
run_command('out', @project)
|
346
398
|
end
|
347
399
|
|
348
400
|
describe 'and no project given' do
|
349
401
|
it 'should not print anything' do
|
350
|
-
|
351
|
-
self.expects(:puts).never.when(@states['puts'].is('test'))
|
402
|
+
self.should.receive(:puts).never
|
352
403
|
run_command('out')
|
353
404
|
end
|
354
405
|
end
|
355
406
|
end
|
356
407
|
|
357
408
|
describe 'when not punched out successfully' do
|
358
|
-
before
|
359
|
-
Punch.
|
409
|
+
before do
|
410
|
+
Punch.stub!(:out).and_return(false)
|
360
411
|
end
|
361
412
|
|
362
413
|
it 'should not write the data' do
|
363
|
-
|
364
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
414
|
+
Punch.should.receive(:write).never
|
365
415
|
run_command('out', @project)
|
366
416
|
end
|
367
417
|
|
368
418
|
it 'should print a message' do
|
369
|
-
self.
|
419
|
+
self.should.receive(:puts) do |output|
|
420
|
+
output.should.match(/already.+out/i)
|
421
|
+
end
|
370
422
|
run_command('out', @project)
|
371
423
|
end
|
372
424
|
|
373
425
|
describe 'and no project given' do
|
374
426
|
it 'should print a message' do
|
375
|
-
self.
|
427
|
+
self.should.receive(:puts) do |output|
|
428
|
+
output.should.match(/already.+out/i)
|
429
|
+
end
|
376
430
|
run_command('out')
|
377
431
|
end
|
378
432
|
end
|
@@ -380,184 +434,207 @@ describe 'punch command' do
|
|
380
434
|
end
|
381
435
|
|
382
436
|
describe "when the command is 'delete'" do
|
383
|
-
before
|
384
|
-
|
385
|
-
Punch.stubs(:delete).when(@states['write'].is('setup'))
|
437
|
+
before do
|
438
|
+
Punch.stub!(:delete)
|
386
439
|
end
|
387
440
|
|
388
441
|
it 'should load punch data' do
|
389
|
-
Punch.
|
442
|
+
Punch.should.receive(:load)
|
390
443
|
run_command('delete', @project)
|
391
444
|
end
|
392
445
|
|
393
446
|
it 'should delete the given project' do
|
394
|
-
Punch.
|
395
|
-
Punch.
|
447
|
+
Punch.stub!(:write)
|
448
|
+
Punch.should.receive(:delete).with(@project)
|
396
449
|
run_command('delete', @project)
|
397
450
|
end
|
398
451
|
|
399
452
|
it 'should output the result' do
|
400
453
|
result = 'result'
|
401
|
-
Punch.
|
402
|
-
self.
|
454
|
+
Punch.stub!(:delete).and_return(result)
|
455
|
+
self.should.receive(:puts).with(result.inspect)
|
403
456
|
run_command('delete', @project)
|
404
457
|
end
|
405
458
|
|
406
459
|
describe 'when deleted successfully' do
|
407
460
|
it 'should write the data' do
|
408
|
-
Punch.
|
409
|
-
Punch.
|
461
|
+
Punch.stub!(:delete).and_return(true)
|
462
|
+
Punch.should.receive(:write)
|
410
463
|
run_command('delete', @project)
|
411
464
|
end
|
412
465
|
end
|
413
466
|
|
414
467
|
describe 'when not deleted successfully' do
|
415
468
|
it 'should not write the data' do
|
416
|
-
|
417
|
-
Punch.
|
418
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
469
|
+
Punch.stub!(:delete).and_return(nil)
|
470
|
+
Punch.should.receive(:write).never
|
419
471
|
run_command('delete', @project)
|
420
472
|
end
|
421
473
|
end
|
422
474
|
|
423
475
|
describe 'when no project given' do
|
424
476
|
it 'should display an error message' do
|
425
|
-
self.
|
477
|
+
self.should.receive(:puts) do |output|
|
478
|
+
output.should.match(/project.+require/i)
|
479
|
+
end
|
426
480
|
run_command('delete')
|
427
481
|
end
|
428
482
|
|
429
483
|
it 'should not delete' do
|
430
|
-
|
431
|
-
Punch.
|
432
|
-
Punch.expects(:delete).never.when(@states['delete'].is('test'))
|
484
|
+
Punch.stub!(:write)
|
485
|
+
Punch.should.receive(:delete).never
|
433
486
|
run_command('delete')
|
434
487
|
end
|
435
488
|
|
436
489
|
it 'should not write the data' do
|
437
|
-
|
438
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
490
|
+
Punch.should.receive(:write).never
|
439
491
|
run_command('delete')
|
440
492
|
end
|
441
493
|
end
|
442
494
|
end
|
443
495
|
|
444
496
|
describe "when the command is 'log'" do
|
445
|
-
before
|
446
|
-
|
447
|
-
Punch.stubs(:log).when(@states['log'].is('setup'))
|
497
|
+
before do
|
498
|
+
Punch.stub!(:log)
|
448
499
|
@message = 'log message'
|
449
500
|
end
|
450
501
|
|
451
502
|
it 'should load punch data' do
|
452
|
-
Punch.
|
503
|
+
Punch.should.receive(:load)
|
453
504
|
run_command('log', @project, @message)
|
454
505
|
end
|
455
506
|
|
456
507
|
it 'should log a message for the given project' do
|
457
|
-
Punch.
|
458
|
-
Punch.
|
508
|
+
Punch.stub!(:write)
|
509
|
+
Punch.should.receive(:log).with(@project, @message, {})
|
459
510
|
run_command('log', @project, @message)
|
460
511
|
end
|
461
512
|
|
513
|
+
it 'should pass a time if specified on the command line (with --time)' do
|
514
|
+
time_option = '2008-08-23 15:39'
|
515
|
+
time = Time.local(2008, 8, 23, 15, 39)
|
516
|
+
Punch.should.receive(:log) do |proj, msg, options|
|
517
|
+
proj.should == @project
|
518
|
+
msg.should == @message
|
519
|
+
options[:time].should == time
|
520
|
+
end
|
521
|
+
run_command('log', @project, @message, '--time', time_option)
|
522
|
+
end
|
523
|
+
|
524
|
+
it 'should pass a time if specified on the command line (with --at)' do
|
525
|
+
time_option = '2008-08-23 15:39'
|
526
|
+
time = Time.local(2008, 8, 23, 15, 39)
|
527
|
+
Punch.should.receive(:log) do |proj, msg, options|
|
528
|
+
proj.should == @project
|
529
|
+
msg.should == @message
|
530
|
+
options[:time].should == time
|
531
|
+
end
|
532
|
+
run_command('log', @project, @message, '--at', time_option)
|
533
|
+
end
|
534
|
+
|
462
535
|
describe 'when logged successfully' do
|
463
|
-
before
|
464
|
-
Punch.
|
536
|
+
before do
|
537
|
+
Punch.stub!(:log).and_return(true)
|
465
538
|
end
|
466
539
|
|
467
540
|
it 'should write the data' do
|
468
|
-
Punch.
|
541
|
+
Punch.should.receive(:write)
|
469
542
|
run_command('log', @project, @message)
|
470
543
|
end
|
471
544
|
|
472
545
|
it 'should not print anything' do
|
473
|
-
|
474
|
-
self.expects(:puts).never.when(@states['write'].is('test'))
|
546
|
+
self.should.receive(:puts).never
|
475
547
|
run_command('log', @project, @message)
|
476
548
|
end
|
477
549
|
end
|
478
550
|
|
479
|
-
describe 'when not
|
480
|
-
before
|
481
|
-
Punch.
|
551
|
+
describe 'when not logged successfully' do
|
552
|
+
before do
|
553
|
+
Punch.stub!(:log).and_return(false)
|
482
554
|
end
|
483
555
|
|
484
556
|
it 'should not write the data' do
|
485
|
-
|
486
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
557
|
+
Punch.should.receive(:write).never
|
487
558
|
run_command('log', @project, @message)
|
488
559
|
end
|
489
560
|
|
490
561
|
it 'should print a message' do
|
491
|
-
self.
|
562
|
+
self.should.receive(:puts) do |output|
|
563
|
+
output.should.match(/not.+in/i)
|
564
|
+
end
|
492
565
|
run_command('log', @project, @message)
|
493
566
|
end
|
494
567
|
end
|
495
568
|
|
496
569
|
describe 'when no project given' do
|
497
570
|
it 'should display an error message' do
|
498
|
-
self.
|
571
|
+
self.should.receive(:puts) do |output|
|
572
|
+
output.should.match(/project.+require/i)
|
573
|
+
end
|
499
574
|
run_command('log')
|
500
575
|
end
|
501
576
|
|
502
577
|
it 'should not log' do
|
503
|
-
|
504
|
-
Punch.
|
505
|
-
Punch.expects(:log).never.when(@states['log'].is('test'))
|
578
|
+
Punch.stub!(:write)
|
579
|
+
Punch.should.receive(:log).never
|
506
580
|
run_command('log')
|
507
581
|
end
|
508
582
|
|
509
583
|
it 'should not write the data' do
|
510
|
-
|
511
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
584
|
+
Punch.should.receive(:write).never
|
512
585
|
run_command('log')
|
513
586
|
end
|
514
587
|
end
|
515
588
|
|
516
589
|
describe 'when no message given' do
|
517
590
|
it 'should display an error message' do
|
518
|
-
self.
|
591
|
+
self.should.receive(:puts) do |output|
|
592
|
+
output.should.match(/message.+require/i)
|
593
|
+
end
|
519
594
|
run_command('log', @project)
|
520
595
|
end
|
521
596
|
|
522
597
|
it 'should not log' do
|
523
|
-
|
524
|
-
Punch.
|
525
|
-
Punch.expects(:log).never.when(@states['log'].is('test'))
|
598
|
+
Punch.stub!(:write)
|
599
|
+
Punch.should.receive(:log).never
|
526
600
|
run_command('log', @project)
|
527
601
|
end
|
528
602
|
|
529
603
|
it 'should not write the data' do
|
530
|
-
|
531
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
604
|
+
Punch.should.receive(:write).never
|
532
605
|
run_command('log', @project)
|
533
606
|
end
|
534
607
|
end
|
535
608
|
end
|
536
609
|
|
537
610
|
describe "when the command is 'list'" do
|
538
|
-
before
|
539
|
-
Punch.
|
611
|
+
before do
|
612
|
+
Punch.stub!(:list)
|
540
613
|
end
|
541
614
|
|
542
615
|
it 'should load punch data' do
|
543
|
-
Punch.
|
616
|
+
Punch.should.receive(:load)
|
544
617
|
run_command('list', @project)
|
545
618
|
end
|
546
619
|
|
547
620
|
it 'should get the data for the requested project' do
|
548
|
-
Punch.
|
621
|
+
Punch.should.receive(:list) do |proj, _|
|
622
|
+
proj.should == @project
|
623
|
+
end
|
549
624
|
run_command('list', @project)
|
550
625
|
end
|
551
626
|
|
552
627
|
it 'should get the data for all projects if none given' do
|
553
|
-
Punch.
|
628
|
+
Punch.should.receive(:list) do |proj, _|
|
629
|
+
proj.should.be.nil
|
630
|
+
end
|
554
631
|
run_command('list')
|
555
632
|
end
|
556
633
|
|
557
634
|
it 'should output the list data' do
|
558
635
|
result = 'list data'
|
559
|
-
Punch.
|
560
|
-
self.
|
636
|
+
Punch.stub!(:list).and_return(result)
|
637
|
+
self.should.receive(:puts).with(result.to_yaml)
|
561
638
|
run_command('list')
|
562
639
|
end
|
563
640
|
|
@@ -565,58 +642,70 @@ describe 'punch command' do
|
|
565
642
|
it "should pass on an 'after' time option given by --after" do
|
566
643
|
time_option = '2008-08-26 09:47'
|
567
644
|
time = Time.local(2008, 8, 26, 9, 47)
|
568
|
-
Punch.
|
645
|
+
Punch.should.receive(:list) do |proj, options|
|
646
|
+
proj.should == @project
|
647
|
+
options[:after].should == time
|
648
|
+
end
|
569
649
|
run_command('list', @project, '--after', time_option)
|
570
650
|
end
|
571
651
|
|
572
652
|
it "should pass on a 'before' time option given by --before" do
|
573
653
|
time_option = '2008-08-23 15:39'
|
574
654
|
time = Time.local(2008, 8, 23, 15, 39)
|
575
|
-
Punch.
|
655
|
+
Punch.should.receive(:list) do |proj, options|
|
656
|
+
proj.should == @project
|
657
|
+
options[:before].should == time
|
658
|
+
end
|
576
659
|
run_command('list', @project, '--before', time_option)
|
577
660
|
end
|
578
661
|
|
579
662
|
it 'should handle a time option given as a date' do
|
580
663
|
time_option = '2008-08-23'
|
581
664
|
time = Time.local(2008, 8, 23)
|
582
|
-
Punch.
|
665
|
+
Punch.should.receive(:list) do |proj, options|
|
666
|
+
proj.should == @project
|
667
|
+
options[:before].should == time
|
668
|
+
end
|
583
669
|
run_command('list', @project, '--before', time_option)
|
584
670
|
end
|
585
671
|
|
586
672
|
it 'should accept time options if no project given' do
|
587
673
|
time_option = '2008-08-26 09:47'
|
588
674
|
time = Time.local(2008, 8, 26, 9, 47)
|
589
|
-
Punch.
|
675
|
+
Punch.should.receive(:list) do |proj, options|
|
676
|
+
proj.should.be.nil
|
677
|
+
options[:before].should == time
|
678
|
+
end
|
590
679
|
run_command('list', '--before', time_option)
|
591
680
|
end
|
592
681
|
end
|
593
682
|
|
594
683
|
it 'should not write the data' do
|
595
|
-
|
596
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
684
|
+
Punch.should.receive(:write).never
|
597
685
|
run_command('list')
|
598
686
|
end
|
599
687
|
end
|
600
688
|
|
601
689
|
describe 'when the command is unknown' do
|
602
690
|
it 'should not error' do
|
603
|
-
lambda { run_command('bunk') }.
|
691
|
+
lambda { run_command('bunk') }.should.not.raise
|
604
692
|
end
|
605
693
|
|
606
694
|
it 'should print a message' do
|
607
|
-
self.
|
695
|
+
self.should.receive(:puts) do |output|
|
696
|
+
output.should.match(/command.+unknown/i)
|
697
|
+
end
|
608
698
|
run_command('bunk')
|
609
699
|
end
|
610
700
|
|
611
701
|
it 'should not write the data' do
|
612
|
-
|
613
|
-
Punch.expects(:write).never.when(@states['write'].is('test'))
|
702
|
+
Punch.should.receive(:write).never
|
614
703
|
run_command('bunk')
|
615
704
|
end
|
616
705
|
|
617
706
|
it 'should not run any punch command' do
|
618
|
-
[:in, :out, :delete, :status, :total, :log].each do |command|
|
619
|
-
Punch.
|
707
|
+
[:in, :out, :delete, :status, :total, :log, :list].each do |command|
|
708
|
+
Punch.should.receive(command).never
|
620
709
|
end
|
621
710
|
run_command('bunk')
|
622
711
|
end
|