one_inch_punch 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +7 -0
- data/README.txt +3 -2
- data/lib/punch/version.rb +1 -1
- data/lib/punch.rb +11 -0
- data/spec/punch_spec.rb +142 -0
- metadata +2 -2
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -12,11 +12,12 @@ One-inch punch: Smaller, more effective
|
|
12
12
|
== FEATURES/PROBLEMS:
|
13
13
|
|
14
14
|
* Can load and write .punch.yml data compatibly with Ara's punch gem
|
15
|
-
* Can punch in and out of projects
|
15
|
+
* Can punch in and out of projects (including creating a project by punching in)
|
16
16
|
* Can query project status
|
17
|
+
* Can delete a project
|
18
|
+
* Can list project data
|
17
19
|
|
18
20
|
* Cannot give a total time (yet)
|
19
|
-
* Cannot list time entries (yet)
|
20
21
|
* Cannot be used command-line (yet)
|
21
22
|
* More, since this is unfinished
|
22
23
|
|
data/lib/punch/version.rb
CHANGED
data/lib/punch.rb
CHANGED
@@ -53,6 +53,7 @@ module Punch
|
|
53
53
|
|
54
54
|
def in(project)
|
55
55
|
return false if in?(project)
|
56
|
+
data[project] ||= []
|
56
57
|
data[project].push({'in' => Time.now})
|
57
58
|
write
|
58
59
|
true
|
@@ -64,5 +65,15 @@ module Punch
|
|
64
65
|
write
|
65
66
|
true
|
66
67
|
end
|
68
|
+
|
69
|
+
def delete(project)
|
70
|
+
return nil unless data.delete(project)
|
71
|
+
write
|
72
|
+
true
|
73
|
+
end
|
74
|
+
|
75
|
+
def list(project)
|
76
|
+
data[project]
|
77
|
+
end
|
67
78
|
end
|
68
79
|
end
|
data/spec/punch_spec.rb
CHANGED
@@ -337,6 +337,42 @@ describe Punch do
|
|
337
337
|
Punch.in(@project).should == true
|
338
338
|
end
|
339
339
|
end
|
340
|
+
|
341
|
+
describe 'when the project does not yet exist' do
|
342
|
+
before :each do
|
343
|
+
@project = 'non-existent project'
|
344
|
+
end
|
345
|
+
|
346
|
+
it 'should create the project' do
|
347
|
+
Punch.in(@project)
|
348
|
+
Punch.data.should include(@project)
|
349
|
+
end
|
350
|
+
|
351
|
+
it 'should add a time entry to the project data' do
|
352
|
+
Punch.in(@project)
|
353
|
+
Punch.data[@project].length.should == 1
|
354
|
+
end
|
355
|
+
|
356
|
+
it 'should use now for the punch-in time' do
|
357
|
+
Punch.in(@project)
|
358
|
+
Punch.data[@project].last['in'].should == @now
|
359
|
+
end
|
360
|
+
|
361
|
+
it 'should use now for the punch-in time' do
|
362
|
+
Punch.in(@project)
|
363
|
+
Punch.data[@project].last['in'].should == @now
|
364
|
+
end
|
365
|
+
|
366
|
+
it 'should write the data' do
|
367
|
+
@test.become('test')
|
368
|
+
Punch.expects(:write).when(@test.is('test'))
|
369
|
+
Punch.in(@project)
|
370
|
+
end
|
371
|
+
|
372
|
+
it 'should return true' do
|
373
|
+
Punch.in(@project).should == true
|
374
|
+
end
|
375
|
+
end
|
340
376
|
end
|
341
377
|
|
342
378
|
it 'should punch a project out' do
|
@@ -421,4 +457,110 @@ describe Punch do
|
|
421
457
|
end
|
422
458
|
end
|
423
459
|
end
|
460
|
+
|
461
|
+
it 'should delete a project' do
|
462
|
+
Punch.should respond_to(:delete)
|
463
|
+
end
|
464
|
+
|
465
|
+
describe 'deleting a project' do
|
466
|
+
before :each do
|
467
|
+
@now = Time.now
|
468
|
+
@project = 'test project'
|
469
|
+
@data = { @project => [ {'in' => @now - 50, 'out' => @now - 25} ] }
|
470
|
+
|
471
|
+
Punch.instance_eval do
|
472
|
+
class << self
|
473
|
+
public :data, :data=
|
474
|
+
end
|
475
|
+
end
|
476
|
+
Punch.data = @data
|
477
|
+
|
478
|
+
@test = states('test').starts_as('setup')
|
479
|
+
Punch.stubs(:write).when(@test.is('setup'))
|
480
|
+
end
|
481
|
+
|
482
|
+
it 'should accept a project name' do
|
483
|
+
lambda { Punch.delete('proj') }.should_not raise_error(ArgumentError)
|
484
|
+
end
|
485
|
+
|
486
|
+
it 'should require a project name' do
|
487
|
+
lambda { Punch.delete }.should raise_error(ArgumentError)
|
488
|
+
end
|
489
|
+
|
490
|
+
describe 'when the project exists' do
|
491
|
+
it 'should remove the project data' do
|
492
|
+
Punch.delete(@project)
|
493
|
+
Punch.data.should_not include(@project)
|
494
|
+
end
|
495
|
+
|
496
|
+
it 'should write the data' do
|
497
|
+
@test.become('test')
|
498
|
+
Punch.expects(:write).when(@test.is('test'))
|
499
|
+
Punch.delete(@project)
|
500
|
+
end
|
501
|
+
|
502
|
+
it 'should return true' do
|
503
|
+
Punch.delete(@project).should == true
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
describe 'when the project does not exist' do
|
508
|
+
before :each do
|
509
|
+
@project = 'non-existent project'
|
510
|
+
end
|
511
|
+
|
512
|
+
it 'should not write the data' do
|
513
|
+
@test.become('test')
|
514
|
+
Punch.expects(:write).never.when(@test.is('test'))
|
515
|
+
Punch.delete(@project)
|
516
|
+
end
|
517
|
+
|
518
|
+
it 'should return nil' do
|
519
|
+
Punch.delete(@project).should be_nil
|
520
|
+
end
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
it 'should list project data' do
|
525
|
+
Punch.should respond_to(:list)
|
526
|
+
end
|
527
|
+
|
528
|
+
describe 'listing project data' do
|
529
|
+
before :each do
|
530
|
+
@now = Time.now
|
531
|
+
@project = 'test project'
|
532
|
+
@data = { @project => [ {'in' => @now - 50, 'out' => @now - 25} ] }
|
533
|
+
|
534
|
+
Punch.instance_eval do
|
535
|
+
class << self
|
536
|
+
public :data, :data=
|
537
|
+
end
|
538
|
+
end
|
539
|
+
Punch.data = @data
|
540
|
+
end
|
541
|
+
|
542
|
+
it 'should accept a project name' do
|
543
|
+
lambda { Punch.list('proj') }.should_not raise_error(ArgumentError)
|
544
|
+
end
|
545
|
+
|
546
|
+
it 'should require a project name' do
|
547
|
+
lambda { Punch.list }.should raise_error(ArgumentError)
|
548
|
+
end
|
549
|
+
|
550
|
+
describe 'when the project exists' do
|
551
|
+
it 'should return the project data' do
|
552
|
+
Punch.list(@project).should == Punch.data[@project]
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
describe 'when the project does not exist' do
|
557
|
+
before :each do
|
558
|
+
@project = 'non-existent project'
|
559
|
+
end
|
560
|
+
|
561
|
+
it 'should return nil' do
|
562
|
+
Punch.list(@project).should be_nil
|
563
|
+
end
|
564
|
+
end
|
565
|
+
end
|
424
566
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: one_inch_punch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yossef Mendelssohn
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-08-
|
12
|
+
date: 2008-08-22 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|