samg-timetrap 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.md +1 -1
  2. data/lib/timetrap.rb +56 -50
  3. metadata +1 -1
data/README.md CHANGED
@@ -50,7 +50,7 @@ The basic usage is as follows::
50
50
  $ t out
51
51
 
52
52
  The first command, ``t switch writing``, switches to the timesheet "writing"
53
- (or creates it if it does not exist). ``t in document timetrap ``--at`` "10 minutes
53
+ (or creates it if it does not exist). ``t in document timetrap --at "10 minutes
54
54
  ago"`` creates a new period in the current timesheet, and annotates it with the
55
55
  description "document timetrap". The optional ``--at`` flag can be passed to start
56
56
  the entry at a time other than the present. The ``--at`` flag is able to parse
data/lib/timetrap.rb CHANGED
@@ -13,41 +13,72 @@ module Timetrap
13
13
  attr_accessor :args
14
14
  extend self
15
15
 
16
- COMMANDS = {
17
- "alter" => "alter the description of the active period",
18
- "backend" => "open an the backend's interactive shell",
19
- "display" => "display the current timesheet",
20
- "format" => "export a sheet to csv format",
21
- "in" => "start the timer for the current timesheet",
22
- "kill" => "delete a timesheet",
23
- "list" => "show the available timesheets",
24
- "now" => "show the status of the current timesheet",
25
- "out" => "stop the timer for the current timesheet",
26
- "running" => "show all running timesheets",
27
- "switch" => "switch to a new timesheet"
28
- }
16
+ USAGE = <<-EOF
17
+
18
+ Timetrap - Simple Time Tracking
19
+
20
+ Usage: #{File.basename $0} COMMAND [OPTIONS] [ARGS...]
21
+
22
+ where COMMAND is one of:
23
+ * alter - alter the description of the active period
24
+ usage: t alter [--id ID] [--start TIME] [--end TIME] [NOTES]
25
+ -i, --id <id:i> Alter entry with id <id> instead of the running entry
26
+ -s, --start <time:qs> Change the start time to <time>
27
+ -e, --end <time:qs> Change the end time to <time>
28
+ * backend - open an the backend's interactive shell
29
+ usage: t backend
30
+ * display - display the current timesheet
31
+ usage: t display [--ids] [TIMESHEET]
32
+ -v, --ids Print database ids (for use with alter)
33
+ * format - export a sheet to csv format
34
+ NOT IMPLEMENTED
35
+ * in - start the timer for the current timesheet
36
+ usage: t in [--at TIME] [NOTES]
37
+ -a, --at <time:qs> Use this time instead of now
38
+ * kill - delete a timesheet
39
+ usage: t kill [--id ID] [TIMESHEET]
40
+ -i, --id <id:i> Alter entry with id <id> instead of the running entry
41
+ * list - show the available timesheets
42
+ usage: t list
43
+ * now - show the status of the current timesheet
44
+ usage: t now
45
+ * out - stop the timer for the current timesheet
46
+ usage: t out [--at TIME]
47
+ -a, --at <time:qs> Use this time instead of now
48
+ * running - show all running timesheets
49
+ NOT IMPLEMENTED
50
+ * switch - switch to a new timesheet
51
+ usage: t switch TIMESHEET
52
+
53
+ OTHER OPTIONS
54
+ -h, --help Display this help
55
+ EOF
29
56
 
30
57
  def parse arguments
31
58
  args.parse arguments
32
59
  end
33
60
 
34
61
  def invoke
35
- invoke_command_if_valid
62
+ args['-h'] ? say(USAGE) : invoke_command_if_valid
63
+ end
64
+
65
+ def commands
66
+ Timetrap::CLI::USAGE.scan(/\* \w+/).map{|s| s.gsub(/\* /, '')}
36
67
  end
37
68
 
38
69
  def invoke_command_if_valid
39
70
  command = args.unused.shift
40
- case (valid = COMMANDS.keys.select{|name| name =~ %r|^#{command}|}).size
71
+ case (valid = commands.select{|name| name =~ %r|^#{command}|}).size
41
72
  when 0 then say "Invalid command: #{command}"
42
73
  when 1 then send valid[0]
43
74
  else; say "Ambigous command: #{command}"; end
44
75
  end
45
76
 
46
77
  def alter
47
- entry = args['--id'] ? Entry[args['--id']] : Timetrap.active_entry
78
+ entry = args['-i'] ? Entry[args['-i']] : Timetrap.active_entry
48
79
  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'] =~ /.+/
80
+ entry.update :start => args['-s'] if args['-s'] =~ /.+/
81
+ entry.update :end => args['-e'] if args['-e'] =~ /.+/
51
82
  entry.update :note => unused_args if unused_args =~ /.+/
52
83
  end
53
84
 
@@ -56,15 +87,15 @@ module Timetrap
56
87
  end
57
88
 
58
89
  def in
59
- Timetrap.start unused_args, args['--at']
90
+ Timetrap.start unused_args, args['-a']
60
91
  end
61
92
 
62
93
  def out
63
- Timetrap.stop args['--at']
94
+ Timetrap.stop args['-a']
64
95
  end
65
96
 
66
97
  def kill
67
- if e = Entry[args['--id']]
98
+ if e = Entry[args['-i']]
68
99
  out = "are you sure you want to delete entry #{e.id}? "
69
100
  out << "(#{e.note}) " if e.note.to_s =~ /.+/
70
101
  print out
@@ -84,7 +115,7 @@ module Timetrap
84
115
  say "will not kill"
85
116
  end
86
117
  else
87
- victim = args['--id'] ? args['--id'].to_s.inspect : sheet.inspect
118
+ victim = args['-i'] ? args['-i'].to_s.inspect : sheet.inspect
88
119
  say "can't find #{victim} to kill", 'sheets:', *sheets
89
120
  end
90
121
  end
@@ -93,7 +124,7 @@ module Timetrap
93
124
  sheet = sheet_name_from_string(unused_args)
94
125
  sheet = (sheet =~ /.+/ ? sheet : Timetrap.current_sheet)
95
126
  say "Timesheet: #{sheet}"
96
- id_heading = args['--ids'] ? 'Id' : ' '
127
+ id_heading = args['-v'] ? 'Id' : ' '
97
128
  say "#{id_heading} Day Start End Duration Notes"
98
129
  last_start = nil
99
130
  from_current_day = []
@@ -103,7 +134,7 @@ module Timetrap
103
134
  from_current_day << e
104
135
  e_end = e.end || Time.now
105
136
  say "%-4s%16s%11s -%9s%10s %s" % [
106
- (args['--ids'] ? e.id : ''),
137
+ (args['-v'] ? e.id : ''),
107
138
  format_date_if_new(e.start, last_start),
108
139
  format_time(e.start),
109
140
  format_time(e.end),
@@ -315,31 +346,6 @@ module Timetrap
315
346
  create_table unless table_exists?
316
347
  end
317
348
  CLI.args = Getopt::Declare.new(<<-EOF)
318
- Usage: #{File.basename $0} COMMAND [OPTIONS] [ARGS...]
319
-
320
- where COMMAND is one of:
321
- alter - alter the description of the active period
322
- backend - open an the backend's interactive shell
323
- display - display the current timesheet
324
- format - export a sheet to csv format
325
- in - start the timer for the current timesheet
326
- kill - delete a timesheet
327
- list - show the available timesheets
328
- now - show the status of the current timesheet
329
- out - stop the timer for the current timesheet
330
- running - show all running timesheets
331
- switch - switch to a new timesheet
332
-
333
- COMMAND OPTIONS
334
- options for `display'
335
- --ids Print database ids (for use with alter)
336
-
337
- options for `in' and `out'
338
- --at <time:qs> Use this time instead of now
339
-
340
- options for `alter'
341
- --id <id:i> Alter entry with id <id> instead of the running entry
342
- --start <time:qs> Change the start time to <time>
343
- --end <time:qs> Change the end time to <time>
349
+ #{CLI::USAGE}
344
350
  EOF
345
351
  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.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Goldstein