doing 2.1.24 → 2.1.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardoc/checksums +11 -10
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/CHANGELOG.md +17 -0
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/Rakefile +2 -1
- data/bin/doing +81 -37
- data/docs/doc/Array.html +70 -7
- data/docs/doc/BooleanTermParser/Clause.html +5 -5
- data/docs/doc/BooleanTermParser/Operator.html +4 -4
- data/docs/doc/BooleanTermParser/Query.html +8 -8
- data/docs/doc/BooleanTermParser/QueryParser.html +2 -2
- data/docs/doc/BooleanTermParser/QueryTransformer.html +2 -2
- data/docs/doc/BooleanTermParser.html +1 -1
- data/docs/doc/Doing/Color.html +4 -4
- data/docs/doc/Doing/Completion.html +2 -2
- data/docs/doc/Doing/Configuration.html +14 -16
- data/docs/doc/Doing/Errors/DoingNoTraceError.html +2 -2
- data/docs/doc/Doing/Errors/DoingRuntimeError.html +2 -2
- data/docs/doc/Doing/Errors/DoingStandardError.html +2 -2
- data/docs/doc/Doing/Errors/EmptyInput.html +2 -2
- data/docs/doc/Doing/Errors/NoResults.html +2 -2
- data/docs/doc/Doing/Errors/PluginException.html +3 -3
- data/docs/doc/Doing/Errors/UserCancelled.html +2 -2
- data/docs/doc/Doing/Errors/WrongCommand.html +2 -2
- data/docs/doc/Doing/Errors.html +1 -1
- data/docs/doc/Doing/Hooks.html +6 -6
- data/docs/doc/Doing/Item.html +50 -16
- data/docs/doc/Doing/Items.html +10 -10
- data/docs/doc/Doing/LogAdapter.html +24 -24
- data/docs/doc/Doing/Note.html +7 -7
- data/docs/doc/Doing/Pager.html +4 -4
- data/docs/doc/Doing/Plugins.html +7 -7
- data/docs/doc/Doing/Prompt.html +14 -14
- data/docs/doc/Doing/Section.html +6 -6
- data/docs/doc/Doing/TemplateString.html +8 -8
- data/docs/doc/Doing/Types.html +6 -1
- data/docs/doc/Doing/Util/Backup.html +10 -10
- data/docs/doc/Doing/Util.html +15 -15
- data/docs/doc/Doing/WWID.html +65 -53
- data/docs/doc/Doing.html +3 -3
- data/docs/doc/GLI/Commands/Help.html +3 -3
- data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +17 -17
- data/docs/doc/GLI/Commands.html +1 -1
- data/docs/doc/GLI.html +1 -1
- data/docs/doc/Hash.html +45 -11
- data/docs/doc/Numeric.html +5 -5
- data/docs/doc/PhraseParser/Operator.html +4 -4
- data/docs/doc/PhraseParser/PhraseClause.html +5 -5
- data/docs/doc/PhraseParser/Query.html +10 -10
- data/docs/doc/PhraseParser/QueryParser.html +2 -2
- data/docs/doc/PhraseParser/QueryTransformer.html +2 -2
- data/docs/doc/PhraseParser/TermClause.html +5 -5
- data/docs/doc/PhraseParser.html +1 -1
- data/docs/doc/Status.html +7 -7
- data/docs/doc/String.html +107 -44
- data/docs/doc/Symbol.html +8 -8
- data/docs/doc/Time.html +6 -6
- data/docs/doc/_index.html +41 -18
- data/docs/doc/class_list.html +1 -1
- data/docs/doc/file.README.html +2 -2
- data/docs/doc/index.html +2 -2
- data/docs/doc/method_list.html +369 -313
- data/docs/doc/top-level-namespace.html +2 -2
- data/doing.rdoc +19 -11
- data/example_plugin.rb +2 -2
- data/lib/completion/_doing.zsh +12 -12
- data/lib/completion/doing.bash +2 -2
- data/lib/completion/doing.fish +9 -8
- data/lib/doing/changelog/changes.rb +1 -1
- data/lib/doing/configuration.rb +4 -6
- data/lib/doing/good.rb +64 -0
- data/lib/doing/hash.rb +4 -0
- data/lib/doing/hooks.rb +3 -3
- data/lib/doing/item.rb +14 -10
- data/lib/doing/plugins/import/calendar_import.rb +1 -1
- data/lib/doing/plugins/import/doing_import.rb +1 -1
- data/lib/doing/plugins/import/timing_import.rb +1 -1
- data/lib/doing/string.rb +1 -1
- data/lib/doing/template_string.rb +2 -2
- data/lib/doing/types.rb +1 -0
- data/lib/doing/util.rb +10 -10
- data/lib/doing/version.rb +1 -1
- data/lib/doing/wwid.rb +40 -18
- data/lib/doing.rb +1 -0
- data/lib/helpers/threaded_tests.rb +35 -64
- data/lib/helpers/threaded_tests_string.rb +50 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1210e69ba2e32a9e2c91d5e98c203f062c6b439bb37be2e675a8078a2ca34927
|
4
|
+
data.tar.gz: 95b84f63985564c18f4c352fdeb1dfc3ae02b1f78417159d83d354d87ab8df51
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b3a4fae4e4b530809b4d580e258dbd1e7d9382bec476725af3e8c551188bb85c071859db50d7c4686ab8c5208332850276c40c0411592546e43718ec07c1d56
|
7
|
+
data.tar.gz: 9808b2d41cd54c0a7ce52c714cf8111ad3cc81bbd1332acad49979f0ab9785b817911eb3bf9ca889a90fbd5ec9960974234611ce05fe96f35eb8f83479510588
|
data/.yardoc/checksums
CHANGED
@@ -1,32 +1,33 @@
|
|
1
|
-
lib/doing/
|
2
|
-
lib/doing/
|
1
|
+
lib/doing/good.rb de4a18a87ac6d316037750944f91f0a3739adafc
|
2
|
+
lib/doing/hash.rb 321c27f54f332260c6adced7e451016b79574d38
|
3
|
+
lib/doing/item.rb 8aec1775784e73fd7181efca4482dac94d466619
|
3
4
|
lib/doing/note.rb bbadd9e34e6dc43a2af1110a5107f46c39d2547f
|
4
5
|
lib/doing/time.rb 60183c3c31532ffea1440c766de0f90042e0fd10
|
5
|
-
lib/doing/util.rb
|
6
|
-
lib/doing/wwid.rb
|
6
|
+
lib/doing/util.rb 183577d0d9dee966dcf65645b312b17b958e46d6
|
7
|
+
lib/doing/wwid.rb 1410410c6072cc330baedea27e30a371ec7d3136
|
7
8
|
lib/doing/array.rb b50c4604cb685dff87bc16bc20f21a5956b2b396
|
8
|
-
lib/doing/hooks.rb
|
9
|
+
lib/doing/hooks.rb 1b75ca731f9e8cb0b7a32785d6e496ee67a70d5c
|
9
10
|
lib/doing/items.rb 69c762d337d9dad2b780cd08cc1c8785310e23ba
|
10
11
|
lib/doing/pager.rb a5dc55e1163d1b8476617e924a3aee4f9bf8be00
|
11
|
-
lib/doing/types.rb
|
12
|
+
lib/doing/types.rb df05c1282d5f6b8efda68c6f289499683a5cc7d1
|
12
13
|
lib/doing/colors.rb b7239a69e10c5df9378a5843441af5b93c1872f8
|
13
14
|
lib/doing/errors.rb af07e482a5389924edc2337749c81cda501098f0
|
14
15
|
lib/doing/prompt.rb d241935b209e69a14c55a9c3a035f1751c576b4c
|
15
|
-
lib/doing/string.rb
|
16
|
+
lib/doing/string.rb 32fd00cfdfb01a664e194e70ffcad199cd217741
|
16
17
|
lib/doing/symbol.rb 309799458a1bc715c2707307c9a62ab26086275e
|
17
18
|
lib/doing/section.rb 206e119cf818f1e76798753e611180fe77bc299a
|
18
|
-
lib/doing/version.rb
|
19
|
+
lib/doing/version.rb 7ee8c2f346a5dc0402119b87bb46593f3e368254
|
19
20
|
lib/doing/changelog.rb f7d1bd424e63400ab0613ef3358e614fdf53e2b5
|
20
21
|
lib/doing/cli_status.rb dbedd454c4cbbd0fed9ef30120f6ec85d18b9356
|
21
22
|
lib/doing/completion.rb c658e7dc7898fb022a21b2bd77bedb958ca3b067
|
22
23
|
lib/doing/log_adapter.rb 62ee66981878bd7285ccf0dfeca90a3d6d2af985
|
23
24
|
lib/doing/util_backup.rb c13f71072581b1f0d2269853611ba09273261bf9
|
24
|
-
lib/doing/configuration.rb
|
25
|
+
lib/doing/configuration.rb 390e07a32720bd6db576bf6ad909529a9228de8d
|
25
26
|
lib/doing/phrase_parser.rb 8f1789d7cf8326d8cc231b4a21505a93f8de20d2
|
26
27
|
lib/doing/array_chronify.rb b39b40268b1751b18acf6bae4e53885818e45f62
|
27
28
|
lib/doing/plugin_manager.rb cb16a82c3182ef7008359670ab96ff6b39270ccc
|
28
29
|
lib/doing/string_chronify.rb 888afa2175f3bb6cac0d68e3cb0f27cf162bb1bf
|
29
|
-
lib/doing/template_string.rb
|
30
|
+
lib/doing/template_string.rb 3b35970f2a68112192d2bb97c1298b90cf717b3d
|
30
31
|
lib/doing/numeric_chronify.rb bedeff62a95f8a8ff116e1bf0cc1d9eb2707a900
|
31
32
|
lib/doing/help_monkey_patch.rb 6aa514c249e519db507ae528de2604c18cc36045
|
32
33
|
lib/doing/boolean_term_parser.rb 075977892ac5c6e3435cb8877d8b8b68eb1962e3
|
data/.yardoc/object_types
CHANGED
Binary file
|
data/.yardoc/objects/root.dat
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
### 2.1.25
|
2
|
+
|
3
|
+
2022-01-23 09:20
|
4
|
+
|
5
|
+
#### NEW
|
6
|
+
|
7
|
+
- `doing now --from 'TIME [to TIME]'` flag, sets start date and optionally adds dated @done tag.
|
8
|
+
|
9
|
+
#### IMPROVED
|
10
|
+
|
11
|
+
- :post_entry_updated hook now receives both the updated item (mutable) and a copy of the original item
|
12
|
+
|
13
|
+
#### FIXED
|
14
|
+
|
15
|
+
- Regex warning on Ruby 2.7
|
16
|
+
- :post_entry_added hook was receiving new items couldn't be modified
|
17
|
+
|
1
18
|
### 2.1.24
|
2
19
|
|
3
20
|
2022-01-22 17:27
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -8,7 +8,7 @@ _If you're one of the rare people like me who find this useful, feel free to
|
|
8
8
|
|
9
9
|
<!--README-->
|
10
10
|
|
11
|
-
The current version of `doing` is <!--VER-->2.1.
|
11
|
+
The current version of `doing` is <!--VER-->2.1.24<!--END VER-->.
|
12
12
|
|
13
13
|
Find all of the documentation in the [doing wiki][wiki].
|
14
14
|
|
data/Rakefile
CHANGED
@@ -77,10 +77,11 @@ task :dockertest, :version, :login do |_, args|
|
|
77
77
|
file = 'Dockerfile'
|
78
78
|
end
|
79
79
|
|
80
|
-
exec "docker run -it #{img} /bin/bash -l" if args[:login]
|
81
80
|
|
82
81
|
puts `docker build . --file #{file} -t #{img}`
|
83
82
|
|
83
|
+
exec "docker run -it #{img} /bin/bash -l" if args[:login]
|
84
|
+
|
84
85
|
spinner = TTY::Spinner.new('[:spinner] Running tests ...', hide_cursor: true)
|
85
86
|
|
86
87
|
spinner.auto_spin
|
data/bin/doing
CHANGED
@@ -69,7 +69,7 @@ end
|
|
69
69
|
|
70
70
|
accept TemplateName do |value|
|
71
71
|
res = settings['templates'].keys.select { |k| k =~ value.to_rx(distance: 2) }
|
72
|
-
raise InvalidArgument, "Unknown template: #{value}"
|
72
|
+
raise InvalidArgument, "Unknown template: #{value}" unless res.good?
|
73
73
|
|
74
74
|
res.group_by(&:length).min.last[0]
|
75
75
|
end
|
@@ -104,6 +104,13 @@ accept DateRangeString do |value|
|
|
104
104
|
[start, finish]
|
105
105
|
end
|
106
106
|
|
107
|
+
accept DateRangeOptionalString do |value|
|
108
|
+
start, finish = value.split_date_range
|
109
|
+
raise InvalidTimeExpression, 'Invalid range' unless start
|
110
|
+
|
111
|
+
[start, finish]
|
112
|
+
end
|
113
|
+
|
107
114
|
accept DateIntervalString do |value|
|
108
115
|
res = value.chronify_qty
|
109
116
|
raise InvalidTimeExpression, 'Invalid time quantity' unless res
|
@@ -253,7 +260,7 @@ command %i[again resume] do |c|
|
|
253
260
|
|
254
261
|
options[:note] = note
|
255
262
|
|
256
|
-
opts = options.
|
263
|
+
opts = options.clone
|
257
264
|
|
258
265
|
opts[:tag] = tags
|
259
266
|
opts[:tag_bool] = options[:bool].normalize_bool
|
@@ -504,7 +511,7 @@ command %i[done did] do |c|
|
|
504
511
|
raise NoResults, 'No results'
|
505
512
|
end
|
506
513
|
|
507
|
-
old_entry = last_entry.
|
514
|
+
old_entry = last_entry.clone
|
508
515
|
last_entry.note.add(note)
|
509
516
|
input = ["#{last_entry.date.strftime('%F %R | ')}#{last_entry.title}", last_entry.note.strip_lines.join("\n")].join("\n")
|
510
517
|
else
|
@@ -513,13 +520,13 @@ command %i[done did] do |c|
|
|
513
520
|
end
|
514
521
|
|
515
522
|
input = wwid.fork_editor(input).strip
|
516
|
-
raise EmptyInput, 'No content' unless input
|
523
|
+
raise EmptyInput, 'No content' unless input.good?
|
517
524
|
|
518
525
|
d, title, note = wwid.format_input(input)
|
519
526
|
|
520
527
|
if options[:ask]
|
521
528
|
ask_note = Doing::Prompt.read_lines(prompt: 'Add a note')
|
522
|
-
note.add(ask_note)
|
529
|
+
note.add(ask_note) if ask_note.good?
|
523
530
|
end
|
524
531
|
|
525
532
|
date = d.nil? ? date : d
|
@@ -535,15 +542,16 @@ command %i[done did] do |c|
|
|
535
542
|
if (is_new)
|
536
543
|
Doing::Hooks.trigger :pre_entry_add, wwid, new_entry
|
537
544
|
wwid.content.push(new_entry)
|
538
|
-
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
545
|
+
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
539
546
|
else
|
547
|
+
old = old_entry.clone
|
540
548
|
wwid.content.update_item(old_entry, new_entry)
|
541
|
-
Doing::Hooks.trigger :post_entry_updated, wwid, new_entry unless options[:archive]
|
549
|
+
Doing::Hooks.trigger :post_entry_updated, wwid, new_entry, old unless options[:archive]
|
542
550
|
end
|
543
551
|
|
544
552
|
if options[:archive]
|
545
553
|
wwid.move_item(new_entry, 'Archive', label: true)
|
546
|
-
Doing::Hooks.trigger :post_entry_updated, wwid, new_entry
|
554
|
+
Doing::Hooks.trigger :post_entry_updated, wwid, new_entry, old_entry
|
547
555
|
end
|
548
556
|
|
549
557
|
wwid.write(wwid.doing_file)
|
@@ -582,7 +590,7 @@ command %i[done did] do |c|
|
|
582
590
|
|
583
591
|
Doing::Hooks.trigger :pre_entry_add, wwid, new_entry
|
584
592
|
wwid.content.push(new_entry)
|
585
|
-
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
593
|
+
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
586
594
|
wwid.write(wwid.doing_file)
|
587
595
|
Doing.logger.info('New entry:', %(added "#{new_entry.date.relative_date}: #{new_entry.title}" to #{section}))
|
588
596
|
elsif $stdin.stat.size.positive?
|
@@ -606,7 +614,7 @@ command %i[done did] do |c|
|
|
606
614
|
|
607
615
|
Doing::Hooks.trigger :pre_entry_add, wwid, new_entry
|
608
616
|
wwid.content.push(new_entry)
|
609
|
-
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
617
|
+
Doing::Hooks.trigger :post_entry_added, wwid, new_entry
|
610
618
|
|
611
619
|
wwid.write(wwid.doing_file)
|
612
620
|
Doing.logger.info('New entry:', %(added "#{new_entry.date.relative_date}: #{new_entry.title}" to #{section}))
|
@@ -950,7 +958,7 @@ command :meanwhile do |c|
|
|
950
958
|
input += date.strftime('%F %R | ')
|
951
959
|
input += args.join(' ') unless args.empty?
|
952
960
|
input += "\n#{options[:note]}" if options[:note]
|
953
|
-
input += "\n#{ask_note}" unless ask_note.
|
961
|
+
input += "\n#{ask_note}" unless ask_note.good?
|
954
962
|
|
955
963
|
input = wwid.fork_editor(input).strip
|
956
964
|
elsif !args.empty?
|
@@ -959,7 +967,7 @@ command :meanwhile do |c|
|
|
959
967
|
input = $stdin.read.strip
|
960
968
|
end
|
961
969
|
|
962
|
-
if input
|
970
|
+
if input.good?
|
963
971
|
d, input, note = wwid.format_input(input)
|
964
972
|
unless d.nil?
|
965
973
|
Doing.logger.debug('Parser:', 'Date detected in input, overriding command line values')
|
@@ -972,7 +980,7 @@ command :meanwhile do |c|
|
|
972
980
|
|
973
981
|
unless options[:editor]
|
974
982
|
note.add(options[:note]) if options[:note]
|
975
|
-
note.add(ask_note)
|
983
|
+
note.add(ask_note) if ask_note.good?
|
976
984
|
end
|
977
985
|
|
978
986
|
wwid.stop_start('meanwhile', { new_item: input, back: date, section: section, archive: options[:archive], note: note })
|
@@ -1058,6 +1066,7 @@ command :note do |c|
|
|
1058
1066
|
end
|
1059
1067
|
|
1060
1068
|
last_entry = wwid.last_entry(options)
|
1069
|
+
old_entry = last_entry.clone
|
1061
1070
|
|
1062
1071
|
unless last_entry
|
1063
1072
|
Doing.logger.warn('Not found:', 'No entry matching parameters was found.')
|
@@ -1091,19 +1100,19 @@ command :note do |c|
|
|
1091
1100
|
end
|
1092
1101
|
|
1093
1102
|
if (new_note.empty? && !options[:remove]) || options[:ask]
|
1094
|
-
$stderr.puts last_note
|
1095
|
-
$stderr.puts new_note
|
1103
|
+
$stderr.puts last_note if last_note.good?
|
1104
|
+
$stderr.puts new_note if new_note.good?
|
1096
1105
|
new_note.add(Doing::Prompt.read_lines(prompt: 'Add a note'))
|
1097
1106
|
end
|
1098
1107
|
|
1099
|
-
raise EmptyInput, 'You must provide content when adding a note' unless options[:remove] ||
|
1108
|
+
raise EmptyInput, 'You must provide content when adding a note' unless options[:remove] || new_note.good?
|
1100
1109
|
|
1101
1110
|
if last_note.equal?(new_note)
|
1102
1111
|
Doing.logger.debug('Skipped:', 'No note change')
|
1103
1112
|
else
|
1104
1113
|
last_note.add(new_note, replace: options[:remove])
|
1105
1114
|
Doing.logger.info('Entry updated:', last_entry.title)
|
1106
|
-
Doing::Hooks.trigger :post_entry_updated, wwid, last_entry
|
1115
|
+
Doing::Hooks.trigger :post_entry_updated, wwid, last_entry, old_entry
|
1107
1116
|
end
|
1108
1117
|
# new_entry = Doing::Item.new(last_entry.date, last_entry.title, last_entry.section, new_note)
|
1109
1118
|
wwid.write(wwid.doing_file)
|
@@ -1139,6 +1148,13 @@ command %i[now next] do |c|
|
|
1139
1148
|
c.arg_name 'DATE_STRING'
|
1140
1149
|
c.flag %i[b back started], type: DateBeginString
|
1141
1150
|
|
1151
|
+
c.desc %(
|
1152
|
+
Set a start and optionally end time as a date range ("from 1pm to 2:30pm").
|
1153
|
+
If an end time is provided, a dated @done tag will be added
|
1154
|
+
)
|
1155
|
+
c.arg_name 'TIME_RANGE'
|
1156
|
+
c.flag [:from], type: DateRangeString
|
1157
|
+
|
1142
1158
|
c.desc 'Timed entry, marks last entry in section as @done'
|
1143
1159
|
c.switch %i[f finish_last], negatable: false, default_value: false
|
1144
1160
|
|
@@ -1154,13 +1170,17 @@ command %i[now next] do |c|
|
|
1154
1170
|
# # c.flag [:a, :app]
|
1155
1171
|
|
1156
1172
|
c.action do |_global_options, options, args|
|
1173
|
+
raise InvalidArgument, "--back and --from cannot be used together" if options[:back] && options[:from]
|
1174
|
+
|
1157
1175
|
if options[:back]
|
1158
1176
|
date = options[:back]
|
1159
|
-
|
1160
|
-
|
1177
|
+
elsif options[:from]
|
1178
|
+
date, finish_date = options[:from]
|
1179
|
+
options[:done] = finish_date
|
1161
1180
|
else
|
1162
1181
|
date = Time.now
|
1163
1182
|
end
|
1183
|
+
raise InvalidTimeExpression.new('unable to parse date string', topic: 'Parser:') if date.nil?
|
1164
1184
|
|
1165
1185
|
if options[:section]
|
1166
1186
|
section = wwid.guess_section(options[:section]) || options[:section].cap_first
|
@@ -1175,16 +1195,17 @@ command %i[now next] do |c|
|
|
1175
1195
|
|
1176
1196
|
input = date.strftime('%F %R | ')
|
1177
1197
|
input += args.join(' ') unless args.empty?
|
1198
|
+
input += " @done(#{options[:done].strftime('%F %R')})" if options[:done]
|
1178
1199
|
input += "\n#{options[:note]}" if options[:note]
|
1179
|
-
input += "\n#{ask_note}"
|
1200
|
+
input += "\n#{ask_note}" if ask_note.good?
|
1180
1201
|
input = wwid.fork_editor(input).strip
|
1181
1202
|
|
1182
1203
|
d, title, note = wwid.format_input(input)
|
1183
|
-
raise EmptyInput, 'No content'
|
1204
|
+
raise EmptyInput, 'No content' unless title.good?
|
1184
1205
|
|
1185
1206
|
if ask_note.empty? && options[:ask]
|
1186
1207
|
ask_note = Doing::Prompt.read_lines(prompt: 'Add a note')
|
1187
|
-
note.add(ask_note)
|
1208
|
+
note.add(ask_note) if ask_note.good?
|
1188
1209
|
end
|
1189
1210
|
|
1190
1211
|
date = d.nil? ? date : d
|
@@ -1194,8 +1215,15 @@ command %i[now next] do |c|
|
|
1194
1215
|
d, title, note = wwid.format_input(args.join(' '))
|
1195
1216
|
date = d.nil? ? date : d
|
1196
1217
|
note.add(options[:note]) if options[:note]
|
1197
|
-
note.add(ask_note)
|
1198
|
-
wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1218
|
+
note.add(ask_note) if ask_note.good?
|
1219
|
+
entry = wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1220
|
+
if options[:done] && entry.should_finish?
|
1221
|
+
if entry.should_time?
|
1222
|
+
entry.tag('done', value: options[:done])
|
1223
|
+
else
|
1224
|
+
entry.tag('done')
|
1225
|
+
end
|
1226
|
+
end
|
1199
1227
|
wwid.write(wwid.doing_file)
|
1200
1228
|
elsif $stdin.stat.size.positive?
|
1201
1229
|
input = $stdin.read.strip
|
@@ -1207,15 +1235,22 @@ command %i[now next] do |c|
|
|
1207
1235
|
note.add(options[:note]) if options[:note]
|
1208
1236
|
if ask_note.empty? && options[:ask]
|
1209
1237
|
ask_note = Doing::Prompt.read_lines(prompt: 'Add a note')
|
1210
|
-
note.add(ask_note)
|
1238
|
+
note.add(ask_note) if ask_note.good?
|
1239
|
+
end
|
1240
|
+
entry = wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1241
|
+
if options[:done] && entry.should_finish?
|
1242
|
+
if entry.should_time?
|
1243
|
+
entry.tag('done', value: options[:done])
|
1244
|
+
else
|
1245
|
+
entry.tag('done')
|
1246
|
+
end
|
1211
1247
|
end
|
1212
|
-
wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1213
1248
|
wwid.write(wwid.doing_file)
|
1214
1249
|
else
|
1215
1250
|
tags = wwid.all_tags(wwid.content)
|
1216
1251
|
$stderr.puts Doing::Color.boldgreen("Add a new entry. Tab will autocomplete known tags. Ctrl-c to cancel.")
|
1217
1252
|
title = Doing::Prompt.read_line(prompt: 'Entry content', completions: tags)
|
1218
|
-
raise EmptyInput, 'You must provide content when creating a new entry'
|
1253
|
+
raise EmptyInput, 'You must provide content when creating a new entry' unless title.good?
|
1219
1254
|
|
1220
1255
|
note = Doing::Note.new
|
1221
1256
|
note.add(options[:note]) if options[:note]
|
@@ -1223,7 +1258,14 @@ command %i[now next] do |c|
|
|
1223
1258
|
ask_note = res ? Doing::Prompt.read_lines(prompt: 'Enter note') : []
|
1224
1259
|
note.add(ask_note)
|
1225
1260
|
|
1226
|
-
wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1261
|
+
entry = wwid.add_item(title.cap_first, section, { note: note, back: date, timed: options[:finish_last] })
|
1262
|
+
if options[:done] && entry.should_finish?
|
1263
|
+
if entry.should_time?
|
1264
|
+
entry.tag('done', value: options[:done])
|
1265
|
+
else
|
1266
|
+
entry.tag('done')
|
1267
|
+
end
|
1268
|
+
end
|
1227
1269
|
wwid.write(wwid.doing_file)
|
1228
1270
|
end
|
1229
1271
|
end
|
@@ -1326,8 +1368,10 @@ command %i[reset begin] do |c|
|
|
1326
1368
|
return
|
1327
1369
|
end
|
1328
1370
|
|
1371
|
+
old_item = last_entry.clone
|
1372
|
+
|
1329
1373
|
wwid.reset_item(last_entry, date: reset_date, resume: options[:resume])
|
1330
|
-
Doing::Hooks.trigger :post_entry_updated, wwid, last_entry
|
1374
|
+
Doing::Hooks.trigger :post_entry_updated, wwid, last_entry, old_item
|
1331
1375
|
# new_entry = Doing::Item.new(last_entry.date, last_entry.title, last_entry.section, new_note)
|
1332
1376
|
|
1333
1377
|
wwid.write(wwid.doing_file)
|
@@ -2156,7 +2200,7 @@ command :show do |c|
|
|
2156
2200
|
|
2157
2201
|
options[:section] = section
|
2158
2202
|
|
2159
|
-
|
2203
|
+
if tags.good?
|
2160
2204
|
tag_filter = {
|
2161
2205
|
'tags' => tags,
|
2162
2206
|
'bool' => options[:bool].normalize_bool
|
@@ -2175,7 +2219,7 @@ command :show do |c|
|
|
2175
2219
|
# options[:bool] = :and unless tags.empty?
|
2176
2220
|
|
2177
2221
|
tags = tag.split(/ +/).map { |t| t.strip.sub(/^@?/, '') } if tag =~ /^@/
|
2178
|
-
|
2222
|
+
if tags.good?
|
2179
2223
|
tag_filter = {
|
2180
2224
|
'tags' => tags,
|
2181
2225
|
'bool' => options[:bool].normalize_bool
|
@@ -2186,7 +2230,7 @@ command :show do |c|
|
|
2186
2230
|
|
2187
2231
|
options[:age] ||= :newest
|
2188
2232
|
|
2189
|
-
opt = options.
|
2233
|
+
opt = options.clone
|
2190
2234
|
opt[:age] = options[:age].normalize_age(:newest) if options[:age]
|
2191
2235
|
opt[:sort_tags] = options[:tag_sort] =~ /^n/i
|
2192
2236
|
opt[:count] = options[:count].to_i
|
@@ -2645,7 +2689,7 @@ command :view do |c|
|
|
2645
2689
|
else
|
2646
2690
|
options[:tag].gsub(/[, ]+/, ' ').split(' ').map(&:strip)
|
2647
2691
|
end
|
2648
|
-
elsif view.key?('tags') &&
|
2692
|
+
elsif view.key?('tags') && view['tags'].good?
|
2649
2693
|
tag_filter = { 'tags' => [], 'bool' => 'OR' }
|
2650
2694
|
bool = view.key?('tags_bool') && !view['tags_bool'].nil? ? view['tags_bool'].normalize_bool : :pattern
|
2651
2695
|
tag_filter['bool'] = bool
|
@@ -2703,7 +2747,7 @@ command :view do |c|
|
|
2703
2747
|
|
2704
2748
|
options[:age] ||= :newest
|
2705
2749
|
|
2706
|
-
opts = options.
|
2750
|
+
opts = options.clone
|
2707
2751
|
opts[:age] = options[:age].normalize_age(:newest)
|
2708
2752
|
opts[:count] = count
|
2709
2753
|
opts[:format] = date_format
|
@@ -2798,7 +2842,7 @@ command :yesterday do |c|
|
|
2798
2842
|
end.join(' to ').split_date_range
|
2799
2843
|
end
|
2800
2844
|
|
2801
|
-
opt = options.
|
2845
|
+
opt = options.clone
|
2802
2846
|
opt[:tag_order] = options[:tag_order].normalize_order
|
2803
2847
|
opt[:order] = settings.dig('templates', options[:config_template], 'order')
|
2804
2848
|
|
@@ -3090,7 +3134,7 @@ command :open do |c|
|
|
3090
3134
|
end
|
3091
3135
|
|
3092
3136
|
c.action do |_global_options, options, _args|
|
3093
|
-
params = options.
|
3137
|
+
params = options.clone
|
3094
3138
|
params.delete_if do |k, v|
|
3095
3139
|
k.instance_of?(String) || v.nil? || v == false
|
3096
3140
|
end
|
@@ -3242,7 +3286,7 @@ command %i[archive move] do |c|
|
|
3242
3286
|
search.sub!(/^'?/, "'") if options[:exact]
|
3243
3287
|
end
|
3244
3288
|
|
3245
|
-
opts = options.
|
3289
|
+
opts = options.clone
|
3246
3290
|
opts[:search] = search
|
3247
3291
|
opts[:bool] = options[:bool].normalize_bool
|
3248
3292
|
opts[:destination] = options[:to]
|
data/docs/doc/Array.html
CHANGED
@@ -69,10 +69,10 @@
|
|
69
69
|
<dl>
|
70
70
|
<dt>Inherits:</dt>
|
71
71
|
<dd>
|
72
|
-
<span class="inheritName">Object</span>
|
72
|
+
<span class="inheritName"><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span>
|
73
73
|
|
74
74
|
<ul class="fullTree">
|
75
|
-
<li>Object</li>
|
75
|
+
<li><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></li>
|
76
76
|
|
77
77
|
<li class="next">Array</li>
|
78
78
|
|
@@ -95,7 +95,7 @@
|
|
95
95
|
<dl>
|
96
96
|
<dt>Defined in:</dt>
|
97
97
|
<dd>lib/doing/array.rb<span class="defines">,<br />
|
98
|
-
lib/doing/array_chronify.rb</span>
|
98
|
+
lib/doing/good.rb,<br /> lib/doing/array_chronify.rb</span>
|
99
99
|
</dd>
|
100
100
|
</dl>
|
101
101
|
|
@@ -133,6 +133,29 @@
|
|
133
133
|
<li class="public ">
|
134
134
|
<span class="summary_signature">
|
135
135
|
|
136
|
+
<a href="#good%3F-instance_method" title="#good? (instance method)">#<strong>good?</strong> ⇒ Boolean </a>
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
</span>
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
|
150
|
+
<span class="summary_desc"><div class='inline'><p>Tests if object is nil or empty.</p>
|
151
|
+
</div></span>
|
152
|
+
|
153
|
+
</li>
|
154
|
+
|
155
|
+
|
156
|
+
<li class="public ">
|
157
|
+
<span class="summary_signature">
|
158
|
+
|
136
159
|
<a href="#highlight_tags-instance_method" title="#highlight_tags (instance method)">#<strong>highlight_tags</strong>(color = 'cyan') ⇒ String </a>
|
137
160
|
|
138
161
|
|
@@ -300,7 +323,47 @@
|
|
300
323
|
|
301
324
|
|
302
325
|
<div class="method_details first">
|
303
|
-
<h3 class="signature first" id="
|
326
|
+
<h3 class="signature first" id="good?-instance_method">
|
327
|
+
|
328
|
+
#<strong>good?</strong> ⇒ <tt>Boolean</tt>
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
|
333
|
+
|
334
|
+
</h3><div class="docstring">
|
335
|
+
<div class="discussion">
|
336
|
+
<p>Tests if object is nil or empty</p>
|
337
|
+
|
338
|
+
|
339
|
+
</div>
|
340
|
+
</div>
|
341
|
+
<div class="tags">
|
342
|
+
|
343
|
+
<p class="tag_title">Returns:</p>
|
344
|
+
<ul class="return">
|
345
|
+
|
346
|
+
<li>
|
347
|
+
|
348
|
+
|
349
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
—
|
354
|
+
<div class='inline'><p>true if object is defined and
|
355
|
+
has content</p>
|
356
|
+
</div>
|
357
|
+
|
358
|
+
</li>
|
359
|
+
|
360
|
+
</ul>
|
361
|
+
|
362
|
+
</div>
|
363
|
+
</div>
|
364
|
+
|
365
|
+
<div class="method_details ">
|
366
|
+
<h3 class="signature " id="highlight_tags-instance_method">
|
304
367
|
|
305
368
|
#<strong>highlight_tags</strong>(color = 'cyan') ⇒ <tt><span class='object_link'><a href="String.html" title="String (class)">String</a></span></tt>
|
306
369
|
|
@@ -402,7 +465,7 @@ with</p>
|
|
402
465
|
<div class="method_details ">
|
403
466
|
<h3 class="signature " id="nested_hash-instance_method">
|
404
467
|
|
405
|
-
#<strong>nested_hash</strong>(value) ⇒ <tt>Object</tt>
|
468
|
+
#<strong>nested_hash</strong>(value) ⇒ <tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>
|
406
469
|
|
407
470
|
|
408
471
|
|
@@ -617,7 +680,7 @@ with</p>
|
|
617
680
|
<div class="method_details ">
|
618
681
|
<h3 class="signature " id="to_tags!-instance_method">
|
619
682
|
|
620
|
-
#<strong>to_tags!</strong> ⇒ <tt>Object</tt>
|
683
|
+
#<strong>to_tags!</strong> ⇒ <tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>
|
621
684
|
|
622
685
|
|
623
686
|
|
@@ -631,7 +694,7 @@ with</p>
|
|
631
694
|
</div>
|
632
695
|
|
633
696
|
<div id="footer">
|
634
|
-
Generated on
|
697
|
+
Generated on Sun Jan 23 09:24:05 2022 by
|
635
698
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
636
699
|
0.9.27 (ruby-3.0.1).
|
637
700
|
</div>
|
@@ -69,10 +69,10 @@
|
|
69
69
|
<dl>
|
70
70
|
<dt>Inherits:</dt>
|
71
71
|
<dd>
|
72
|
-
<span class="inheritName">Object</span>
|
72
|
+
<span class="inheritName"><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></span>
|
73
73
|
|
74
74
|
<ul class="fullTree">
|
75
|
-
<li>Object</li>
|
75
|
+
<li><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></li>
|
76
76
|
|
77
77
|
<li class="next">BooleanTermParser::Clause</li>
|
78
78
|
|
@@ -234,7 +234,7 @@
|
|
234
234
|
<div class="method_details first">
|
235
235
|
<h3 class="signature first" id="operator-instance_method">
|
236
236
|
|
237
|
-
#<strong>operator</strong> ⇒ <tt>Object</tt>
|
237
|
+
#<strong>operator</strong> ⇒ <tt><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></tt>
|
238
238
|
|
239
239
|
|
240
240
|
|
@@ -258,7 +258,7 @@
|
|
258
258
|
<div class="method_details ">
|
259
259
|
<h3 class="signature " id="term-instance_method">
|
260
260
|
|
261
|
-
#<strong>term</strong> ⇒ <tt>Object</tt>
|
261
|
+
#<strong>term</strong> ⇒ <tt><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></tt>
|
262
262
|
|
263
263
|
|
264
264
|
|
@@ -283,7 +283,7 @@
|
|
283
283
|
</div>
|
284
284
|
|
285
285
|
<div id="footer">
|
286
|
-
Generated on
|
286
|
+
Generated on Sun Jan 23 09:24:05 2022 by
|
287
287
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
288
288
|
0.9.27 (ruby-3.0.1).
|
289
289
|
</div>
|
@@ -69,10 +69,10 @@
|
|
69
69
|
<dl>
|
70
70
|
<dt>Inherits:</dt>
|
71
71
|
<dd>
|
72
|
-
<span class="inheritName">Object</span>
|
72
|
+
<span class="inheritName"><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></span>
|
73
73
|
|
74
74
|
<ul class="fullTree">
|
75
|
-
<li>Object</li>
|
75
|
+
<li><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></li>
|
76
76
|
|
77
77
|
<li class="next">BooleanTermParser::Operator</li>
|
78
78
|
|
@@ -148,7 +148,7 @@
|
|
148
148
|
<div class="method_details first">
|
149
149
|
<h3 class="signature first" id="symbol-class_method">
|
150
150
|
|
151
|
-
.<strong>symbol</strong>(str) ⇒ <tt>Object</tt>
|
151
|
+
.<strong>symbol</strong>(str) ⇒ <tt><span class='object_link'><a href="../Object.html" title="Object (class)">Object</a></span></tt>
|
152
152
|
|
153
153
|
|
154
154
|
|
@@ -162,7 +162,7 @@
|
|
162
162
|
</div>
|
163
163
|
|
164
164
|
<div id="footer">
|
165
|
-
Generated on
|
165
|
+
Generated on Sun Jan 23 09:24:05 2022 by
|
166
166
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
167
167
|
0.9.27 (ruby-3.0.1).
|
168
168
|
</div>
|