timr 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.ackrc +9 -0
  3. data/.editorconfig +1 -0
  4. data/.env.example +7 -0
  5. data/.github/CONTRIBUTING.md +32 -0
  6. data/.github/ISSUE_TEMPLATE.md +13 -0
  7. data/.gitignore +8 -2
  8. data/.rdoc_options +21 -0
  9. data/.travis.yml +10 -7
  10. data/Gemfile +8 -0
  11. data/README.md +216 -3
  12. data/bin/.gitignore +2 -0
  13. data/bin/README.md +17 -0
  14. data/bin/build.sh +14 -0
  15. data/bin/build_api.sh +14 -0
  16. data/bin/build_coverage.sh +23 -0
  17. data/bin/build_info.sh +27 -0
  18. data/bin/build_man.sh +41 -0
  19. data/bin/clean.sh +14 -0
  20. data/bin/dev_setup.sh +19 -0
  21. data/bin/install.sh +49 -0
  22. data/bin/publish +38 -0
  23. data/bin/release.sh +35 -0
  24. data/bin/test.sh +19 -0
  25. data/bin/timr +20 -40
  26. data/bin/timr_bash_completion.sh +337 -0
  27. data/bin/uninstall.sh +24 -0
  28. data/lib/timr.rb +36 -8
  29. data/lib/timr/command/basic_command.rb +170 -0
  30. data/lib/timr/command/continue_command.rb +86 -0
  31. data/lib/timr/command/help_command.rb +137 -0
  32. data/lib/timr/command/log_command.rb +297 -0
  33. data/lib/timr/command/pause_command.rb +89 -0
  34. data/lib/timr/command/pop_command.rb +176 -0
  35. data/lib/timr/command/push_command.rb +141 -0
  36. data/lib/timr/command/report_command.rb +689 -0
  37. data/lib/timr/command/start_command.rb +172 -0
  38. data/lib/timr/command/status_command.rb +198 -0
  39. data/lib/timr/command/stop_command.rb +127 -0
  40. data/lib/timr/command/task_command.rb +318 -0
  41. data/lib/timr/command/track_command.rb +381 -0
  42. data/lib/timr/command/version_command.rb +18 -0
  43. data/lib/timr/duration.rb +159 -0
  44. data/lib/timr/exception/timr_error.rb +113 -0
  45. data/lib/timr/ext/time.rb +12 -0
  46. data/lib/timr/helper/datetime_helper.rb +128 -0
  47. data/lib/timr/helper/terminal_helper.rb +58 -0
  48. data/lib/timr/helper/translation_helper.rb +45 -0
  49. data/lib/timr/model/basic_model.rb +287 -0
  50. data/lib/timr/model/config.rb +48 -0
  51. data/lib/timr/model/foreign_id_db.rb +84 -0
  52. data/lib/timr/model/stack.rb +161 -0
  53. data/lib/timr/model/task.rb +1039 -0
  54. data/lib/timr/model/track.rb +589 -0
  55. data/lib/timr/progressbar.rb +41 -0
  56. data/lib/timr/simple_opt_parser.rb +230 -0
  57. data/lib/timr/status.rb +70 -0
  58. data/lib/timr/table.rb +88 -0
  59. data/lib/timr/timr.rb +500 -558
  60. data/lib/timr/version.rb +4 -15
  61. data/man/.gitignore +2 -0
  62. data/man/_footer +3 -0
  63. data/man/timr-continue.1 +48 -0
  64. data/man/timr-continue.1.ronn +39 -0
  65. data/man/timr-ftime.7 +77 -0
  66. data/man/timr-ftime.7.ronn +57 -0
  67. data/man/timr-log.1 +109 -0
  68. data/man/timr-log.1.ronn +87 -0
  69. data/man/timr-pause.1 +56 -0
  70. data/man/timr-pause.1.ronn +45 -0
  71. data/man/timr-pop.1 +66 -0
  72. data/man/timr-pop.1.ronn +53 -0
  73. data/man/timr-push.1 +25 -0
  74. data/man/timr-push.1.ronn +20 -0
  75. data/man/timr-report.1 +228 -0
  76. data/man/timr-report.1.ronn +193 -0
  77. data/man/timr-start.1 +100 -0
  78. data/man/timr-start.1.ronn +82 -0
  79. data/man/timr-status.1 +53 -0
  80. data/man/timr-status.1.ronn +42 -0
  81. data/man/timr-stop.1 +75 -0
  82. data/man/timr-stop.1.ronn +60 -0
  83. data/man/timr-task.1 +147 -0
  84. data/man/timr-task.1.ronn +115 -0
  85. data/man/timr-track.1 +109 -0
  86. data/man/timr-track.1.ronn +89 -0
  87. data/man/timr.1 +119 -0
  88. data/man/timr.1.ronn +68 -0
  89. data/timr.gemspec +18 -3
  90. data/timr.sublime-project +20 -1
  91. metadata +142 -23
  92. data/Makefile +0 -12
  93. data/Makefile.common +0 -56
  94. data/lib/timr/stack.rb +0 -81
  95. data/lib/timr/task.rb +0 -258
  96. data/lib/timr/track.rb +0 -167
  97. data/lib/timr/window.rb +0 -259
  98. data/lib/timr/window_help.rb +0 -41
  99. data/lib/timr/window_tasks.rb +0 -30
  100. data/lib/timr/window_test.rb +0 -20
  101. data/lib/timr/window_timeline.rb +0 -33
  102. data/tests/tc_stack.rb +0 -121
  103. data/tests/tc_task.rb +0 -190
  104. data/tests/tc_track.rb +0 -144
  105. data/tests/tc_window.rb +0 -428
  106. data/tests/ts_all.rb +0 -6
@@ -0,0 +1,297 @@
1
+
2
+ require 'date'
3
+ require 'time'
4
+
5
+ module TheFox
6
+ module Timr
7
+ module Command
8
+
9
+ # By default this Command prints all todays [Tracks](rdoc-ref:TheFox::Timr::Model::Track).
10
+ #
11
+ # Man page: [timr-log(1)](../../../../man/timr-log.1.html)
12
+ class LogCommand < BasicCommand
13
+
14
+ include TheFox::Timr::Helper
15
+ include TheFox::Timr::Error
16
+
17
+ # Path to man page.
18
+ MAN_PATH = 'man/timr-log.1'
19
+
20
+ def initialize(argv = Array.new)
21
+ super()
22
+
23
+ @help_opt = false
24
+
25
+ @from_opt = nil
26
+ @to_opt = nil
27
+
28
+ @start_date = nil
29
+ @end_date = nil
30
+
31
+ @start_time = nil
32
+ @end_time = nil
33
+
34
+ loop_c = 0 # Limit the loop.
35
+ while loop_c < 1024 && argv.length > 0
36
+ loop_c += 1
37
+ arg = argv.shift
38
+
39
+ case arg
40
+ when '-h', '--help'
41
+ @help_opt = true
42
+
43
+ when '-s', '--from'
44
+ @from_opt = Time.parse(argv.shift)
45
+ when '-e', '--to'
46
+ @to_opt = Time.parse(argv.shift)
47
+
48
+ when '-d', '--day'
49
+ @from_opt, @to_opt = DateTimeHelper.parse_day_argv(argv)
50
+ when '-m', '--month'
51
+ @from_opt, @to_opt = DateTimeHelper.parse_month_argv(argv)
52
+ when '-y', '--year'
53
+ @from_opt, @to_opt = DateTimeHelper.parse_year_argv(argv)
54
+
55
+ when '-a', '--all'
56
+ @from_opt = Time.parse('1970-01-01 00:00:00')
57
+ @to_opt = Time.parse('2099-12-31 23:59:59')
58
+
59
+ when '--sd', '--start-date'
60
+ @start_date = Time.parse(argv.shift)
61
+ when '--ed', '--end-date'
62
+ @end_date = Time.parse(argv.shift)
63
+ when '--st', '--start-time'
64
+ @start_time = Time.parse(argv.shift)
65
+ when '--et', '--end-time'
66
+ @end_time = Time.parse(argv.shift)
67
+
68
+ else
69
+ raise LogCommandError, "Unknown argument '#{arg}'. See 'timr log --help'."
70
+ end
71
+ end
72
+
73
+ @daytime_filter = false
74
+ if @start_date && @end_date && @start_time && @end_time
75
+ @from_opt = Time.parse("#{@start_date.strftime('%F')} #{@start_time.strftime('%T')}")
76
+ @to_opt = Time.parse("#{@end_date.strftime('%F')} #{@end_time.strftime('%T')}")
77
+
78
+ @daytime_filter = true
79
+ end
80
+
81
+ today = Date.today
82
+ unless @from_opt
83
+ @from_opt = Time.new(today.year, today.month, today.day, 0, 0, 0)
84
+ end
85
+ unless @to_opt
86
+ @to_opt = Time.new(today.year, today.month, today.day, 23, 59, 59)
87
+ end
88
+
89
+ @filter_options = {:from => @from_opt, :to => @to_opt}
90
+ end
91
+
92
+ # See BasicCommand#run.
93
+ def run
94
+ if @help_opt
95
+ help
96
+ return
97
+ end
98
+
99
+ @timr = Timr.new(@cwd)
100
+
101
+ print_small_table
102
+ end
103
+
104
+ private
105
+
106
+ def print_small_table
107
+ puts 'Selected datetime range:'
108
+ if @daytime_filter
109
+ puts "On every day from #{@start_date.strftime('%F')}"
110
+ puts " to #{@end_date.strftime('%F')}"
111
+ puts " between #{@start_time.strftime('%T %z')}"
112
+ puts " and #{@end_time.strftime('%T %z')}"
113
+ else
114
+ puts " From #{@from_opt.strftime('%F %T %z')}"
115
+ puts " To #{@to_opt.strftime('%F %T %z')}"
116
+ end
117
+ puts
118
+
119
+ table_options = {
120
+ :headings => [
121
+ {:format => '%3s', :label => '###'},
122
+ {:format => '%-14s', :label => 'START', :padding_left => ' ', :padding_right => ' '},
123
+ {:format => '%-14s', :label => 'END', :padding_left => ' ', :padding_right => ' '},
124
+ {:format => '%7s', :label => 'DUR', :padding_left => ' ', :padding_right => ' '},
125
+ {:format => '%-6s', :label => 'TASK', :padding_right => ' '},
126
+ {:format => '%s', :label => 'TRACK'},
127
+ ],
128
+ }
129
+ table = Table.new(table_options)
130
+
131
+ totals = {
132
+ :duration => Duration.new,
133
+ :task_c => 0,
134
+
135
+ :begin_datetime => nil,
136
+ :end_datetime => nil,
137
+ }
138
+
139
+ tmp_begin_options = {:format => '%y-%m-%d %H:%M'}
140
+ tmp_end_options = {:format => '%H:%M %y-%m-%d'}
141
+
142
+ glob_begin_options = {
143
+ :format => tmp_begin_options[:format],
144
+ :from => @from_opt,
145
+ }
146
+ glob_end_options = {
147
+ :format => tmp_end_options[:format],
148
+ :to => @to_opt,
149
+ }
150
+
151
+ table_has_rows = false
152
+ @timr.tracks(@filter_options).each do |track_id, track|
153
+ table_has_rows = true
154
+
155
+ task = track.task
156
+
157
+ if @daytime_filter
158
+ track.days.each do |track_day|
159
+ from = Time.parse("#{track_day.strftime('%F')} #{@start_time.strftime('%T')}")
160
+ to = Time.parse("#{track_day.strftime('%F')} #{@end_time.strftime('%T')}")
161
+
162
+ # Skip out-of-scope Tracks.
163
+ if track.end_datetime < from || track.begin_datetime > to
164
+ next
165
+ end
166
+
167
+ totals[:task_c] += 1
168
+
169
+ bdt = track.begin_datetime(@filter_options)
170
+ edt = track.end_datetime(@filter_options)
171
+ if bdt && (!totals[:begin_datetime] || bdt < totals[:begin_datetime])
172
+ totals[:begin_datetime] = bdt
173
+ end
174
+ if edt && (!totals[:end_datetime] || edt > totals[:end_datetime])
175
+ totals[:end_datetime] = edt
176
+ end
177
+
178
+ tmp_begin_options[:from] = from
179
+ tmp_end_options[:to] = to
180
+ begin_datetime_s = track.begin_datetime_s(tmp_begin_options)
181
+ end_datetime_s = track.end_datetime_s(tmp_end_options)
182
+
183
+ duration = track.duration({:from => from, :to => to})
184
+ if duration
185
+ totals[:duration] += duration
186
+ end
187
+
188
+ table << [
189
+ track_c,
190
+ begin_datetime_s,
191
+ end_datetime_s,
192
+ duration ? duration.to_human : '---',
193
+ task.short_id,
194
+ '%s %s' % [track.short_id, track.title(15)],
195
+ ]
196
+ end
197
+ else
198
+ totals[:task_c] += 1
199
+
200
+ bdt = track.begin_datetime(@filter_options)
201
+ edt = track.end_datetime(@filter_options)
202
+
203
+ if bdt && (!totals[:begin_datetime] || bdt < totals[:begin_datetime])
204
+ totals[:begin_datetime] = bdt
205
+ end
206
+ if edt && (!totals[:end_datetime] || edt > totals[:end_datetime])
207
+ totals[:end_datetime] = edt
208
+ end
209
+
210
+ begin_datetime_s = track.begin_datetime_s(glob_begin_options)
211
+ end_datetime_s = track.end_datetime_s(glob_end_options)
212
+
213
+ duration = track.duration(@filter_options)
214
+ if duration
215
+ totals[:duration] += duration
216
+ end
217
+
218
+ table << [
219
+ totals[:task_c],
220
+ begin_datetime_s,
221
+ end_datetime_s,
222
+ duration ? duration.to_human : '---',
223
+ task.short_id,
224
+ '%s %s' % [track.short_id, track.title(15)],
225
+ ]
226
+ end
227
+ end
228
+
229
+ table << []
230
+
231
+ totals[:begin_datetime_s] = totals[:begin_datetime] ? totals[:begin_datetime].localtime.strftime(glob_begin_options[:format]) : '---'
232
+
233
+ totals[:end_datetime_s] = totals[:end_datetime] ? totals[:end_datetime].localtime.strftime(glob_end_options[:format]) : '---'
234
+
235
+ # Add totals to the bottom.
236
+ table << [
237
+ nil, # track_c
238
+ totals[:begin_datetime_s],
239
+ totals[:end_datetime_s],
240
+ totals[:duration] ? totals[:duration].to_human : '---', # duration
241
+ 'TOTAL', # task
242
+ nil, # track
243
+ ]
244
+
245
+ if table_has_rows
246
+ puts table
247
+ else
248
+ puts 'No tracks found.'
249
+ end
250
+ end
251
+
252
+ def help
253
+ puts 'usage: timr log [-s|--from <date_time>] [-e|--to <date_time>]'
254
+ puts ' or: timr log --sd <date> --ed <date> --st <time> --et <time>'
255
+ puts ' or: timr log -d|--day <date>'
256
+ puts ' or: timr log -m|--month <YYYY-MM>'
257
+ puts ' or: timr log -y|--year <YYYY>'
258
+ puts ' or: timr log -a|--all'
259
+ puts ' or: timr log [-h|--help]'
260
+ puts
261
+ puts 'Total Filter'
262
+ puts " -s, --from '<date_time>' From Date/Time. Must be in quotes."
263
+ puts ' Default: today 00:00:00'
264
+ puts " -e, --to '<date_time>' To Date/Time. Must be in quotes."
265
+ puts ' Default: today 23:59:59'
266
+ puts ' -d, --day <date> A single day from 00:00 to 23:59.'
267
+ puts ' -m, --month <[YYYY-]MM> A single month from 01 to 31.'
268
+ puts ' -y, --year [<YYYY>] A single year from 01-01 to 12-31.'
269
+ puts ' -a, --all Show all Tracks.'
270
+ puts
271
+ puts 'Day Time Filter'
272
+ puts ' --sd, --start-date <date> Start Date'
273
+ puts ' --ed, --end-date <date> End Date'
274
+ puts ' --st, --start-time <time> Start Time'
275
+ puts ' --et, --end-time <time> End Time'
276
+ puts
277
+ puts 'If you would like to filter everything between 09:00 and 17:00 on every day'
278
+ puts 'in the range from Mon 2017-03-06 to Fri 2017-03-10:'
279
+ puts
280
+ puts ' timr log --sd 2017-03-06 --ed 2017-03-10 --st 09:00 --et 17:00'
281
+ puts
282
+ puts 'Columns'
283
+ puts ' START Track Start Date'
284
+ puts ' END Track End Date'
285
+ puts ' DUR Track Duration'
286
+ puts ' TASK Task ID'
287
+ puts ' TRACK Track ID and Title.'
288
+ puts
289
+ HelpCommand.print_datetime_help
290
+ puts
291
+ end
292
+
293
+ end # class LogCommand
294
+
295
+ end # module Command
296
+ end # module Timr
297
+ end # module TheFox
@@ -0,0 +1,89 @@
1
+
2
+ module TheFox
3
+ module Timr
4
+ module Command
5
+
6
+ # Pause the current running [Track](rdoc-ref:TheFox::Timr::Model::Track).
7
+ #
8
+ # Man page: [timr-pause(1)](../../../../man/timr-pause.1.html)
9
+ class PauseCommand < BasicCommand
10
+
11
+ include TheFox::Timr::Helper
12
+ include TheFox::Timr::Error
13
+
14
+ # Path to man page.
15
+ MAN_PATH = 'man/timr-pause.1'
16
+
17
+ def initialize(argv = Array.new)
18
+ super()
19
+
20
+ @help_opt = false
21
+
22
+ @end_date_opt = nil
23
+ @end_time_opt = nil
24
+
25
+ loop_c = 0 # Limit the loop.
26
+ while loop_c < 1024 && argv.length > 0
27
+ loop_c += 1
28
+ arg = argv.shift
29
+
30
+ case arg
31
+ when '-h', '--help'
32
+ @help_opt = true
33
+ when '--ed', '--end-date', '-d', '--date'
34
+ @end_date_opt = argv.shift
35
+ when '--et', '--end-time', '-t', '--time'
36
+ @end_time_opt = argv.shift
37
+ else
38
+ raise PauseCommandError, "Unknown argument '#{arg}'. See 'timr pause --help'."
39
+ end
40
+ end
41
+ end
42
+
43
+ # See BasicCommand.
44
+ def run
45
+ if @help_opt
46
+ help
47
+ return
48
+ end
49
+
50
+ @timr = Timr.new(@cwd)
51
+
52
+ options = {
53
+ :end_date => @end_date_opt,
54
+ :end_time => @end_time_opt,
55
+ }
56
+
57
+ track = @timr.pause(options)
58
+ unless track
59
+ puts 'No running Track to pause.'
60
+ return
61
+ end
62
+
63
+ puts '--- PAUSED ---'
64
+ puts track.to_compact_str
65
+ puts @timr.stack
66
+ end
67
+
68
+ private
69
+
70
+ def help
71
+ puts 'usage: timr pause [-d|--date <date>] [-t|--time <time>]'
72
+ puts ' or: timr pause [-h|--help]'
73
+ puts
74
+ puts 'Track Options'
75
+ puts ' --ed, --end-date <date> Track End Date'
76
+ puts ' --et, --end-time <time> Track End Time'
77
+ puts
78
+ puts ' -d, --date <date> --end-date alias.'
79
+ puts ' -t, --time <time> --end-time alias.'
80
+ puts
81
+ HelpCommand.print_datetime_help
82
+ puts
83
+ end
84
+
85
+ end # class PauseCommand
86
+
87
+ end # module Command
88
+ end # module Timr
89
+ end # module TheFox
@@ -0,0 +1,176 @@
1
+
2
+ module TheFox
3
+ module Timr
4
+ module Command
5
+
6
+ # This command pops the Top [Track](rdoc-ref:TheFox::Timr::Model::Track), makes a duplication
7
+ # of the next Track on the [Stack](rdoc-ref:TheFox::Timr::Model::Stack), pops the next,
8
+ # and pushes the duplication Track back on the Stack. There are at least 3 Tracks involved.
9
+ #
10
+ # Man page: [timr-pop(1)](../../../../man/timr-pop.1.html)
11
+ #
12
+ # ### Example
13
+ #
14
+ # Example Stack before pop:
15
+ #
16
+ # ```
17
+ # Track 1234 stopped
18
+ # Track 2345 stopped
19
+ # Track 3456 running
20
+ # ```
21
+ #
22
+ # Pop Execution
23
+ #
24
+ # 1. Make duplication of Track `3456` -> new Track `4567`.
25
+ # Because Track `3456` is the latest Track on the Stack. Sometimes call *Top Track*.
26
+ # 2. Pop Track `3456` from Stack.
27
+ # 3. Push new Track `4567` to Stack.
28
+ #
29
+ # Example Stack after pop:
30
+ #
31
+ # ```
32
+ # Track 1234 stopped
33
+ # Track 2345 stopped
34
+ # Track 4567 running
35
+ # ```
36
+ class PopCommand < BasicCommand
37
+
38
+ include TheFox::Timr::Helper
39
+ include TheFox::Timr::Error
40
+
41
+ # Path to man page.
42
+ MAN_PATH = 'man/timr-pop.1'
43
+
44
+ def initialize(argv = Array.new)
45
+ super()
46
+
47
+ @help_opt = false
48
+
49
+ @start_date_opt = nil
50
+ @start_time_opt = nil
51
+ @end_date_opt = nil
52
+ @end_time_opt = nil
53
+
54
+ @date_opt = nil
55
+ @time_opt = nil
56
+
57
+ loop_c = 0 # Limit the loop.
58
+ while loop_c < 1024 && argv.length > 0
59
+ loop_c += 1
60
+ arg = argv.shift
61
+
62
+ case arg
63
+ when '-h', '--help'
64
+ @help_opt = true
65
+
66
+ when '--sd', '--start-date'
67
+ @start_date_opt = argv.shift
68
+ when '--st', '--start-time'
69
+ @start_time_opt = argv.shift
70
+ when '--ed', '--end-date'
71
+ @end_date_opt = argv.shift
72
+ when '--et', '--end-time'
73
+ @end_time_opt = argv.shift
74
+
75
+ when '-d', '--date'
76
+ @date_opt = argv.shift
77
+ when '-t', '--time'
78
+ @time_opt = argv.shift
79
+
80
+ else
81
+ raise PopCommandError, "Unknown argument '#{arg}'. See 'timr pop --help'."
82
+ end
83
+ end
84
+
85
+ if @date_opt
86
+ @start_date_opt = @date_opt
87
+ @end_date_opt = @date_opt
88
+ end
89
+ if @time_opt
90
+ @start_time_opt = @time_opt
91
+ @end_time_opt = @time_opt
92
+ end
93
+ end
94
+
95
+ # See BasicCommand#run.
96
+ def run
97
+ if @help_opt
98
+ help
99
+ return
100
+ end
101
+
102
+ @timr = Timr.new(@cwd)
103
+
104
+ # Stop
105
+ options = {
106
+ :date => @end_date_opt,
107
+ :time => @end_time_opt,
108
+ }
109
+
110
+ track = @timr.stop(options)
111
+ unless track
112
+ puts 'No running Track to pop/stop.'
113
+ return
114
+ end
115
+
116
+ task = track.task
117
+ unless task
118
+ raise TrackError, "Track #{track.id} has no Task."
119
+ end
120
+
121
+ puts '--- POPED ---'
122
+ puts track.to_compact_str
123
+ puts
124
+
125
+ # Continue
126
+ options = {
127
+ :date => @start_date_opt,
128
+ :time => @start_time_opt,
129
+ }
130
+
131
+ track = @timr.continue(options)
132
+ unless track
133
+ puts 'No running Track left on Stack to continue.'
134
+ return
135
+ end
136
+
137
+ task = track.task
138
+ unless task
139
+ raise TrackError, "Track #{track.id} has no Task."
140
+ end
141
+
142
+ puts '--- CONTINUED ---'
143
+ puts track.to_compact_str
144
+ puts
145
+ puts @timr.stack
146
+ end
147
+
148
+ private
149
+
150
+ def help
151
+ puts 'usage: timr pop [--sd|--start-date <date>] [--st|--start-time <time>]'
152
+ puts ' [--ed|--end-date <date>] [--et|--end-time <time>]'
153
+ puts ' or: timr pop [-d|--date <date>] [-t|--time <time>]'
154
+ puts ' or: timr pop [-h|--help]'
155
+ puts
156
+ puts 'Track Options'
157
+ puts ' --sd, --start-date <date> Start Date for the next underlying Track.'
158
+ puts ' --st, --start-time <time> Start Time for the next underlying Track.'
159
+ puts
160
+ puts ' --ed, --end-date <date> End Date for the current running Track.'
161
+ puts ' --et, --end-time <time> End Time for the current running Track.'
162
+ puts
163
+ puts " -d, --date <date> Alias for"
164
+ puts " '--end-date <date> --start-date <date>'."
165
+ puts " -t, --time <time> Alias for"
166
+ puts " '--end-time <time> --start-time <time>'."
167
+ puts
168
+ HelpCommand.print_datetime_help
169
+ puts
170
+ end
171
+
172
+ end # class PopCommand
173
+
174
+ end # module Command
175
+ end # module Timr
176
+ end # module TheFox