doing 2.0.3.pre → 2.0.5.pre
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/CHANGELOG.md +7 -1
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/bin/doing +10 -10
- data/doing.rdoc +11 -11
- data/example_plugin.rb +1 -1
- data/lib/doing/configuration.rb +2 -0
- data/lib/doing/plugins/export/json_export.rb +2 -2
- data/lib/doing/plugins/export/template_export.rb +1 -1
- data/lib/doing/string.rb +2 -1
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +51 -12
- data/lib/examples/commands/wiki.rb +1 -0
- data/lib/examples/plugins/say_export.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8b6463637877fecac4b70b4df2e26f5fed8d2fb948433c9fbb43f7ffb32d4c20
|
|
4
|
+
data.tar.gz: 68003a5d25dede906536a36a87f96ac772d5d1cefcec6f25b3be5e7db3cfce2e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3b7fc79db4221f6e7a4d6d923ad845b26f234d03fd4c16940ad046d94dd33321b645dc7447707b962142b7b559b08583d0dda8aecbf35c77db00d24ded68db1f
|
|
7
|
+
data.tar.gz: 782b17f9a291872c46bf704ea77d028a86d05461e5fc378431d8b16a95a6d55e8727c596c6c6f8c7ac1e469c0d85455dd67f38ae4dae2e565ae24fea0166dfc1
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -6,7 +6,7 @@ _If you're one of the rare people like me who find this useful, feel free to [bu
|
|
|
6
6
|
|
|
7
7
|
<!--README-->
|
|
8
8
|
|
|
9
|
-
The current version of `doing` is <!--VER-->2.0.
|
|
9
|
+
The current version of `doing` is <!--VER-->2.0.2<!--END VER-->.
|
|
10
10
|
|
|
11
11
|
Find all of the documentation in the [doing wiki](https://github.com/ttscoff/doing/wiki).
|
|
12
12
|
|
data/bin/doing
CHANGED
|
@@ -200,7 +200,7 @@ command %i[reset begin] do |c|
|
|
|
200
200
|
c.flag [:bool], must_match: REGEX_BOOL, default_value: 'AND'
|
|
201
201
|
|
|
202
202
|
c.desc 'Select from a menu of matching entries'
|
|
203
|
-
c.switch %i[i interactive]
|
|
203
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
204
204
|
|
|
205
205
|
c.action do |global_options, options, args|
|
|
206
206
|
if options[:section]
|
|
@@ -271,7 +271,7 @@ command :note do |c|
|
|
|
271
271
|
c.flag [:bool], must_match: REGEX_BOOL, default_value: 'AND'
|
|
272
272
|
|
|
273
273
|
c.desc 'Select item for new note from a menu of matching entries'
|
|
274
|
-
c.switch %i[i interactive]
|
|
274
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
275
275
|
|
|
276
276
|
c.action do |_global_options, options, args|
|
|
277
277
|
if options[:section]
|
|
@@ -774,7 +774,7 @@ command :cancel do |c|
|
|
|
774
774
|
c.switch %i[u unfinished], negatable: false, default_value: false
|
|
775
775
|
|
|
776
776
|
c.desc 'Select item(s) to cancel from a menu of matching entries'
|
|
777
|
-
c.switch %i[i interactive]
|
|
777
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
778
778
|
|
|
779
779
|
c.action do |_global_options, options, args|
|
|
780
780
|
if options[:section]
|
|
@@ -867,7 +867,7 @@ command :finish do |c|
|
|
|
867
867
|
c.flag %i[s section]
|
|
868
868
|
|
|
869
869
|
c.desc 'Select item(s) to finish from a menu of matching entries'
|
|
870
|
-
c.switch %i[i interactive]
|
|
870
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
871
871
|
|
|
872
872
|
c.action do |_global_options, options, args|
|
|
873
873
|
unless options[:auto]
|
|
@@ -963,7 +963,7 @@ command %i[again resume] do |c|
|
|
|
963
963
|
c.flag %i[n note]
|
|
964
964
|
|
|
965
965
|
c.desc 'Select item to resume from a menu of matching entries'
|
|
966
|
-
c.switch %i[i interactive]
|
|
966
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
967
967
|
|
|
968
968
|
c.action do |_global_options, options, _args|
|
|
969
969
|
tags = options[:tag].nil? ? [] : options[:tag].to_tags
|
|
@@ -1042,7 +1042,7 @@ command :tag do |c|
|
|
|
1042
1042
|
c.flag [:bool], must_match: REGEX_BOOL, default_value: 'AND'
|
|
1043
1043
|
|
|
1044
1044
|
c.desc 'Select item(s) to tag from a menu of matching entries'
|
|
1045
|
-
c.switch %i[i interactive]
|
|
1045
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
1046
1046
|
|
|
1047
1047
|
c.action do |_global_options, options, args|
|
|
1048
1048
|
raise Doing::Errors::MissingArgument, 'You must specify at least one tag' if args.empty? && !options[:a]
|
|
@@ -1170,7 +1170,7 @@ command [:mark, :flag] do |c|
|
|
|
1170
1170
|
c.flag [:bool], must_match: REGEX_BOOL, default_value: 'AND'
|
|
1171
1171
|
|
|
1172
1172
|
c.desc 'Select item(s) to flag from a menu of matching entries'
|
|
1173
|
-
c.switch %i[i interactive]
|
|
1173
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
1174
1174
|
|
|
1175
1175
|
c.action do |_global_options, options, _args|
|
|
1176
1176
|
mark = settings['marker_tag'] || 'flagged'
|
|
@@ -1302,7 +1302,7 @@ command :show do |c|
|
|
|
1302
1302
|
c.switch [:only_timed], default_value: false, negatable: false
|
|
1303
1303
|
|
|
1304
1304
|
c.desc 'Select from a menu of matching entries to perform additional operations'
|
|
1305
|
-
c.switch %i[i interactive]
|
|
1305
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
1306
1306
|
|
|
1307
1307
|
c.desc "Output to export format (#{Doing::Plugins.plugin_names(type: :export)})"
|
|
1308
1308
|
c.arg_name 'FORMAT'
|
|
@@ -1476,7 +1476,7 @@ command :recent do |c|
|
|
|
1476
1476
|
c.flag [:tag_sort], must_match: /^(?:name|time)$/i, default_value: default
|
|
1477
1477
|
|
|
1478
1478
|
c.desc 'Select from a menu of matching entries to perform additional operations'
|
|
1479
|
-
c.switch %i[i interactive]
|
|
1479
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
1480
1480
|
|
|
1481
1481
|
c.action do |global_options, options, args|
|
|
1482
1482
|
section = wwid.guess_section(options[:s]) || options[:s].cap_first
|
|
@@ -1923,7 +1923,7 @@ command :view do |c|
|
|
|
1923
1923
|
c.switch [:only_timed], default_value: false, negatable: false
|
|
1924
1924
|
|
|
1925
1925
|
c.desc 'Select from a menu of matching entries to perform additional operations'
|
|
1926
|
-
c.switch %i[i interactive]
|
|
1926
|
+
c.switch %i[i interactive], negatable: false, default_value: false
|
|
1927
1927
|
|
|
1928
1928
|
c.action do |_global_options, options, args|
|
|
1929
1929
|
raise InvalidExportType, "Invalid export type: #{options[:output]}" if options[:output] && options[:output] !~ Doing::Plugins.plugin_regex(type: :export)
|
data/doing.rdoc
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Doing uses a TaskPaper-like formatting to keep a plain text record of what you've been doing, complete with tag-based time tracking. The command line tool allows you to add entries, annotate with tags and notes, and view your entries with myriad options, with a focus on a "natural" language syntax.
|
|
4
4
|
|
|
5
|
-
v2.0.
|
|
5
|
+
v2.0.5.pre
|
|
6
6
|
|
|
7
7
|
=== Global Options
|
|
8
8
|
=== --config_file arg
|
|
@@ -128,7 +128,7 @@ Edit duplicated entry with vim before adding
|
|
|
128
128
|
|
|
129
129
|
|
|
130
130
|
|
|
131
|
-
===== -i|--
|
|
131
|
+
===== -i|--interactive
|
|
132
132
|
Select item to resume from a menu of matching entries
|
|
133
133
|
|
|
134
134
|
|
|
@@ -223,7 +223,7 @@ Archive entries
|
|
|
223
223
|
|
|
224
224
|
|
|
225
225
|
|
|
226
|
-
===== -i|--
|
|
226
|
+
===== -i|--interactive
|
|
227
227
|
Select item(s) to cancel from a menu of matching entries
|
|
228
228
|
|
|
229
229
|
|
|
@@ -439,7 +439,7 @@ Include date
|
|
|
439
439
|
|
|
440
440
|
|
|
441
441
|
|
|
442
|
-
===== -i|--
|
|
442
|
+
===== -i|--interactive
|
|
443
443
|
Select item(s) to finish from a menu of matching entries
|
|
444
444
|
|
|
445
445
|
|
|
@@ -721,7 +721,7 @@ Don't ask permission to flag all entries when count is 0
|
|
|
721
721
|
|
|
722
722
|
|
|
723
723
|
|
|
724
|
-
===== -i|--
|
|
724
|
+
===== -i|--interactive
|
|
725
725
|
Select item(s) to flag from a menu of matching entries
|
|
726
726
|
|
|
727
727
|
|
|
@@ -815,7 +815,7 @@ Edit entry with vim
|
|
|
815
815
|
|
|
816
816
|
|
|
817
817
|
|
|
818
|
-
===== -i|--
|
|
818
|
+
===== -i|--interactive
|
|
819
819
|
Select item for new note from a menu of matching entries
|
|
820
820
|
|
|
821
821
|
|
|
@@ -965,7 +965,7 @@ Sort tags by (name|time)
|
|
|
965
965
|
[Must Match] (?i-mx:^(?:name|time)$)
|
|
966
966
|
|
|
967
967
|
|
|
968
|
-
===== -i|--
|
|
968
|
+
===== -i|--interactive
|
|
969
969
|
Select from a menu of matching entries to perform additional operations
|
|
970
970
|
|
|
971
971
|
|
|
@@ -1014,7 +1014,7 @@ Reset last entry matching tag
|
|
|
1014
1014
|
[Default Value] None
|
|
1015
1015
|
|
|
1016
1016
|
|
|
1017
|
-
===== -i|--
|
|
1017
|
+
===== -i|--interactive
|
|
1018
1018
|
Select from a menu of matching entries
|
|
1019
1019
|
|
|
1020
1020
|
|
|
@@ -1281,7 +1281,7 @@ Sort tags by (name|time)
|
|
|
1281
1281
|
[Must Match] (?i-mx:^(?:name|time))
|
|
1282
1282
|
|
|
1283
1283
|
|
|
1284
|
-
===== -i|--
|
|
1284
|
+
===== -i|--interactive
|
|
1285
1285
|
Select from a menu of matching entries to perform additional operations
|
|
1286
1286
|
|
|
1287
1287
|
|
|
@@ -1416,7 +1416,7 @@ Don't ask permission to tag all entries when count is 0
|
|
|
1416
1416
|
|
|
1417
1417
|
|
|
1418
1418
|
|
|
1419
|
-
===== -i|--
|
|
1419
|
+
===== -i|--interactive
|
|
1420
1420
|
Select item(s) to tag from a menu of matching entries
|
|
1421
1421
|
|
|
1422
1422
|
|
|
@@ -1605,7 +1605,7 @@ Include colors in output
|
|
|
1605
1605
|
|
|
1606
1606
|
|
|
1607
1607
|
|
|
1608
|
-
===== -i|--
|
|
1608
|
+
===== -i|--interactive
|
|
1609
1609
|
Select from a menu of matching entries to perform additional operations
|
|
1610
1610
|
|
|
1611
1611
|
|
data/example_plugin.rb
CHANGED
|
@@ -150,7 +150,7 @@ module Doing
|
|
|
150
150
|
finished_at = i.end_date
|
|
151
151
|
took += finished_at.strftime('%A %B %e at %I:%M%p')
|
|
152
152
|
|
|
153
|
-
d, h, m = wwid.
|
|
153
|
+
d, h, m = wwid.format_time(interval)
|
|
154
154
|
took += ' and it took'
|
|
155
155
|
took += " #{d.to_i} days" if d.to_i.positive?
|
|
156
156
|
took += " #{h.to_i} hours" if h.to_i.positive?
|
data/lib/doing/configuration.rb
CHANGED
|
@@ -56,7 +56,7 @@ module Doing
|
|
|
56
56
|
end_date: end_date,
|
|
57
57
|
title: title.strip, #+ " #{note}"
|
|
58
58
|
note: note.instance_of?(Array) ? note.to_s : note,
|
|
59
|
-
time: '%02d:%02d:%02d' % wwid.
|
|
59
|
+
time: '%02d:%02d:%02d' % wwid.format_time(interval),
|
|
60
60
|
tags: tags
|
|
61
61
|
}
|
|
62
62
|
|
|
@@ -68,7 +68,7 @@ module Doing
|
|
|
68
68
|
new_item = {
|
|
69
69
|
'id' => index + 1,
|
|
70
70
|
'content' => title.strip, #+ " #{note}"
|
|
71
|
-
'title' => title.strip + " (#{'%02d:%02d:%02d' % wwid.
|
|
71
|
+
'title' => title.strip + " (#{'%02d:%02d:%02d' % wwid.format_time(interval)})",
|
|
72
72
|
'start' => i.date.strftime('%F %T'),
|
|
73
73
|
'type' => 'box',
|
|
74
74
|
'style' => 'color:#4c566b;background-color:#d8dee9;'
|
|
@@ -132,7 +132,7 @@ module Doing
|
|
|
132
132
|
out += "#{output}\n"
|
|
133
133
|
end
|
|
134
134
|
# Doing.logger.debug('Template Export:', "#{items.count} items output to template #{opt[:template]}")
|
|
135
|
-
out += wwid.tag_times(format:
|
|
135
|
+
out += wwid.tag_times(format: wwid.config['timer_format'].to_sym, sort_by_name: opt[:sort_tags], sort_order: opt[:tag_order]) if opt[:totals]
|
|
136
136
|
out
|
|
137
137
|
end
|
|
138
138
|
|
data/lib/doing/string.rb
CHANGED
|
@@ -255,6 +255,7 @@ module Doing
|
|
|
255
255
|
else
|
|
256
256
|
add = tag
|
|
257
257
|
add += "(#{value})" unless value.nil?
|
|
258
|
+
title.chomp!
|
|
258
259
|
title += " @#{add}"
|
|
259
260
|
|
|
260
261
|
title.dedup_tags!
|
|
@@ -262,7 +263,7 @@ module Doing
|
|
|
262
263
|
# Doing.logger.debug('Added tag:', %(#{('@' + tag).cyan} to "#{title}"))
|
|
263
264
|
end
|
|
264
265
|
|
|
265
|
-
title
|
|
266
|
+
title.gsub(/ +/, ' ')
|
|
266
267
|
end
|
|
267
268
|
|
|
268
269
|
##
|
data/lib/doing/version.rb
CHANGED
data/lib/doing/wwid.rb
CHANGED
|
@@ -1178,6 +1178,7 @@ module Doing
|
|
|
1178
1178
|
else
|
|
1179
1179
|
old_title = item.title.dup
|
|
1180
1180
|
should_date = opt[:date] && item.should_time?
|
|
1181
|
+
item.title.tag!('done', remove: true) if tag =~ /done/ && !should_date
|
|
1181
1182
|
item.title.tag!(tag, value: should_date ? done_date.strftime('%F %R') : nil)
|
|
1182
1183
|
added << tag if old_title != item.title
|
|
1183
1184
|
end
|
|
@@ -1997,7 +1998,7 @@ module Doing
|
|
|
1997
1998
|
EOS
|
|
1998
1999
|
sorted_tags_data.reverse.each do |k, v|
|
|
1999
2000
|
if v > 0
|
|
2000
|
-
output += "<tr><td style='text-align:left;'>#{k}</td><td style='text-align:left;'>#{'%02d:%02d:%02d' %
|
|
2001
|
+
output += "<tr><td style='text-align:left;'>#{k}</td><td style='text-align:left;'>#{'%02d:%02d:%02d' % format_time(v)}</td></tr>\n"
|
|
2001
2002
|
end
|
|
2002
2003
|
end
|
|
2003
2004
|
tail = <<EOS
|
|
@@ -2008,7 +2009,7 @@ EOS
|
|
|
2008
2009
|
<tfoot>
|
|
2009
2010
|
<tr>
|
|
2010
2011
|
<td style="text-align:left;"><strong>Total</strong></td>
|
|
2011
|
-
<td style="text-align:left;">#{'%02d:%02d:%02d' %
|
|
2012
|
+
<td style="text-align:left;">#{'%02d:%02d:%02d' % format_time(total)}</td>
|
|
2012
2013
|
</tr>
|
|
2013
2014
|
</tfoot>
|
|
2014
2015
|
</table>
|
|
@@ -2022,7 +2023,7 @@ EOS
|
|
|
2022
2023
|
EOS
|
|
2023
2024
|
sorted_tags_data.reverse.each do |k, v|
|
|
2024
2025
|
if v > 0
|
|
2025
|
-
output += "| #{' ' * (pad - k.length)}#{k} | #{'%02d:%02d:%02d' %
|
|
2026
|
+
output += "| #{' ' * (pad - k.length)}#{k} | #{'%02d:%02d:%02d' % format_time(v)} |\n"
|
|
2026
2027
|
end
|
|
2027
2028
|
end
|
|
2028
2029
|
tail = "[Tag Totals]"
|
|
@@ -2030,7 +2031,7 @@ EOS
|
|
|
2030
2031
|
when :json
|
|
2031
2032
|
output = []
|
|
2032
2033
|
sorted_tags_data.reverse.each do |k, v|
|
|
2033
|
-
d, h, m =
|
|
2034
|
+
d, h, m = format_time(v)
|
|
2034
2035
|
output << {
|
|
2035
2036
|
'tag' => k,
|
|
2036
2037
|
'seconds' => v,
|
|
@@ -2038,6 +2039,39 @@ EOS
|
|
|
2038
2039
|
}
|
|
2039
2040
|
end
|
|
2040
2041
|
output
|
|
2042
|
+
when :human
|
|
2043
|
+
output = []
|
|
2044
|
+
sorted_tags_data.reverse.each do |k, v|
|
|
2045
|
+
spacer = ''
|
|
2046
|
+
(max - k.length).times do
|
|
2047
|
+
spacer += ' '
|
|
2048
|
+
end
|
|
2049
|
+
d, h, m = format_time(v, human: true)
|
|
2050
|
+
output.push("┃ #{spacer}#{k}:#{format('%<h> 4dh %<m>02dm', h: h, m: m)} ┃")
|
|
2051
|
+
end
|
|
2052
|
+
|
|
2053
|
+
header = '┏━━ Tag Totals '
|
|
2054
|
+
(max - 2).times { header += '━' }
|
|
2055
|
+
header += '┓'
|
|
2056
|
+
footer = '┗'
|
|
2057
|
+
(max + 12).times { footer += '━' }
|
|
2058
|
+
footer += '┛'
|
|
2059
|
+
divider = '┣'
|
|
2060
|
+
(max + 12).times { divider += '━' }
|
|
2061
|
+
divider += '┫'
|
|
2062
|
+
output = output.empty? ? '' : "\n#{header}\n#{output.join("\n")}"
|
|
2063
|
+
d, h, m = format_time(total, human: true)
|
|
2064
|
+
output += "\n#{divider}"
|
|
2065
|
+
spacer = ''
|
|
2066
|
+
(max - 6).times do
|
|
2067
|
+
spacer += ' '
|
|
2068
|
+
end
|
|
2069
|
+
total = "┃ #{spacer}total: "
|
|
2070
|
+
total += format('%<h> 4dh %<m>02dm', h: h, m: m)
|
|
2071
|
+
total += ' ┃'
|
|
2072
|
+
output += "\n#{total}"
|
|
2073
|
+
output += "\n#{footer}"
|
|
2074
|
+
output
|
|
2041
2075
|
else
|
|
2042
2076
|
output = []
|
|
2043
2077
|
sorted_tags_data.reverse.each do |k, v|
|
|
@@ -2045,12 +2079,12 @@ EOS
|
|
|
2045
2079
|
(max - k.length).times do
|
|
2046
2080
|
spacer += ' '
|
|
2047
2081
|
end
|
|
2048
|
-
d, h, m =
|
|
2082
|
+
d, h, m = format_time(v)
|
|
2049
2083
|
output.push("#{k}:#{spacer}#{format('%<d>02d:%<h>02d:%<m>02d', d: d, h: h, m: m)}")
|
|
2050
2084
|
end
|
|
2051
2085
|
|
|
2052
2086
|
output = output.empty? ? '' : "\n--- Tag Totals ---\n#{output.join("\n")}"
|
|
2053
|
-
d, h, m =
|
|
2087
|
+
d, h, m = format_time(total)
|
|
2054
2088
|
output += "\n\nTotal tracked: #{format('%<d>02d:%<h>02d:%<m>02d', d: d, h: h, m: m)}\n"
|
|
2055
2089
|
output
|
|
2056
2090
|
end
|
|
@@ -2076,7 +2110,7 @@ EOS
|
|
|
2076
2110
|
record_tag_times(item, seconds) if record
|
|
2077
2111
|
return seconds.positive? ? seconds : false unless formatted
|
|
2078
2112
|
|
|
2079
|
-
return seconds.positive? ? format('%02d:%02d:%02d', *
|
|
2113
|
+
return seconds.positive? ? format('%02d:%02d:%02d', *format_time(seconds)) : false
|
|
2080
2114
|
end
|
|
2081
2115
|
|
|
2082
2116
|
false
|
|
@@ -2106,7 +2140,7 @@ EOS
|
|
|
2106
2140
|
##
|
|
2107
2141
|
## @param seconds The seconds
|
|
2108
2142
|
##
|
|
2109
|
-
def
|
|
2143
|
+
def format_time(seconds, human: false)
|
|
2110
2144
|
return [0, 0, 0] if seconds.nil?
|
|
2111
2145
|
|
|
2112
2146
|
if seconds.class == String && seconds =~ /(\d+):(\d+):(\d+)/
|
|
@@ -2117,10 +2151,15 @@ EOS
|
|
|
2117
2151
|
end
|
|
2118
2152
|
minutes = (seconds / 60).to_i
|
|
2119
2153
|
hours = (minutes / 60).to_i
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2154
|
+
if human
|
|
2155
|
+
minutes = (minutes % 60).to_i
|
|
2156
|
+
[0, hours, minutes]
|
|
2157
|
+
else
|
|
2158
|
+
days = (hours / 24).to_i
|
|
2159
|
+
hours = (hours % 24).to_i
|
|
2160
|
+
minutes = (minutes % 60).to_i
|
|
2161
|
+
[days, hours, minutes]
|
|
2162
|
+
end
|
|
2124
2163
|
end
|
|
2125
2164
|
|
|
2126
2165
|
private
|
|
@@ -149,7 +149,7 @@ module Doing
|
|
|
149
149
|
finished_at = i.end_date
|
|
150
150
|
took += finished_at.strftime('%A %B %e at %I:%M%p')
|
|
151
151
|
|
|
152
|
-
d, h, m = wwid.
|
|
152
|
+
d, h, m = wwid.format_time(interval)
|
|
153
153
|
took += ' and it took'
|
|
154
154
|
took += " #{d.to_i} days" if d.to_i.positive?
|
|
155
155
|
took += " #{h.to_i} hours" if h.to_i.positive?
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: doing
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.5.pre
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brett Terpstra
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-11-
|
|
11
|
+
date: 2021-11-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: safe_yaml
|