samg-timetrap 0.0.3 → 0.0.4

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.
Files changed (3) hide show
  1. data/lib/timetrap.rb +27 -12
  2. data/spec/timetrap_spec.rb +46 -0
  3. metadata +1 -1
data/lib/timetrap.rb CHANGED
@@ -44,7 +44,11 @@ module Timetrap
44
44
  end
45
45
 
46
46
  def alter
47
- Timetrap.active_entry.update :note => args.unused.join(' ')
47
+ entry = args['--id'] ? Entry[args['--id']] : Timetrap.active_entry
48
+ say "can't find entry" && return unless entry
49
+ entry.update :start => args['--start'] if args['--start'] =~ /.+/
50
+ entry.update :end => args['--end'] if args['--end'] =~ /.+/
51
+ entry.update :note => unused_args if unused_args =~ /.+/
48
52
  end
49
53
 
50
54
  def backend
@@ -52,7 +56,7 @@ module Timetrap
52
56
  end
53
57
 
54
58
  def in
55
- Timetrap.start args.unused.join(' '), args['--at']
59
+ Timetrap.start unused_args, args['--at']
56
60
  end
57
61
 
58
62
  def out
@@ -60,7 +64,7 @@ module Timetrap
60
64
  end
61
65
 
62
66
  def kill
63
- sheet = args.unused.join(' ')
67
+ sheet = unused_args
64
68
  unless (sheets = Entry.map{|e| e.sheet }.uniq).include?(sheet)
65
69
  say "ain't no sheet #{sheet.inspect}", 'sheets:', *sheets
66
70
  return
@@ -76,10 +80,11 @@ module Timetrap
76
80
  end
77
81
 
78
82
  def display
79
- sheet = sheet_name_from_string(args.unused.join(' '))
83
+ sheet = sheet_name_from_string(unused_args)
80
84
  sheet = (sheet =~ /.+/ ? sheet : Timetrap.current_sheet)
81
85
  say "Timesheet: #{sheet}"
82
- say " Day Start End Duration Notes"
86
+ id_heading = args['--ids'] ? 'Id' : ' '
87
+ say " #{id_heading} Day Start End Duration Notes"
83
88
  last_start = nil
84
89
  from_current_day = []
85
90
  (ee = Timetrap.entries(sheet)).each_with_index do |e, i|
@@ -87,7 +92,8 @@ module Timetrap
87
92
 
88
93
  from_current_day << e
89
94
  e_end = e.end || Time.now
90
- say "%27s%11s -%9s%10s %s" % [
95
+ say "%9s%18s%11s -%9s%10s %s" % [
96
+ (args['--ids'] ? e.id : ''),
91
97
  format_date_if_new(e.start, last_start),
92
98
  format_time(e.start),
93
99
  format_time(e.end),
@@ -115,7 +121,7 @@ module Timetrap
115
121
 
116
122
  def switch
117
123
  sheet = args.unused.join(' ')
118
- if not sheet then say "No sheet specified"; return end
124
+ if not sheet =~ /.+/ then say "No sheet specified"; return end
119
125
  say "Switching to sheet " + Timetrap.switch(sheet)
120
126
  end
121
127
 
@@ -200,6 +206,10 @@ module Timetrap
200
206
  ""
201
207
  end
202
208
 
209
+ def unused_args
210
+ args.unused.join(' ')
211
+ end
212
+
203
213
  public
204
214
  def say *something
205
215
  puts *something
@@ -219,10 +229,6 @@ module Timetrap
219
229
  Meta.find(:key => 'current_sheet').value
220
230
  end
221
231
 
222
- def invoked_as_executable?
223
- $0 == __FILE__
224
- end
225
-
226
232
  def entries sheet = nil
227
233
  Entry.filter(:sheet => sheet).order_by(:start)
228
234
  end
@@ -315,6 +321,15 @@ where COMMAND is one of:
315
321
  switch - switch to a new timesheet
316
322
 
317
323
  COMMAND OPTIONS
318
- -a, --at <time:qs> Use this time instead of now
324
+ options for `display'
325
+ --ids Print database ids (for use with alter)
326
+
327
+ options for `in' and `out'
328
+ --at <time:qs> Use this time instead of now
329
+
330
+ options for `alter'
331
+ --id <id:i> Alter entry with id <id> instead of the running entry
332
+ --start <time:qs> Change the start time to <time>
333
+ --end <time:qs> Change the end time to <time>
319
334
  EOF
320
335
  end
@@ -29,11 +29,33 @@ describe Timetrap do
29
29
  before do
30
30
  Timetrap.start "running entry", nil
31
31
  end
32
+
32
33
  it "should alter the description of the active period" do
33
34
  Timetrap.active_entry.note.should == 'running entry'
34
35
  invoke 'alter new description'
35
36
  Timetrap.active_entry.note.should == 'new description'
36
37
  end
38
+
39
+ it "should alter the start time of the active period" do
40
+ invoke 'alter --start "yesterday 10am"'
41
+ Timetrap.active_entry.start.should == Chronic.parse("yesterday 10am")
42
+ Timetrap.active_entry.note.should == 'running entry'
43
+ end
44
+
45
+ it "should alter the end time of the active period" do
46
+ entry = Timetrap.active_entry
47
+ invoke 'alter --end "yesterday 10am"'
48
+ entry.refresh.end.should == Chronic.parse("yesterday 10am")
49
+ entry.refresh.note.should == 'running entry'
50
+ end
51
+
52
+ it "should alter a non running entry based on id" do
53
+ not_running = Timetrap.active_entry
54
+ Timetrap.stop
55
+ Timetrap.start "another entry", nil
56
+ invoke "alter --id #{not_running.id} a new description"
57
+ not_running.refresh.note.should == 'a new description'
58
+ end
37
59
  end
38
60
 
39
61
  describe "backend" do
@@ -74,6 +96,19 @@ Timesheet: SpecSheet
74
96
  ---------------------------------------------------------
75
97
  Total 8:00:00
76
98
  OUTPUT
99
+
100
+ @desired_output_with_ids = <<-OUTPUT
101
+ Timesheet: SpecSheet
102
+ Id Day Start End Duration Notes
103
+ 3 Fri Oct 03, 2008 12:00:00 - 14:00:00 2:00:00 entry 1
104
+ 2 16:00:00 - 18:00:00 2:00:00 entry 2
105
+ 4:00:00
106
+ 4 Sun Oct 05, 2008 16:00:00 - 18:00:00 2:00:00 entry 3
107
+ 5 18:00:00 - 2:00:00 entry 4
108
+ 4:00:00
109
+ ---------------------------------------------------------
110
+ Total 8:00:00
111
+ OUTPUT
77
112
  end
78
113
 
79
114
  it "should display the current timesheet" do
@@ -93,6 +128,11 @@ Timesheet: SpecSheet
93
128
  invoke 'display S'
94
129
  $stdout.string.should == @desired_output
95
130
  end
131
+
132
+ it "should display a timesheet with ids" do
133
+ invoke 'display S --ids'
134
+ $stdout.string.should == @desired_output_with_ids
135
+ end
96
136
  end
97
137
 
98
138
  describe "format" do
@@ -251,6 +291,12 @@ current sheet: 0:01:00 (a timesheet that is running)
251
291
  invoke 'switch sheet 2'
252
292
  Timetrap.current_sheet.should == 'sheet 2'
253
293
  end
294
+
295
+ it "should not switch to an blank timesheet" do
296
+ invoke 'switch sheet 1'
297
+ invoke 'switch'
298
+ Timetrap.current_sheet.should == 'sheet 1'
299
+ end
254
300
  end
255
301
  end
256
302
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samg-timetrap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Goldstein