doing 1.0.86 → 1.0.87
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/README.md +1 -1
- data/bin/doing +91 -14
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +39 -7
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2540726a17efa50ef0cddc29353d8c14a4d921a89fb302711225053faacfbc4d
|
4
|
+
data.tar.gz: e4f59cf1e2feda50df653bbbd981e1ab4ad75d807eaf47a8afbad9d98032d27b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dabcbefd24a3d099d71eb14c03f71250067e509b385d573405219d3cfaea8a66f6ec526a32547401f249f0fdd82774415ed0da1c95e233aada2f54135de49558
|
7
|
+
data.tar.gz: 5b5a5d7800110de9aeaf636b6b6b4947c1923e55ce4f455d2316483c37fcfb30461b818df78c24097ef66f574ed57bdeebf50f77e4f806161212c4d36c86eabd
|
data/README.md
CHANGED
@@ -27,7 +27,7 @@ If there's something I want to look at later but doesn't need to be added to a t
|
|
27
27
|
|
28
28
|
## Installation
|
29
29
|
|
30
|
-
The current version of `doing` is <!--VER-->1.0.
|
30
|
+
The current version of `doing` is <!--VER-->1.0.86<!--END VER-->.
|
31
31
|
|
32
32
|
$ [sudo] gem install doing
|
33
33
|
|
data/bin/doing
CHANGED
@@ -896,10 +896,22 @@ command :show do |c|
|
|
896
896
|
c.arg_name 'MAX'
|
897
897
|
c.flag %i[c count], default_value: 0
|
898
898
|
|
899
|
-
c.desc 'Age (oldest
|
899
|
+
c.desc 'Age (oldest|newest)'
|
900
900
|
c.arg_name 'AGE'
|
901
901
|
c.flag %i[a age], default_value: 'newest'
|
902
902
|
|
903
|
+
c.desc 'View entries older than date'
|
904
|
+
c.arg_name 'DATE_STRING'
|
905
|
+
c.flag [:before]
|
906
|
+
|
907
|
+
c.desc 'View entries newer than date'
|
908
|
+
c.arg_name 'DATE_STRING'
|
909
|
+
c.flag [:after]
|
910
|
+
|
911
|
+
c.desc 'Search filter, surround with slashes for regex (/query/)'
|
912
|
+
c.arg_name 'QUERY'
|
913
|
+
c.flag [:search]
|
914
|
+
|
903
915
|
c.desc 'Sort order (asc/desc)'
|
904
916
|
c.arg_name 'ORDER'
|
905
917
|
c.flag %i[s sort], must_match: /^[ad].*/i, default_value: 'ASC'
|
@@ -924,6 +936,10 @@ command :show do |c|
|
|
924
936
|
c.arg_name 'KEY'
|
925
937
|
c.flag [:tag_sort], must_match: /^(?:name|time)/i, default_value: default
|
926
938
|
|
939
|
+
c.desc 'Tag sort direction (asc|desc)'
|
940
|
+
c.arg_name 'DIRECTION'
|
941
|
+
c.flag [:tag_order], must_match: /^(?:a(?:sc)?|d(?:esc)?)$/i
|
942
|
+
|
927
943
|
c.desc 'Only show items with recorded time intervals'
|
928
944
|
c.switch [:only_timed], default_value: false, negatable: false
|
929
945
|
|
@@ -979,8 +995,8 @@ command :show do |c|
|
|
979
995
|
}
|
980
996
|
end
|
981
997
|
|
982
|
-
if options[:
|
983
|
-
date_string = options[:
|
998
|
+
if options[:from]
|
999
|
+
date_string = options[:from]
|
984
1000
|
if date_string =~ / (to|through|thru|(un)?til|-+) /
|
985
1001
|
dates = date_string.split(/ (to|through|thru|(un)?til|-+) /)
|
986
1002
|
start = wwid.chronify(dates[0])
|
@@ -993,22 +1009,31 @@ command :show do |c|
|
|
993
1009
|
dates = [start, finish]
|
994
1010
|
end
|
995
1011
|
|
996
|
-
options[:
|
1012
|
+
options[:times] = true if options[:totals]
|
997
1013
|
|
998
1014
|
tags_color = wwid.config.key?('tags_color') ? wwid.config['tags_color'] : nil
|
999
1015
|
|
1000
1016
|
options[:sort_tags] = options[:tag_sort] =~ /^n/i
|
1017
|
+
tag_order = if options[:tag_order]
|
1018
|
+
options[:tag_order] =~ /^d/i ? 'desc' : 'asc'
|
1019
|
+
else
|
1020
|
+
'asc'
|
1021
|
+
end
|
1001
1022
|
opts = {
|
1002
|
-
|
1023
|
+
after: options[:after],
|
1024
|
+
age: options[:age],
|
1025
|
+
before: options[:before],
|
1003
1026
|
count: options[:c].to_i,
|
1004
1027
|
date_filter: dates,
|
1005
1028
|
highlight: true,
|
1006
1029
|
only_timed: options[:only_timed],
|
1007
1030
|
order: options[:s],
|
1008
1031
|
output: options[:output],
|
1032
|
+
search: options[:search],
|
1009
1033
|
section: section,
|
1010
1034
|
sort_tags: options[:sort_tags],
|
1011
1035
|
tag_filter: tag_filter,
|
1036
|
+
tag_order: tag_order,
|
1012
1037
|
tags_color: tags_color,
|
1013
1038
|
times: options[:t],
|
1014
1039
|
totals: options[:totals]
|
@@ -1030,6 +1055,14 @@ command [:grep, :search] do |c|
|
|
1030
1055
|
c.arg_name 'NAME'
|
1031
1056
|
c.flag %i[s section], default_value: 'All'
|
1032
1057
|
|
1058
|
+
c.desc 'Constrain search to entries older than date'
|
1059
|
+
c.arg_name 'DATE_STRING'
|
1060
|
+
c.flag [:before]
|
1061
|
+
|
1062
|
+
c.desc 'Constrain search to entries newer than date'
|
1063
|
+
c.arg_name 'DATE_STRING'
|
1064
|
+
c.flag [:after]
|
1065
|
+
|
1033
1066
|
c.desc 'Output to export format (csv|html|json|template|timeline)'
|
1034
1067
|
c.arg_name 'FORMAT'
|
1035
1068
|
c.flag %i[o output], must_match: /^(?:template|html|csv|json|timeline)$/i
|
@@ -1054,10 +1087,12 @@ command [:grep, :search] do |c|
|
|
1054
1087
|
|
1055
1088
|
section = wwid.guess_section(options[:s]) if options[:s]
|
1056
1089
|
|
1057
|
-
options[:
|
1090
|
+
options[:times] = true if options[:totals]
|
1058
1091
|
options[:sort_tags] = options[:tag_sort] =~ /^n/i
|
1059
1092
|
|
1060
1093
|
opts = {
|
1094
|
+
after: options[:after],
|
1095
|
+
before: options[:before],
|
1061
1096
|
highlight: true,
|
1062
1097
|
only_timed: options[:only_timed],
|
1063
1098
|
output: options[:output],
|
@@ -1065,7 +1100,7 @@ command [:grep, :search] do |c|
|
|
1065
1100
|
section: section,
|
1066
1101
|
sort_tags: options[:sort_tags],
|
1067
1102
|
tags_color: tags_color,
|
1068
|
-
times: options[:
|
1103
|
+
times: options[:times],
|
1069
1104
|
totals: options[:totals]
|
1070
1105
|
}
|
1071
1106
|
|
@@ -1142,12 +1177,25 @@ command :today do |c|
|
|
1142
1177
|
c.arg_name 'FORMAT'
|
1143
1178
|
c.flag %i[o output], must_match: /^(?:template|html|csv|json|timeline)$/i
|
1144
1179
|
|
1180
|
+
c.desc 'View entries before specified time (e.g. 8am, 12:30pm, 15:00)'
|
1181
|
+
c.arg_name 'TIME_STRING'
|
1182
|
+
c.flag [:before]
|
1183
|
+
|
1184
|
+
c.desc 'View entries after specified time (e.g. 8am, 12:30pm, 15:00)'
|
1185
|
+
c.arg_name 'TIME_STRING'
|
1186
|
+
c.flag [:after]
|
1187
|
+
|
1145
1188
|
c.action do |_global_options, options, _args|
|
1146
1189
|
options[:t] = true if options[:totals]
|
1147
1190
|
options[:sort_tags] = options[:tag_sort] =~ /^n/i
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1191
|
+
opt = {
|
1192
|
+
after: options[:after],
|
1193
|
+
before: options[:before],
|
1194
|
+
section: options[:section],
|
1195
|
+
sort_tags: options[:sort_tags],
|
1196
|
+
totals: options[:totals]
|
1197
|
+
}
|
1198
|
+
puts wwid.today(options[:times], options[:output], opt).chomp
|
1151
1199
|
end
|
1152
1200
|
end
|
1153
1201
|
|
@@ -1381,7 +1429,7 @@ command :colors do |c|
|
|
1381
1429
|
end
|
1382
1430
|
|
1383
1431
|
desc 'Display a user-created view'
|
1384
|
-
long_desc 'Command line options override
|
1432
|
+
long_desc 'Command line options override view configuration'
|
1385
1433
|
arg_name 'VIEW_NAME'
|
1386
1434
|
command :view do |c|
|
1387
1435
|
c.desc 'Section'
|
@@ -1405,6 +1453,18 @@ command :view do |c|
|
|
1405
1453
|
c.desc 'Include colors in output'
|
1406
1454
|
c.switch [:color], default_value: true, negatable: true
|
1407
1455
|
|
1456
|
+
c.desc 'Tag filter, combine multiple tags with a comma.'
|
1457
|
+
c.arg_name 'TAG'
|
1458
|
+
c.flag [:tag]
|
1459
|
+
|
1460
|
+
c.desc 'Tag boolean (AND,OR,NOT)'
|
1461
|
+
c.arg_name 'BOOLEAN'
|
1462
|
+
c.flag %i[b bool], must_match: /(?:and|all|any|or|not|none)/i, default_value: 'OR'
|
1463
|
+
|
1464
|
+
c.desc 'Search filter, surround with slashes for regex (/query/)'
|
1465
|
+
c.arg_name 'QUERY'
|
1466
|
+
c.flag [:search]
|
1467
|
+
|
1408
1468
|
c.desc 'Sort tags by (name|time)'
|
1409
1469
|
c.arg_name 'KEY'
|
1410
1470
|
c.flag [:tag_sort], must_match: /^(?:name|time)$/i
|
@@ -1413,10 +1473,20 @@ command :view do |c|
|
|
1413
1473
|
c.arg_name 'DIRECTION'
|
1414
1474
|
c.flag [:tag_order], must_match: /^(?:a(?:sc)?|d(?:esc)?)$/i
|
1415
1475
|
|
1476
|
+
c.desc 'View entries older than date'
|
1477
|
+
c.arg_name 'DATE_STRING'
|
1478
|
+
c.flag [:before]
|
1479
|
+
|
1480
|
+
c.desc 'View entries newer than date'
|
1481
|
+
c.arg_name 'DATE_STRING'
|
1482
|
+
c.flag [:after]
|
1483
|
+
|
1416
1484
|
c.desc 'Only show items with recorded time intervals (override view settings)'
|
1417
1485
|
c.switch [:only_timed], default_value: false, negatable: false
|
1418
1486
|
|
1419
1487
|
c.action do |_global_options, options, args|
|
1488
|
+
exit_now! '--tag and --search cannot be used together' if options[:tag] && options[:search]
|
1489
|
+
|
1420
1490
|
title = if args.empty?
|
1421
1491
|
wwid.choose_view
|
1422
1492
|
else
|
@@ -1441,7 +1511,11 @@ command :view do |c|
|
|
1441
1511
|
format = view.key?('date_format') ? view['date_format'] : nil
|
1442
1512
|
tags_color = view.key?('tags_color') ? view['tags_color'] : nil
|
1443
1513
|
tag_filter = false
|
1444
|
-
if
|
1514
|
+
if options[:tag]
|
1515
|
+
tag_filter = { 'tags' => [], 'bool' => 'OR' }
|
1516
|
+
tag_filter['tags'] = options[:tag].gsub(/[, ]+/, ' ').split(' ').map(&:strip)
|
1517
|
+
tag_filter['bool'] = options[:bool].normalize_bool
|
1518
|
+
elsif view.key?('tags') && !(view['tags'].nil? || view['tags'].empty?)
|
1445
1519
|
tag_filter = { 'tags' => [], 'bool' => 'OR' }
|
1446
1520
|
tag_filter['tags'] = if view['tags'].instance_of?(Array)
|
1447
1521
|
view['tags'].map(&:strip)
|
@@ -1490,14 +1564,17 @@ command :view do |c|
|
|
1490
1564
|
else
|
1491
1565
|
'asc'
|
1492
1566
|
end
|
1493
|
-
|
1567
|
+
|
1494
1568
|
opts = {
|
1569
|
+
after: options[:after],
|
1570
|
+
before: options[:before],
|
1495
1571
|
count: count,
|
1496
1572
|
format: format,
|
1497
1573
|
highlight: options[:color],
|
1498
1574
|
only_timed: only_timed,
|
1499
1575
|
order: order,
|
1500
|
-
output: options[:
|
1576
|
+
output: options[:output],
|
1577
|
+
search: options[:search],
|
1501
1578
|
section: section,
|
1502
1579
|
sort_tags: options[:sort_tags],
|
1503
1580
|
tag_filter: tag_filter,
|
data/lib/doing/version.rb
CHANGED
data/lib/doing/wwid.rb
CHANGED
@@ -1742,6 +1742,24 @@ class WWID
|
|
1742
1742
|
end
|
1743
1743
|
end
|
1744
1744
|
|
1745
|
+
if opt[:before]
|
1746
|
+
time_string = opt[:before]
|
1747
|
+
time_string += ' 12am' if time_string !~ /(\d+:\d+|\d+[ap])/
|
1748
|
+
cutoff = chronify(time_string)
|
1749
|
+
if cutoff
|
1750
|
+
items.delete_if { |item| item['date'] >= cutoff }
|
1751
|
+
end
|
1752
|
+
end
|
1753
|
+
|
1754
|
+
if opt[:after]
|
1755
|
+
time_string = opt[:after]
|
1756
|
+
time_string += ' 11:59pm' if time_string !~ /(\d+:\d+|\d+[ap])/
|
1757
|
+
cutoff = chronify(time_string)
|
1758
|
+
if cutoff
|
1759
|
+
items.delete_if { |item| item['date'] <= cutoff }
|
1760
|
+
end
|
1761
|
+
end
|
1762
|
+
|
1745
1763
|
if opt[:today]
|
1746
1764
|
items.delete_if do |item|
|
1747
1765
|
item['date'] < Date.today.to_time
|
@@ -1969,13 +1987,13 @@ class WWID
|
|
1969
1987
|
|
1970
1988
|
output.sub!(/%shortdate/) do
|
1971
1989
|
if item['date'] > Date.today.to_time
|
1972
|
-
item['date'].strftime('%_I:%M%P')
|
1973
|
-
elsif item['date'] > (Date.today -
|
1974
|
-
item['date'].strftime('%a
|
1990
|
+
item['date'].strftime(' %_I:%M%P')
|
1991
|
+
elsif item['date'] > (Date.today - 6).to_time
|
1992
|
+
item['date'].strftime('%a %_I:%M%P')
|
1975
1993
|
elsif item['date'].year == Date.today.year
|
1976
|
-
item['date'].strftime('%
|
1994
|
+
item['date'].strftime('%m/%d %_I:%M%P')
|
1977
1995
|
else
|
1978
|
-
item['date'].strftime('%
|
1996
|
+
item['date'].strftime('%m/%d/%Y %_I:%M%P')
|
1979
1997
|
end
|
1980
1998
|
end
|
1981
1999
|
|
@@ -2189,8 +2207,22 @@ class WWID
|
|
2189
2207
|
opt[:sort_tags] ||= false
|
2190
2208
|
|
2191
2209
|
cfg = @config['templates']['today']
|
2192
|
-
|
2193
|
-
|
2210
|
+
options = {
|
2211
|
+
after: opt[:after],
|
2212
|
+
before: opt[:before],
|
2213
|
+
count: 0,
|
2214
|
+
format: cfg['date_format'],
|
2215
|
+
order: 'asc',
|
2216
|
+
output: output,
|
2217
|
+
section: opt[:section],
|
2218
|
+
sort_tags: opt[:sort_tags],
|
2219
|
+
template: cfg['template'],
|
2220
|
+
times: times,
|
2221
|
+
today: true,
|
2222
|
+
totals: opt[:totals],
|
2223
|
+
wrap_width: cfg['wrap_width']
|
2224
|
+
}
|
2225
|
+
list_section(options)
|
2194
2226
|
end
|
2195
2227
|
|
2196
2228
|
##
|