timetrap 1.8.3 → 1.8.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +10 -4
- data/VERSION.yml +1 -1
- data/lib/timetrap/cli.rb +24 -6
- data/lib/timetrap/timer.rb +9 -0
- data/spec/timetrap_spec.rb +33 -0
- data/timetrap.gemspec +2 -2
- metadata +2 -2
data/README.md
CHANGED
@@ -57,13 +57,19 @@ If you make a mistake use the `edit` command.
|
|
57
57
|
|
58
58
|
$ # edit the running entry's note
|
59
59
|
$ t edit writing readme
|
60
|
-
|
60
|
+
Editing running entry
|
61
61
|
|
62
62
|
You check out with the `out` command.
|
63
63
|
|
64
64
|
$ t out
|
65
65
|
Checked out of sheet "coding"
|
66
66
|
|
67
|
+
Running `edit` when you're checked out will edit the last sheet you checked out
|
68
|
+
of.
|
69
|
+
|
70
|
+
$ t edit --append "oh and that"
|
71
|
+
Editing last entry you checked out of
|
72
|
+
|
67
73
|
You can edit entries that aren't running using `edit`'s `--id` or `-i` flag.
|
68
74
|
`t display --ids` (or `t display -v`) will tell you the ids.
|
69
75
|
|
@@ -78,7 +84,7 @@ You can edit entries that aren't running using `edit`'s `--id` or `-i` flag.
|
|
78
84
|
|
79
85
|
$ # -i43 to edit entry 43
|
80
86
|
$ t e -i43 --end "2010-11-28 13:45"
|
81
|
-
|
87
|
+
Editing entry with id 43
|
82
88
|
|
83
89
|
$ t d
|
84
90
|
Timesheet: coding
|
@@ -264,8 +270,8 @@ Commands
|
|
264
270
|
|
265
271
|
**edit**
|
266
272
|
Inserts a note associated with the an entry in the timesheet, or edits the
|
267
|
-
start or end times. Defaults to the current
|
268
|
-
be passed with the entry's id (see display.)
|
273
|
+
start or end times. Defaults to the current entry, or previously running
|
274
|
+
entry. An ``--id`` flag can be passed with the entry's id (see display.)
|
269
275
|
|
270
276
|
usage: ``t edit [--id ID] [--start TIME] [--end TIME] [--append] [NOTES]``
|
271
277
|
|
data/VERSION.yml
CHANGED
data/lib/timetrap/cli.rb
CHANGED
@@ -53,7 +53,8 @@ COMMAND is one of:
|
|
53
53
|
found in the README included in this
|
54
54
|
distribution.
|
55
55
|
|
56
|
-
* edit - Alter an entry's note, start, or end time. Defaults to the active
|
56
|
+
* edit - Alter an entry's note, start, or end time. Defaults to the active
|
57
|
+
entry. Defaults to the last entry to be checked out of if no entry is active.
|
57
58
|
usage: t edit [--id ID] [--start TIME] [--end TIME] [--append] [NOTES]
|
58
59
|
-i, --id <id:i> Alter entry with id <id> instead of the running entry
|
59
60
|
-s, --start <time:qs> Change the start time to <time>
|
@@ -198,13 +199,24 @@ COMMAND is one of:
|
|
198
199
|
end
|
199
200
|
|
200
201
|
def edit
|
201
|
-
entry =
|
202
|
+
entry = case
|
203
|
+
when args['-i']
|
204
|
+
warn "Editing entry with id #{args['-i'].inspect}"
|
205
|
+
Entry[args['-i']]
|
206
|
+
when Timer.active_entry
|
207
|
+
warn "Editing running entry"
|
208
|
+
Timer.active_entry
|
209
|
+
when Timer.last_checkout
|
210
|
+
warn "Editing last entry you checked out of"
|
211
|
+
Timer.last_checkout
|
212
|
+
end
|
213
|
+
|
202
214
|
unless entry
|
203
|
-
warn "
|
215
|
+
warn "Can't find entry"
|
204
216
|
return
|
205
|
-
else
|
206
|
-
warn "editing entry ##{entry.id.inspect}"
|
207
217
|
end
|
218
|
+
warn ""
|
219
|
+
|
208
220
|
entry.update :start => args['-s'] if args['-s'] =~ /.+/
|
209
221
|
entry.update :end => args['-e'] if args['-e'] =~ /.+/
|
210
222
|
|
@@ -224,6 +236,8 @@ COMMAND is one of:
|
|
224
236
|
end
|
225
237
|
entry.update :note => note
|
226
238
|
end
|
239
|
+
|
240
|
+
puts format_entries(entry)
|
227
241
|
end
|
228
242
|
|
229
243
|
def backend
|
@@ -289,7 +303,7 @@ COMMAND is one of:
|
|
289
303
|
if entries == []
|
290
304
|
warn "No entries were selected to display."
|
291
305
|
else
|
292
|
-
puts
|
306
|
+
puts format_entries(entries)
|
293
307
|
end
|
294
308
|
end
|
295
309
|
|
@@ -385,5 +399,9 @@ COMMAND is one of:
|
|
385
399
|
$stdin.gets =~ /\Aye?s?\Z/i
|
386
400
|
end
|
387
401
|
|
402
|
+
def format_entries(entries)
|
403
|
+
load_formatter(args['-f'] || Config['default_formatter']).new(Array(entries)).output
|
404
|
+
end
|
405
|
+
|
388
406
|
end
|
389
407
|
end
|
data/lib/timetrap/timer.rb
CHANGED
@@ -83,6 +83,12 @@ module Timetrap
|
|
83
83
|
Entry.find(:sheet => (sheet || Timer.current_sheet), :end => nil)
|
84
84
|
end
|
85
85
|
|
86
|
+
# the last entry to be checked out of
|
87
|
+
def last_checkout
|
88
|
+
meta = Meta.find(:key => 'last_checkout_id')
|
89
|
+
Entry[meta.value] if meta
|
90
|
+
end
|
91
|
+
|
86
92
|
def running_entries
|
87
93
|
Entry.filter(:end => nil)
|
88
94
|
end
|
@@ -103,6 +109,9 @@ module Timetrap
|
|
103
109
|
time ||= Time.now
|
104
110
|
a.end = time
|
105
111
|
a.save
|
112
|
+
meta = Meta.find(:key => 'last_checkout_id') || Meta.create(:key => 'last_checkout_id')
|
113
|
+
meta.value = a.id
|
114
|
+
meta.save
|
106
115
|
end
|
107
116
|
a
|
108
117
|
end
|
data/spec/timetrap_spec.rb
CHANGED
@@ -188,9 +188,35 @@ describe Timetrap do
|
|
188
188
|
not_running = Timetrap::Timer.active_entry
|
189
189
|
Timetrap::Timer.stop(Timetrap::Timer.current_sheet)
|
190
190
|
Timetrap::Timer.start "another entry", nil
|
191
|
+
|
192
|
+
# create a few more entries to ensure we're not falling back on "last
|
193
|
+
# checked out of" feature.
|
194
|
+
Timetrap::Timer.stop(Timetrap::Timer.current_sheet)
|
195
|
+
Timetrap::Timer.start "another entry", nil
|
196
|
+
|
197
|
+
Timetrap::Timer.stop(Timetrap::Timer.current_sheet)
|
198
|
+
Timetrap::Timer.start "another entry", nil
|
199
|
+
|
191
200
|
invoke "edit --id #{not_running.id} a new description"
|
192
201
|
not_running.refresh.note.should == 'a new description'
|
193
202
|
end
|
203
|
+
|
204
|
+
it "should edit the entry last checked out of if none is running" do
|
205
|
+
not_running = Timetrap::Timer.active_entry
|
206
|
+
Timetrap::Timer.stop(Timetrap::Timer.current_sheet)
|
207
|
+
invoke "edit -z 'a new description'"
|
208
|
+
not_running.refresh.note.should include 'a new description'
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should edit the entry last checked out of if none is running even if the sheet is changed" do
|
212
|
+
not_running = Timetrap::Timer.active_entry
|
213
|
+
Timetrap::Timer.stop(Timetrap::Timer.current_sheet)
|
214
|
+
invoke "edit -z 'a new description'"
|
215
|
+
invoke "sheet another second sheet"
|
216
|
+
not_running.refresh.note.should include 'a new description'
|
217
|
+
not_running.refresh.sheet.should == 'default'
|
218
|
+
Timetrap::Timer.current_sheet.should == 'another second sheet'
|
219
|
+
end
|
194
220
|
end
|
195
221
|
|
196
222
|
describe "backend" do
|
@@ -989,6 +1015,13 @@ END:VCALENDAR
|
|
989
1015
|
time.to_i.should == e.refresh.end.to_i
|
990
1016
|
end
|
991
1017
|
|
1018
|
+
it "should track the last entry that was checked out of" do
|
1019
|
+
Timetrap::Timer.start 'some work'
|
1020
|
+
e = Timetrap::Timer.active_entry
|
1021
|
+
Timetrap::Timer.stop Timetrap::Timer.current_sheet
|
1022
|
+
Timetrap::Timer.last_checkout.id.should == e.id
|
1023
|
+
end
|
1024
|
+
|
992
1025
|
end
|
993
1026
|
|
994
1027
|
describe Timetrap::Helpers do
|
data/timetrap.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "timetrap"
|
8
|
-
s.version = "1.8.
|
8
|
+
s.version = "1.8.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Sam Goldstein"]
|
12
|
-
s.date = "2012-11-
|
12
|
+
s.date = "2012-11-17"
|
13
13
|
s.description = "Command line time tracker"
|
14
14
|
s.email = "sgrock@gmail.com"
|
15
15
|
s.executables = ["t"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timetrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|