doing 2.1.93 → 2.1.94

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.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +1 -1
  5. data/bin/commands/budget.rb +85 -0
  6. data/bin/doing +1 -1
  7. data/docs/doc/Array.html +1 -1
  8. data/docs/doc/BooleanTermParser/Clause.html +1 -1
  9. data/docs/doc/BooleanTermParser/Operator.html +1 -1
  10. data/docs/doc/BooleanTermParser/Query.html +1 -1
  11. data/docs/doc/BooleanTermParser/QueryParser.html +1 -1
  12. data/docs/doc/BooleanTermParser/QueryTransformer.html +1 -1
  13. data/docs/doc/BooleanTermParser.html +1 -1
  14. data/docs/doc/Doing/ArrayCleanup.html +1 -1
  15. data/docs/doc/Doing/ArrayNestedHash.html +1 -1
  16. data/docs/doc/Doing/ArrayTags.html +1 -1
  17. data/docs/doc/Doing/ByDayExport.html +1 -1
  18. data/docs/doc/Doing/CSVExport.html +1 -1
  19. data/docs/doc/Doing/CalendarImport.html +1 -1
  20. data/docs/doc/Doing/Change.html +1 -1
  21. data/docs/doc/Doing/Changes.html +1 -1
  22. data/docs/doc/Doing/ChronifyArray.html +1 -1
  23. data/docs/doc/Doing/ChronifyNumeric.html +1 -1
  24. data/docs/doc/Doing/ChronifyString.html +1 -1
  25. data/docs/doc/Doing/Color.html +1 -1
  26. data/docs/doc/Doing/Completion/BashCompletions.html +1 -1
  27. data/docs/doc/Doing/Completion/FigCompletions.html +1 -1
  28. data/docs/doc/Doing/Completion/FishCompletions.html +1 -1
  29. data/docs/doc/Doing/Completion/StringUtils.html +1 -1
  30. data/docs/doc/Doing/Completion/ZshCompletions.html +1 -1
  31. data/docs/doc/Doing/Completion.html +1 -1
  32. data/docs/doc/Doing/Configuration.html +3 -1
  33. data/docs/doc/Doing/DayOneRenderer.html +1 -1
  34. data/docs/doc/Doing/DayoneExport.html +1 -1
  35. data/docs/doc/Doing/DoingExport.html +1 -1
  36. data/docs/doc/Doing/DoingImport.html +1 -1
  37. data/docs/doc/Doing/Entry.html +1 -1
  38. data/docs/doc/Doing/Errors/DoingNoTraceError.html +1 -1
  39. data/docs/doc/Doing/Errors/DoingRuntimeError.html +1 -1
  40. data/docs/doc/Doing/Errors/DoingStandardError.html +1 -1
  41. data/docs/doc/Doing/Errors/EmptyInput.html +1 -1
  42. data/docs/doc/Doing/Errors/HistoryLimitError.html +1 -1
  43. data/docs/doc/Doing/Errors/InvalidPlugin.html +1 -1
  44. data/docs/doc/Doing/Errors/MissingBackupFile.html +1 -1
  45. data/docs/doc/Doing/Errors/NoResults.html +1 -1
  46. data/docs/doc/Doing/Errors/PluginException.html +1 -1
  47. data/docs/doc/Doing/Errors/UserCancelled.html +1 -1
  48. data/docs/doc/Doing/Errors/WrongCommand.html +1 -1
  49. data/docs/doc/Doing/Errors.html +1 -1
  50. data/docs/doc/Doing/HTMLExport.html +1 -1
  51. data/docs/doc/Doing/Hooks.html +1 -1
  52. data/docs/doc/Doing/Item.html +1 -1
  53. data/docs/doc/Doing/ItemDates.html +1 -1
  54. data/docs/doc/Doing/ItemQuery.html +1 -1
  55. data/docs/doc/Doing/ItemState.html +1 -1
  56. data/docs/doc/Doing/ItemTags.html +1 -1
  57. data/docs/doc/Doing/Items.html +1 -1
  58. data/docs/doc/Doing/JSONExport.html +1 -1
  59. data/docs/doc/Doing/JSONImport.html +1 -1
  60. data/docs/doc/Doing/Logger.html +1 -1
  61. data/docs/doc/Doing/MarkdownExport.html +1 -1
  62. data/docs/doc/Doing/Note.html +1 -1
  63. data/docs/doc/Doing/Pager.html +1 -1
  64. data/docs/doc/Doing/Plugins.html +1 -1
  65. data/docs/doc/Doing/Prompt.html +1 -1
  66. data/docs/doc/Doing/PromptChoose.html +1 -1
  67. data/docs/doc/Doing/PromptFZF.html +1 -1
  68. data/docs/doc/Doing/PromptInput.html +1 -1
  69. data/docs/doc/Doing/PromptSTD.html +1 -1
  70. data/docs/doc/Doing/PromptYN.html +1 -1
  71. data/docs/doc/Doing/Section.html +1 -1
  72. data/docs/doc/Doing/StringHighlight.html +1 -1
  73. data/docs/doc/Doing/StringNormalize.html +1 -1
  74. data/docs/doc/Doing/StringQuery.html +1 -1
  75. data/docs/doc/Doing/StringTags.html +1 -1
  76. data/docs/doc/Doing/StringTransform.html +1 -1
  77. data/docs/doc/Doing/StringTruncate.html +1 -1
  78. data/docs/doc/Doing/StringURL.html +1 -1
  79. data/docs/doc/Doing/SymbolNormalize.html +1 -1
  80. data/docs/doc/Doing/TaskPaperExport.html +1 -1
  81. data/docs/doc/Doing/TemplateExport.html +1 -1
  82. data/docs/doc/Doing/TemplateString.html +1 -1
  83. data/docs/doc/Doing/TimingImport.html +1 -1
  84. data/docs/doc/Doing/Types.html +1 -1
  85. data/docs/doc/Doing/Util/Backup.html +1 -1
  86. data/docs/doc/Doing/Util.html +1 -1
  87. data/docs/doc/Doing/Version.html +1 -1
  88. data/docs/doc/Doing/WWID.html +1 -1
  89. data/docs/doc/Doing.html +2 -2
  90. data/docs/doc/FalseClass.html +1 -1
  91. data/docs/doc/GLI/Commands/Help.html +1 -1
  92. data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +1 -1
  93. data/docs/doc/GLI/Commands.html +1 -1
  94. data/docs/doc/GLI.html +1 -1
  95. data/docs/doc/Hash.html +1 -1
  96. data/docs/doc/Numeric.html +1 -1
  97. data/docs/doc/Object.html +1 -1
  98. data/docs/doc/PhraseParser/Operator.html +1 -1
  99. data/docs/doc/PhraseParser/PhraseClause.html +1 -1
  100. data/docs/doc/PhraseParser/Query.html +1 -1
  101. data/docs/doc/PhraseParser/QueryParser.html +1 -1
  102. data/docs/doc/PhraseParser/QueryTransformer.html +1 -1
  103. data/docs/doc/PhraseParser/TermClause.html +1 -1
  104. data/docs/doc/PhraseParser.html +1 -1
  105. data/docs/doc/Status.html +1 -1
  106. data/docs/doc/String.html +1 -1
  107. data/docs/doc/Symbol.html +1 -1
  108. data/docs/doc/Time.html +1 -1
  109. data/docs/doc/TrueClass.html +1 -1
  110. data/docs/doc/_index.html +1 -1
  111. data/docs/doc/file.README.html +2 -2
  112. data/docs/doc/index.html +2 -2
  113. data/docs/doc/top-level-namespace.html +1 -1
  114. data/doing.rdoc +17 -1
  115. data/lib/completion/_doing.zsh +4 -0
  116. data/lib/completion/doing.bash +11 -0
  117. data/lib/completion/doing.fish +2 -0
  118. data/lib/completion/doing.ts +14 -0
  119. data/lib/doing/configuration.rb +4 -2
  120. data/lib/doing/plugins/export/byday.rb +39 -0
  121. data/lib/doing/version.rb +1 -1
  122. data/lib/doing/wwid/timers.rb +65 -8
  123. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ba2752c11c8bc751bfe24709d627369e2d2d5e8df1545db710982182635516d
4
- data.tar.gz: 936e34abfa2e6f71aedc7081c7f24933aeab5d90c45276c4f5b03df4a08dfac5
3
+ metadata.gz: 85494198a6b41a6bc007bbcaa37de5740976e809dfc7ffc8140d4e248565866d
4
+ data.tar.gz: 592237498480e8a2b2c734935f13b0f114c5551a188bce33dca8fc9165fbe8e6
5
5
  SHA512:
6
- metadata.gz: b84eae6a3b6f07986a1505e995cee8585987209f351ba020ae6eaffca7c2abcee5a3d715ec671a4f4f774515ef9d94fbd01cfa22f7dd71d5d0493c4abbdc70f4
7
- data.tar.gz: 8a4ed3e780bebe0669b8d794470ffc5c4fd277141513b8c31c7530cfacdc1479da7d45ec05b0fc4db476f2fcb3b3ebdbc4711ba2ef33e4630a334d3185b773a5
6
+ metadata.gz: 770d45fdb1378e061186349cce29bd40468e7d0316ef095f738d83687a75d04bb371c1ac82335a3bab8158d661cd1674d38b45fb4d4b06796adf4547087977f9
7
+ data.tar.gz: e67f7db8565e90d21f859a3dfa369e400ab5abd38e9d1ceddd561540067ce7be24cac3f76231512244ccf9756a204002f32c1fc668305fd77ab9331195fd550b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ### 2.1.94
2
+
3
+ 2026-02-13 07:16
4
+
5
+ #### CHANGED
6
+
7
+ - Allow interactive finish tagging to treat section filters that resolve to multiple values as matching "All" when any selected section name is "all"
8
+ - Tag totals (--totals) show remaining budget per tag and total budgets left when budgets are configured
9
+ - Byday export shows total budgets left in daily and grand total lines
10
+ - JSON tag totals output includes budget, remaining, and remaining_formatted fields for each tag
11
+
12
+ #### NEW
13
+
14
+ - Add budget command to set, list, and remove time budgets for tags (e.g. doing budget dev 100h)
15
+
16
+ #### FIXED
17
+
18
+ - Fix error when running "doing finish --interactive" that raised "undefined method '=~' for an instance of Array" when section options produced an Array
19
+ - Fix choose_config raising nil when additional_configs was not initialized
20
+ - Fix HTML output test failing with undefined method "to_hash" by running doing subprocess via bundle exec to use project gems
21
+
1
22
  ### 2.1.93
2
23
 
3
24
  2026-02-10 04:10
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- doing (2.1.93)
4
+ doing (2.1.94)
5
5
  base64 (~> 0.2)
6
6
  chronic (~> 0.10, >= 0.10.2)
7
7
  csv (~> 3.3)
data/README.md CHANGED
@@ -12,7 +12,7 @@ _If you're one of the rare people like me who find this useful, feel free to
12
12
 
13
13
  <!--README-->
14
14
 
15
- The current version of `doing` is <!--VER-->2.1.90<!--END VER-->.
15
+ The current version of `doing` is <!--VER-->2.1.93<!--END VER-->.
16
16
 
17
17
  Find all of the documentation in the [doing wiki][wiki].
18
18
 
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ # @@budget
4
+ desc 'Set, list, and remove tag time budgets'
5
+ long_desc %(Manage simple time budgets for tags.
6
+
7
+ Run without arguments to list configured budgets.
8
+
9
+ Use `doing budget TAG AMOUNT` to set a budget (e.g. `doing budget dev 100h`).
10
+
11
+ Use `doing budget TAG --remove` to delete a budget.)
12
+ arg_name '[TAG [AMOUNT]]'
13
+ command :budget do |c|
14
+ c.example 'doing budget', desc: 'List configured tag budgets'
15
+ c.example 'doing budget dev 100h', desc: 'Set budget for @dev to 100 hours'
16
+ c.example 'doing budget dev --remove', desc: 'Remove budget for @dev'
17
+
18
+ c.desc 'Delete specified tag budget'
19
+ c.switch %i[r remove], negatable: false, default_value: false
20
+
21
+ c.action do |_global_options, options, args|
22
+ budgets = Doing.setting('budgets', {}) || {}
23
+
24
+ budget_fmt = lambda do |secs|
25
+ secs = secs.to_i
26
+ return '0h' if secs <= 0
27
+
28
+ minutes = (secs / 60).to_i
29
+ hours = (minutes / 60).to_i
30
+ mins = (minutes % 60).to_i
31
+ return format('%dh', hours) if mins.zero?
32
+ return format('%dm', mins) if hours.zero?
33
+
34
+ format('%dh%dm', hours, mins)
35
+ end
36
+
37
+ if args.empty?
38
+ if budgets.nil? || budgets.empty?
39
+ puts 'No tag budgets configured'
40
+ else
41
+ budgets.keys.sort.each do |tag|
42
+ secs = budgets[tag].to_i
43
+ duration = budget_fmt.call(secs)
44
+ puts "#{tag}: #{duration}"
45
+ end
46
+ end
47
+ next
48
+ end
49
+
50
+ tag = args.shift.sub(/^@/, '').downcase
51
+
52
+ config_file = Doing.config.choose_config(create: true, local: false)
53
+ cfg = Doing::Util.safe_load_file(config_file) || {}
54
+ path = ['budgets', tag]
55
+
56
+ if options[:remove]
57
+ if cfg.dig(*path).nil? && (budgets[tag].nil?)
58
+ Doing.logger.log_now(:warn, 'Budget:', "No budget found for tag @#{tag}")
59
+ else
60
+ cfg.deep_set(path, nil)
61
+ Doing.settings['budgets']&.delete(tag)
62
+ Doing.logger.log_now(:warn, 'Budget:', "Removed budget for tag @#{tag}")
63
+ end
64
+
65
+ Doing::Util.write_to_file(config_file, YAML.dump(cfg), backup: true)
66
+ next
67
+ end
68
+
69
+ raise InvalidArgument, 'Budget requires TAG and AMOUNT' if args.empty?
70
+
71
+ amount = args.join(' ')
72
+ seconds = amount.chronify_qty
73
+ raise InvalidArgument, "Invalid budget amount: #{amount}" if seconds.zero?
74
+
75
+ cfg.deep_set(path, seconds)
76
+ Doing::Util.write_to_file(config_file, YAML.dump(cfg), backup: true)
77
+
78
+ Doing.settings['budgets'] ||= {}
79
+ Doing.settings['budgets'][tag] = seconds
80
+
81
+ Doing.logger.log_now(:warn, 'Budget:',
82
+ "Set budget for tag @#{tag} to #{budget_fmt.call(seconds)}")
83
+ end
84
+ end
85
+
data/bin/doing CHANGED
@@ -223,7 +223,7 @@ add_commands(%w[now done finish note select tag])
223
223
  ## View commands
224
224
  add_commands(%w[grep last recent show on view])
225
225
  ## Utility commands
226
- add_commands(%w[config open commands])
226
+ add_commands(%w[config open commands budget])
227
227
  ## File handling/batch modification commands
228
228
  add_commands(%w[archive import rotate])
229
229
  ## History commands
data/docs/doc/Array.html CHANGED
@@ -350,7 +350,7 @@ has content</p>
350
350
  </div>
351
351
 
352
352
  <div id="footer">
353
- Generated on Tue Feb 10 04:26:34 2026 by
353
+ Generated on Fri Feb 13 07:19:09 2026 by
354
354
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
355
355
  0.9.38 (ruby-3.4.4).
356
356
  </div>
@@ -283,7 +283,7 @@
283
283
  </div>
284
284
 
285
285
  <div id="footer">
286
- Generated on Tue Feb 10 04:26:34 2026 by
286
+ Generated on Fri Feb 13 07:19:09 2026 by
287
287
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
288
288
  0.9.38 (ruby-3.4.4).
289
289
  </div>
@@ -162,7 +162,7 @@
162
162
  </div>
163
163
 
164
164
  <div id="footer">
165
- Generated on Tue Feb 10 04:26:34 2026 by
165
+ Generated on Fri Feb 13 07:19:09 2026 by
166
166
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
167
167
  0.9.38 (ruby-3.4.4).
168
168
  </div>
@@ -407,7 +407,7 @@
407
407
  </div>
408
408
 
409
409
  <div id="footer">
410
- Generated on Tue Feb 10 04:26:34 2026 by
410
+ Generated on Fri Feb 13 07:19:09 2026 by
411
411
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
412
412
  0.9.38 (ruby-3.4.4).
413
413
  </div>
@@ -125,7 +125,7 @@ parser. In order to do that, a new &quot;clause&quot; node is added to the parse
125
125
  </div>
126
126
 
127
127
  <div id="footer">
128
- Generated on Tue Feb 10 04:26:34 2026 by
128
+ Generated on Fri Feb 13 07:19:09 2026 by
129
129
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
130
130
  0.9.38 (ruby-3.4.4).
131
131
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Tue Feb 10 04:26:34 2026 by
117
+ Generated on Fri Feb 13 07:19:09 2026 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.38 (ruby-3.4.4).
120
120
  </div>
@@ -105,7 +105,7 @@
105
105
  </div>
106
106
 
107
107
  <div id="footer">
108
- Generated on Tue Feb 10 04:26:34 2026 by
108
+ Generated on Fri Feb 13 07:19:09 2026 by
109
109
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
110
110
  0.9.38 (ruby-3.4.4).
111
111
  </div>
@@ -306,7 +306,7 @@ removes empty elements</p>
306
306
  </div>
307
307
 
308
308
  <div id="footer">
309
- Generated on Tue Feb 10 04:26:33 2026 by
309
+ Generated on Fri Feb 13 07:19:08 2026 by
310
310
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
311
311
  0.9.38 (ruby-3.4.4).
312
312
  </div>
@@ -188,7 +188,7 @@
188
188
  </div>
189
189
 
190
190
  <div id="footer">
191
- Generated on Tue Feb 10 04:26:34 2026 by
191
+ Generated on Fri Feb 13 07:19:09 2026 by
192
192
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
193
193
  0.9.38 (ruby-3.4.4).
194
194
  </div>
@@ -414,7 +414,7 @@ with</p>
414
414
  </div>
415
415
 
416
416
  <div id="footer">
417
- Generated on Tue Feb 10 04:26:33 2026 by
417
+ Generated on Fri Feb 13 07:19:08 2026 by
418
418
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
419
419
  0.9.38 (ruby-3.4.4).
420
420
  </div>
@@ -196,7 +196,7 @@
196
196
  </div>
197
197
 
198
198
  <div id="footer">
199
- Generated on Tue Feb 10 04:26:34 2026 by
199
+ Generated on Fri Feb 13 07:19:09 2026 by
200
200
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
201
201
  0.9.38 (ruby-3.4.4).
202
202
  </div>
@@ -256,7 +256,7 @@
256
256
  </div>
257
257
 
258
258
  <div id="footer">
259
- Generated on Tue Feb 10 04:26:34 2026 by
259
+ Generated on Fri Feb 13 07:19:09 2026 by
260
260
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
261
261
  0.9.38 (ruby-3.4.4).
262
262
  </div>
@@ -222,7 +222,7 @@
222
222
  </div>
223
223
 
224
224
  <div id="footer">
225
- Generated on Tue Feb 10 04:26:34 2026 by
225
+ Generated on Fri Feb 13 07:19:09 2026 by
226
226
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
227
227
  0.9.38 (ruby-3.4.4).
228
228
  </div>
@@ -678,7 +678,7 @@
678
678
  </div>
679
679
 
680
680
  <div id="footer">
681
- Generated on Tue Feb 10 04:26:34 2026 by
681
+ Generated on Fri Feb 13 07:19:09 2026 by
682
682
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
683
683
  0.9.38 (ruby-3.4.4).
684
684
  </div>
@@ -458,7 +458,7 @@
458
458
  </div>
459
459
 
460
460
  <div id="footer">
461
- Generated on Tue Feb 10 04:26:34 2026 by
461
+ Generated on Fri Feb 13 07:19:09 2026 by
462
462
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
463
463
  0.9.38 (ruby-3.4.4).
464
464
  </div>
@@ -337,7 +337,7 @@
337
337
  </div>
338
338
 
339
339
  <div id="footer">
340
- Generated on Tue Feb 10 04:26:33 2026 by
340
+ Generated on Fri Feb 13 07:19:08 2026 by
341
341
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
342
342
  0.9.38 (ruby-3.4.4).
343
343
  </div>
@@ -261,7 +261,7 @@ hours into days</p>
261
261
  </div>
262
262
 
263
263
  <div id="footer">
264
- Generated on Tue Feb 10 04:26:33 2026 by
264
+ Generated on Fri Feb 13 07:19:08 2026 by
265
265
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
266
266
  0.9.38 (ruby-3.4.4).
267
267
  </div>
@@ -672,7 +672,7 @@ array</p>
672
672
  </div>
673
673
 
674
674
  <div id="footer">
675
- Generated on Tue Feb 10 04:26:33 2026 by
675
+ Generated on Fri Feb 13 07:19:08 2026 by
676
676
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
677
677
  0.9.38 (ruby-3.4.4).
678
678
  </div>
@@ -728,7 +728,7 @@ ANSI-sequences are stripped from the string.</p>
728
728
  </div>
729
729
 
730
730
  <div id="footer">
731
- Generated on Tue Feb 10 04:26:33 2026 by
731
+ Generated on Fri Feb 13 07:19:08 2026 by
732
732
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
733
733
  0.9.38 (ruby-3.4.4).
734
734
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Tue Feb 10 04:26:34 2026 by
438
+ Generated on Fri Feb 13 07:19:09 2026 by
439
439
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.38 (ruby-3.4.4).
441
441
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Tue Feb 10 04:26:34 2026 by
438
+ Generated on Fri Feb 13 07:19:09 2026 by
439
439
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.38 (ruby-3.4.4).
441
441
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Tue Feb 10 04:26:34 2026 by
438
+ Generated on Fri Feb 13 07:19:09 2026 by
439
439
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.38 (ruby-3.4.4).
441
441
  </div>
@@ -277,7 +277,7 @@
277
277
  </div>
278
278
 
279
279
  <div id="footer">
280
- Generated on Tue Feb 10 04:26:34 2026 by
280
+ Generated on Fri Feb 13 07:19:09 2026 by
281
281
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
282
282
  0.9.38 (ruby-3.4.4).
283
283
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Tue Feb 10 04:26:34 2026 by
438
+ Generated on Fri Feb 13 07:19:09 2026 by
439
439
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.38 (ruby-3.4.4).
441
441
  </div>
@@ -540,7 +540,7 @@ stdout</p>
540
540
  </div>
541
541
 
542
542
  <div id="footer">
543
- Generated on Tue Feb 10 04:26:33 2026 by
543
+ Generated on Fri Feb 13 07:19:08 2026 by
544
544
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
545
545
  0.9.38 (ruby-3.4.4).
546
546
  </div>
@@ -152,6 +152,8 @@
152
152
  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>never_finish</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='comma'>,</span>
153
153
  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>date_tags</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>done</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>defer(?:red)?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>waiting</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span>
154
154
 
155
+ <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>budgets</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span>
156
+
155
157
  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>timer_format</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>text</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
156
158
  <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>interval_format</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>text</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
157
159
 
@@ -1228,7 +1230,7 @@ matched, first match wins)</p>
1228
1230
  </div>
1229
1231
 
1230
1232
  <div id="footer">
1231
- Generated on Tue Feb 10 04:26:34 2026 by
1233
+ Generated on Fri Feb 13 07:19:09 2026 by
1232
1234
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1233
1235
  0.9.38 (ruby-3.4.4).
1234
1236
  </div>
@@ -373,7 +373,7 @@
373
373
  </div>
374
374
 
375
375
  <div id="footer">
376
- Generated on Tue Feb 10 04:26:34 2026 by
376
+ Generated on Fri Feb 13 07:19:09 2026 by
377
377
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
378
378
  0.9.38 (ruby-3.4.4).
379
379
  </div>
@@ -280,7 +280,7 @@
280
280
  </div>
281
281
 
282
282
  <div id="footer">
283
- Generated on Tue Feb 10 04:26:34 2026 by
283
+ Generated on Fri Feb 13 07:19:09 2026 by
284
284
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
285
285
  0.9.38 (ruby-3.4.4).
286
286
  </div>
@@ -196,7 +196,7 @@
196
196
  </div>
197
197
 
198
198
  <div id="footer">
199
- Generated on Tue Feb 10 04:26:34 2026 by
199
+ Generated on Fri Feb 13 07:19:09 2026 by
200
200
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
201
201
  0.9.38 (ruby-3.4.4).
202
202
  </div>
@@ -381,7 +381,7 @@
381
381
  </div>
382
382
 
383
383
  <div id="footer">
384
- Generated on Tue Feb 10 04:26:34 2026 by
384
+ Generated on Fri Feb 13 07:19:09 2026 by
385
385
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
386
386
  0.9.38 (ruby-3.4.4).
387
387
  </div>
@@ -476,7 +476,7 @@
476
476
  </div>
477
477
 
478
478
  <div id="footer">
479
- Generated on Tue Feb 10 04:26:34 2026 by
479
+ Generated on Fri Feb 13 07:19:09 2026 by
480
480
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
481
481
  0.9.38 (ruby-3.4.4).
482
482
  </div>
@@ -180,7 +180,7 @@
180
180
  </div>
181
181
 
182
182
  <div id="footer">
183
- Generated on Tue Feb 10 04:26:34 2026 by
183
+ Generated on Fri Feb 13 07:19:09 2026 by
184
184
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
185
185
  0.9.38 (ruby-3.4.4).
186
186
  </div>
@@ -180,7 +180,7 @@
180
180
  </div>
181
181
 
182
182
  <div id="footer">
183
- Generated on Tue Feb 10 04:26:34 2026 by
183
+ Generated on Fri Feb 13 07:19:09 2026 by
184
184
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
185
185
  0.9.38 (ruby-3.4.4).
186
186
  </div>
@@ -176,7 +176,7 @@
176
176
  </div>
177
177
 
178
178
  <div id="footer">
179
- Generated on Tue Feb 10 04:26:34 2026 by
179
+ Generated on Fri Feb 13 07:19:09 2026 by
180
180
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
181
181
  0.9.38 (ruby-3.4.4).
182
182
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -238,7 +238,7 @@
238
238
  </div>
239
239
 
240
240
  <div id="footer">
241
- Generated on Tue Feb 10 04:26:34 2026 by
241
+ Generated on Fri Feb 13 07:19:09 2026 by
242
242
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
243
243
  0.9.38 (ruby-3.4.4).
244
244
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -184,7 +184,7 @@
184
184
  </div>
185
185
 
186
186
  <div id="footer">
187
- Generated on Tue Feb 10 04:26:34 2026 by
187
+ Generated on Fri Feb 13 07:19:09 2026 by
188
188
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
189
189
  0.9.38 (ruby-3.4.4).
190
190
  </div>
@@ -181,7 +181,7 @@
181
181
  </div>
182
182
 
183
183
  <div id="footer">
184
- Generated on Tue Feb 10 04:26:33 2026 by
184
+ Generated on Fri Feb 13 07:19:08 2026 by
185
185
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
186
186
  0.9.38 (ruby-3.4.4).
187
187
  </div>
@@ -246,7 +246,7 @@
246
246
  </div>
247
247
 
248
248
  <div id="footer">
249
- Generated on Tue Feb 10 04:26:34 2026 by
249
+ Generated on Fri Feb 13 07:19:09 2026 by
250
250
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
251
251
  0.9.38 (ruby-3.4.4).
252
252
  </div>