timr 0.3.0 → 0.4.0
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.
- checksums.yaml +4 -4
- data/.ackrc +9 -0
- data/.editorconfig +1 -0
- data/.env.example +7 -0
- data/.github/CONTRIBUTING.md +32 -0
- data/.github/ISSUE_TEMPLATE.md +13 -0
- data/.gitignore +8 -2
- data/.rdoc_options +21 -0
- data/.travis.yml +10 -7
- data/Gemfile +8 -0
- data/README.md +216 -3
- data/bin/.gitignore +2 -0
- data/bin/README.md +17 -0
- data/bin/build.sh +14 -0
- data/bin/build_api.sh +14 -0
- data/bin/build_coverage.sh +23 -0
- data/bin/build_info.sh +27 -0
- data/bin/build_man.sh +41 -0
- data/bin/clean.sh +14 -0
- data/bin/dev_setup.sh +19 -0
- data/bin/install.sh +49 -0
- data/bin/publish +38 -0
- data/bin/release.sh +35 -0
- data/bin/test.sh +19 -0
- data/bin/timr +20 -40
- data/bin/timr_bash_completion.sh +337 -0
- data/bin/uninstall.sh +24 -0
- data/lib/timr.rb +36 -8
- data/lib/timr/command/basic_command.rb +170 -0
- data/lib/timr/command/continue_command.rb +86 -0
- data/lib/timr/command/help_command.rb +137 -0
- data/lib/timr/command/log_command.rb +297 -0
- data/lib/timr/command/pause_command.rb +89 -0
- data/lib/timr/command/pop_command.rb +176 -0
- data/lib/timr/command/push_command.rb +141 -0
- data/lib/timr/command/report_command.rb +689 -0
- data/lib/timr/command/start_command.rb +172 -0
- data/lib/timr/command/status_command.rb +198 -0
- data/lib/timr/command/stop_command.rb +127 -0
- data/lib/timr/command/task_command.rb +318 -0
- data/lib/timr/command/track_command.rb +381 -0
- data/lib/timr/command/version_command.rb +18 -0
- data/lib/timr/duration.rb +159 -0
- data/lib/timr/exception/timr_error.rb +113 -0
- data/lib/timr/ext/time.rb +12 -0
- data/lib/timr/helper/datetime_helper.rb +128 -0
- data/lib/timr/helper/terminal_helper.rb +58 -0
- data/lib/timr/helper/translation_helper.rb +45 -0
- data/lib/timr/model/basic_model.rb +287 -0
- data/lib/timr/model/config.rb +48 -0
- data/lib/timr/model/foreign_id_db.rb +84 -0
- data/lib/timr/model/stack.rb +161 -0
- data/lib/timr/model/task.rb +1039 -0
- data/lib/timr/model/track.rb +589 -0
- data/lib/timr/progressbar.rb +41 -0
- data/lib/timr/simple_opt_parser.rb +230 -0
- data/lib/timr/status.rb +70 -0
- data/lib/timr/table.rb +88 -0
- data/lib/timr/timr.rb +500 -558
- data/lib/timr/version.rb +4 -15
- data/man/.gitignore +2 -0
- data/man/_footer +3 -0
- data/man/timr-continue.1 +48 -0
- data/man/timr-continue.1.ronn +39 -0
- data/man/timr-ftime.7 +77 -0
- data/man/timr-ftime.7.ronn +57 -0
- data/man/timr-log.1 +109 -0
- data/man/timr-log.1.ronn +87 -0
- data/man/timr-pause.1 +56 -0
- data/man/timr-pause.1.ronn +45 -0
- data/man/timr-pop.1 +66 -0
- data/man/timr-pop.1.ronn +53 -0
- data/man/timr-push.1 +25 -0
- data/man/timr-push.1.ronn +20 -0
- data/man/timr-report.1 +228 -0
- data/man/timr-report.1.ronn +193 -0
- data/man/timr-start.1 +100 -0
- data/man/timr-start.1.ronn +82 -0
- data/man/timr-status.1 +53 -0
- data/man/timr-status.1.ronn +42 -0
- data/man/timr-stop.1 +75 -0
- data/man/timr-stop.1.ronn +60 -0
- data/man/timr-task.1 +147 -0
- data/man/timr-task.1.ronn +115 -0
- data/man/timr-track.1 +109 -0
- data/man/timr-track.1.ronn +89 -0
- data/man/timr.1 +119 -0
- data/man/timr.1.ronn +68 -0
- data/timr.gemspec +18 -3
- data/timr.sublime-project +20 -1
- metadata +142 -23
- data/Makefile +0 -12
- data/Makefile.common +0 -56
- data/lib/timr/stack.rb +0 -81
- data/lib/timr/task.rb +0 -258
- data/lib/timr/track.rb +0 -167
- data/lib/timr/window.rb +0 -259
- data/lib/timr/window_help.rb +0 -41
- data/lib/timr/window_tasks.rb +0 -30
- data/lib/timr/window_test.rb +0 -20
- data/lib/timr/window_timeline.rb +0 -33
- data/tests/tc_stack.rb +0 -121
- data/tests/tc_task.rb +0 -190
- data/tests/tc_track.rb +0 -144
- data/tests/tc_window.rb +0 -428
- 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
|