doing 2.1.43 → 2.1.46

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/.irbrc +3 -0
  3. data/CHANGELOG.md +40 -0
  4. data/Gemfile.lock +4 -4
  5. data/README.md +1 -1
  6. data/bin/commands/grep.rb +10 -2
  7. data/bin/commands/on.rb +6 -1
  8. data/bin/commands/recent.rb +1 -0
  9. data/bin/commands/reset.rb +6 -4
  10. data/bin/commands/show.rb +6 -1
  11. data/bin/commands/since.rb +5 -2
  12. data/bin/commands/today.rb +1 -0
  13. data/bin/commands/views.rb +81 -20
  14. data/bin/doing +24 -1
  15. data/docs/doc/Array.html +12 -2
  16. data/docs/doc/BooleanTermParser/Clause.html +1 -1
  17. data/docs/doc/BooleanTermParser/Operator.html +1 -1
  18. data/docs/doc/BooleanTermParser/Query.html +1 -1
  19. data/docs/doc/BooleanTermParser/QueryParser.html +1 -1
  20. data/docs/doc/BooleanTermParser/QueryTransformer.html +1 -1
  21. data/docs/doc/BooleanTermParser.html +1 -1
  22. data/docs/doc/Doing/ArrayCleanup.html +1 -1
  23. data/docs/doc/Doing/ArrayNestedHash.html +1 -1
  24. data/docs/doc/Doing/ArrayTags.html +1 -1
  25. data/docs/doc/Doing/CSVExport.html +1 -1
  26. data/docs/doc/Doing/CalendarImport.html +1 -1
  27. data/docs/doc/Doing/Change.html +1 -1
  28. data/docs/doc/Doing/Changes.html +1 -1
  29. data/docs/doc/Doing/ChronifyArray.html +1 -1
  30. data/docs/doc/Doing/ChronifyNumeric.html +1 -1
  31. data/docs/doc/Doing/ChronifyString.html +1 -1
  32. data/docs/doc/Doing/Color.html +1 -1
  33. data/docs/doc/Doing/Completion/BashCompletions.html +1 -1
  34. data/docs/doc/Doing/Completion/FishCompletions.html +1 -1
  35. data/docs/doc/Doing/Completion/StringUtils.html +1 -1
  36. data/docs/doc/Doing/Completion/ZshCompletions.html +1 -1
  37. data/docs/doc/Doing/Completion.html +1 -1
  38. data/docs/doc/Doing/Configuration.html +1 -1
  39. data/docs/doc/Doing/DayOneRenderer.html +1 -1
  40. data/docs/doc/Doing/DayoneExport.html +1 -1
  41. data/docs/doc/Doing/DoingImport.html +1 -1
  42. data/docs/doc/Doing/Entry.html +1 -1
  43. data/docs/doc/Doing/Errors/DoingNoTraceError.html +1 -1
  44. data/docs/doc/Doing/Errors/DoingRuntimeError.html +1 -1
  45. data/docs/doc/Doing/Errors/DoingStandardError.html +1 -1
  46. data/docs/doc/Doing/Errors/EmptyInput.html +1 -1
  47. data/docs/doc/Doing/Errors/HistoryLimitError.html +1 -1
  48. data/docs/doc/Doing/Errors/InvalidPlugin.html +1 -1
  49. data/docs/doc/Doing/Errors/MissingBackupFile.html +1 -1
  50. data/docs/doc/Doing/Errors/NoResults.html +1 -1
  51. data/docs/doc/Doing/Errors/PluginException.html +1 -1
  52. data/docs/doc/Doing/Errors/UserCancelled.html +1 -1
  53. data/docs/doc/Doing/Errors/WrongCommand.html +1 -1
  54. data/docs/doc/Doing/Errors.html +1 -1
  55. data/docs/doc/Doing/HTMLExport.html +1 -1
  56. data/docs/doc/Doing/Hooks.html +1 -1
  57. data/docs/doc/Doing/Item.html +75 -36
  58. data/docs/doc/Doing/ItemDates.html +1 -1
  59. data/docs/doc/Doing/ItemQuery.html +1 -1
  60. data/docs/doc/Doing/ItemState.html +1 -1
  61. data/docs/doc/Doing/ItemTags.html +1 -1
  62. data/docs/doc/Doing/Items.html +129 -1
  63. data/docs/doc/Doing/JSONExport.html +1 -1
  64. data/docs/doc/Doing/Logger.html +1 -1
  65. data/docs/doc/Doing/MarkdownExport.html +1 -1
  66. data/docs/doc/Doing/Note.html +1 -1
  67. data/docs/doc/Doing/Pager.html +1 -1
  68. data/docs/doc/Doing/Plugins.html +1 -1
  69. data/docs/doc/Doing/Prompt.html +1 -1
  70. data/docs/doc/Doing/PromptChoose.html +1 -1
  71. data/docs/doc/Doing/PromptFZF.html +1 -1
  72. data/docs/doc/Doing/PromptInput.html +1 -1
  73. data/docs/doc/Doing/PromptSTD.html +1 -1
  74. data/docs/doc/Doing/PromptYN.html +1 -1
  75. data/docs/doc/Doing/Section.html +1 -1
  76. data/docs/doc/Doing/StringHighlight.html +1 -1
  77. data/docs/doc/Doing/StringNormalize.html +1 -1
  78. data/docs/doc/Doing/StringQuery.html +1 -1
  79. data/docs/doc/Doing/StringTags.html +1 -1
  80. data/docs/doc/Doing/StringTransform.html +1 -1
  81. data/docs/doc/Doing/StringTruncate.html +1 -1
  82. data/docs/doc/Doing/StringURL.html +1 -1
  83. data/docs/doc/Doing/SymbolNormalize.html +1 -1
  84. data/docs/doc/Doing/TaskPaperExport.html +1 -1
  85. data/docs/doc/Doing/TemplateExport.html +1 -1
  86. data/docs/doc/Doing/TemplateString.html +2 -2
  87. data/docs/doc/Doing/TimingImport.html +1 -1
  88. data/docs/doc/Doing/Types.html +23 -18
  89. data/docs/doc/Doing/Util/Backup.html +1 -1
  90. data/docs/doc/Doing/Util.html +2 -2
  91. data/docs/doc/Doing/Version.html +1 -1
  92. data/docs/doc/Doing/WWID.html +1 -1
  93. data/docs/doc/Doing.html +4 -4
  94. data/docs/doc/FalseClass.html +11 -1
  95. data/docs/doc/GLI/Commands/Help.html +1 -1
  96. data/docs/doc/GLI/Commands/MarkdownDocumentListener.html +1 -1
  97. data/docs/doc/GLI/Commands.html +1 -1
  98. data/docs/doc/GLI.html +1 -1
  99. data/docs/doc/Hash.html +1 -1
  100. data/docs/doc/Numeric.html +1 -1
  101. data/docs/doc/Object.html +1 -1
  102. data/docs/doc/PhraseParser/Operator.html +1 -1
  103. data/docs/doc/PhraseParser/PhraseClause.html +1 -1
  104. data/docs/doc/PhraseParser/Query.html +1 -1
  105. data/docs/doc/PhraseParser/QueryParser.html +1 -1
  106. data/docs/doc/PhraseParser/QueryTransformer.html +1 -1
  107. data/docs/doc/PhraseParser/TermClause.html +1 -1
  108. data/docs/doc/PhraseParser.html +1 -1
  109. data/docs/doc/Status.html +1 -1
  110. data/docs/doc/String.html +65 -3
  111. data/docs/doc/Symbol.html +1 -1
  112. data/docs/doc/Time.html +68 -3
  113. data/docs/doc/TrueClass.html +11 -1
  114. data/docs/doc/_index.html +8 -1
  115. data/docs/doc/class_list.html +1 -1
  116. data/docs/doc/file.README.html +2 -2
  117. data/docs/doc/index.html +2 -2
  118. data/docs/doc/method_list.html +496 -440
  119. data/docs/doc/top-level-namespace.html +1 -1
  120. data/doing.rdoc +66 -5
  121. data/lib/completion/_doing.zsh +10 -10
  122. data/lib/completion/doing.bash +18 -18
  123. data/lib/completion/doing.fish +9 -0
  124. data/lib/doing/add_options.rb +6 -2
  125. data/lib/doing/configuration.rb +4 -0
  126. data/lib/doing/good.rb +18 -1
  127. data/lib/doing/item/item.rb +7 -8
  128. data/lib/doing/items/items.rb +24 -0
  129. data/lib/doing/plugins/export/json_export.rb +16 -2
  130. data/lib/doing/plugins/import/json_import.rb +93 -0
  131. data/lib/doing/string/string.rb +9 -0
  132. data/lib/doing/types.rb +9 -8
  133. data/lib/doing/version.rb +1 -1
  134. data/lib/doing/wwid/display.rb +4 -1
  135. data/lib/doing/wwid/filetools.rb +3 -2
  136. data/lib/doing/wwid/filter.rb +6 -3
  137. data/lib/doing.rb +10 -0
  138. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f66c677c6389d032b16de0fc8f8e10c1c07c3acfe17598acae8cedb06f633265
4
- data.tar.gz: 9b0563a648269c91c290fabe908f0f0e32e789be4cf8147ddd1c9ef260b99466
3
+ metadata.gz: 8e436ed811fa6f51694c00dcc0b6abd9017c141088240288bb8167cd51982881
4
+ data.tar.gz: a130ffd750169719c00d26fc0e849d41dc09da76c70e194cd1b1a66f42a5ea65
5
5
  SHA512:
6
- metadata.gz: a0bcf6d549f921706060ea8d7d3df0d493e4bc8304beaa324f9f7a7a14bf3fd47c55eb5f236c6bb312901e4d586655c7b95e809a7b35477da720bee57af4f7f0
7
- data.tar.gz: 2744cea9d2f5d7620d5983d29e892dca4e8066d54b5cc191445e4845ef852682f328297e821d2085df4770edc67c7a7872d42d5adf44bd8189e0fe1c71146791
6
+ metadata.gz: f456e3b74c6fd966eca69669acb037e4a9f57b164c28cf1421c3355de642f80a84c3ec944b68cd075cff552aba8432bb718ccc5f60ab9d7201e2c0e4f4cec6c8
7
+ data.tar.gz: dcb350b567a6683d7b2676fc2f8ee0a2cf8b596722652c9f6038333475aed89711ded5b9a02a6b61ae121dd96152b9c38df68492a3b5dcd79bb83ab32204308d
data/.irbrc CHANGED
@@ -1,2 +1,5 @@
1
1
  require_relative 'lib/doing'
2
2
  include Doing
3
+
4
+ @wwid = WWID.new
5
+ @wwid.init_doing_file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,43 @@
1
+ ### 2.1.46
2
+
3
+ 2022-03-23 08:19
4
+
5
+ #### NEW
6
+
7
+ - Store MD5 ids with each entry
8
+ - JSON import takes Doing format JSON and updates existing items with matching ids, adding new entries for unmatched
9
+
10
+ #### IMPROVED
11
+
12
+ - JSON output includes section and id for each entry
13
+
14
+ ### 2.1.45
15
+
16
+ 2022-03-22 08:57
17
+
18
+ #### FIXED
19
+
20
+ - Specifying '12am' as a start time filter resulted in a Nil error
21
+
22
+ ### 2.1.44
23
+
24
+ 2022-03-21 07:46
25
+
26
+ #### NEW
27
+
28
+ - `doing views --remove NAME` to delete a view
29
+ - Deleting all view content in editor (`doing views -e`) deletes the view
30
+
31
+ #### IMPROVED
32
+
33
+ - When saving a view, ignore keys that are the same as the default template
34
+ - Commands accepting `--save` also accept `--title TITLE`
35
+
36
+ #### FIXED
37
+
38
+ - When saving a view, store original date string instead of chronified result
39
+ - Error when testing for valid date
40
+
1
41
  ### 2.1.43
2
42
 
3
43
  2022-03-20 12:44
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- doing (2.1.43)
4
+ doing (2.1.46)
5
5
  chronic (~> 0.10, >= 0.10.2)
6
6
  deep_merge (~> 1.2, >= 1.2.1)
7
7
  gli (~> 2.20, >= 2.20.1)
@@ -22,11 +22,11 @@ GEM
22
22
  chronic (0.10.2)
23
23
  deep_merge (1.2.2)
24
24
  github-markup (4.0.0)
25
- gli (2.20.1)
25
+ gli (2.21.0)
26
26
  haml (5.0.4)
27
27
  temple (>= 0.8.0)
28
28
  tilt
29
- kramdown (2.3.1)
29
+ kramdown (2.3.2)
30
30
  rexml
31
31
  parallel (1.21.0)
32
32
  parallel_tests (3.7.3)
@@ -40,7 +40,7 @@ GEM
40
40
  rdoc (6.3.3)
41
41
  redcarpet (3.5.1)
42
42
  rexml (3.2.5)
43
- rouge (3.27.0)
43
+ rouge (3.28.0)
44
44
  safe_yaml (1.0.5)
45
45
  strings (0.2.1)
46
46
  strings-ansi (~> 0.2)
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.42<!--END VER-->.
11
+ The current version of `doing` is <!--VER-->2.1.45<!--END VER-->.
12
12
 
13
13
  Find all of the documentation in the [doing wiki][wiki].
14
14
 
data/bin/commands/grep.rb CHANGED
@@ -49,7 +49,10 @@ command %i[grep search] do |c|
49
49
  c.action do |_global_options, options, args|
50
50
  options[:fuzzy] = false
51
51
 
52
- raise InvalidPlugin.new('output', options[:output]) if options[:output] && options[:output] !~ Doing::Plugins.plugin_regex(type: :export)
52
+ if options[:output] && options[:output] !~ Doing::Plugins.plugin_regex(type: :export)
53
+ raise InvalidPlugin.new('output', options[:output])
54
+
55
+ end
53
56
 
54
57
  template = Doing.setting(['templates', options[:config_template]]).deep_merge(Doing.settings)
55
58
  tags_color = template.key?('tags_color') ? template['tags_color'] : nil
@@ -67,6 +70,11 @@ command %i[grep search] do |c|
67
70
  options[:tags_color] = tags_color
68
71
 
69
72
  Doing::Pager.page @wwid.list_section(options)
70
- Doing.config.save_view(options.to_view, options[:save].downcase) if options[:save]
73
+ if options[:save]
74
+ options[:before] = Doing.original_options[:date_begin] if Doing.original_options[:date_begin].good?
75
+ options[:after] = Doing.original_options[:date_end] if Doing.original_options[:date_end].good?
76
+ options[:from] = Doing.original_options[:date_range] if Doing.original_options[:date_range].good?
77
+ Doing.config.save_view(options.to_view, options[:save].downcase)
78
+ end
71
79
  end
72
80
  end
data/bin/commands/on.rb CHANGED
@@ -50,6 +50,11 @@ command :on do |c|
50
50
  options[:output],
51
51
  options).chomp
52
52
 
53
- Doing.config.save_view(options.to_view, options[:save].downcase) if options[:save]
53
+ if options[:save]
54
+ options[:before] = Doing.original_options[:date_end] if Doing.original_options[:date_end].good?
55
+ options[:after] = Doing.original_options[:date_begin] if Doing.original_options[:date_begin].good?
56
+ options[:from] = Doing.original_options[:date_range] if Doing.original_options[:date_range].good?
57
+ Doing.config.save_view(options.to_view, options[:save].downcase)
58
+ end
54
59
  end
55
60
  end
@@ -55,6 +55,7 @@ command :recent do |c|
55
55
 
56
56
  Doing::Pager::page @wwid.recent(count, section.cap_first, opts)
57
57
  opts[:count] = count
58
+ opts[:title] = options[:title]
58
59
  Doing.config.save_view(opts.to_view, options[:save].downcase) if options[:save]
59
60
  end
60
61
  end
@@ -46,6 +46,9 @@ command %i[reset begin] do |c|
46
46
  reset_date = Time.now
47
47
  end
48
48
 
49
+ from = options[:from]
50
+ options[:from] = nil
51
+
49
52
  options[:fuzzy] = false
50
53
 
51
54
  options[:section] = @wwid.guess_section(options[:section]) || options[:section].cap_first if options[:section]
@@ -70,16 +73,15 @@ command %i[reset begin] do |c|
70
73
  items.reverse.last
71
74
  end
72
75
 
73
-
74
76
  raise NoResults, 'No entry matching parameters was found.' unless last_entry
75
77
 
76
78
  finish_date = nil
77
79
 
78
- if options[:from]
79
- options[:from] = options[:from].split(/#{REGEX_RANGE_INDICATOR}/).map do |time|
80
+ if from
81
+ from = from.split(/#{REGEX_RANGE_INDICATOR}/).map do |time|
80
82
  time =~ REGEX_TIME ? "today #{time.sub(/(?mi)(^.*?(?=\d+)|(?<=[ap]m).*?$)/, '')}" : time
81
83
  end.join(' to ').split_date_range
82
- reset_date, finish_date = options[:from]
84
+ reset_date, finish_date = from
83
85
  options[:resume] = false if finish_date
84
86
  end
85
87
 
data/bin/commands/show.rb CHANGED
@@ -155,6 +155,11 @@ command :show do |c|
155
155
 
156
156
  Doing::Pager.page @wwid.list_section(opt, items: items)
157
157
 
158
- Doing.config.save_view(opt.to_view, options[:save].downcase) if options[:save]
158
+ if options[:save]
159
+ opt[:before] = Doing.original_options[:date_begin] if Doing.original_options[:date_begin].good?
160
+ opt[:after] = Doing.original_options[:date_end] if Doing.original_options[:date_end].good?
161
+ opt[:from] = Doing.original_options[:date_range] if Doing.original_options[:date_range].good?
162
+ Doing.config.save_view(opt.to_view, options[:save].downcase)
163
+ end
159
164
  end
160
165
  end
@@ -25,7 +25,7 @@ command :since do |c|
25
25
 
26
26
  date_string.sub!(/(day) (\d)/, '\1 at \2')
27
27
  date_string.sub!(/(\d+)d( ago)?/, '\1 days ago')
28
-
28
+ Doing.original_options[:date_begin] = date_string
29
29
  start = date_string.chronify(guess: :begin)
30
30
  finish = Time.now
31
31
 
@@ -37,6 +37,9 @@ command :since do |c|
37
37
  options[:sort_tags] = options[:tag_sort]
38
38
 
39
39
  Doing::Pager.page @wwid.list_date([start, finish], options[:section], options[:times], options[:output], options).chomp
40
- Doing.config.save_view(options.to_view, options[:save].downcase) if options[:save]
40
+ if options[:save]
41
+ options[:after] = Doing.original_options[:date_begin] if Doing.original_options[:date_begin].good?
42
+ Doing.config.save_view(options.to_view, options[:save].downcase)
43
+ end
41
44
  end
42
45
  end
@@ -25,6 +25,7 @@ command :today do |c|
25
25
  filter_options = %i[after before times duration from section sort_tags totals tag_order template config_template only_timed].each_with_object({}) { |k, hsh| hsh[k] = options[k] }
26
26
  filter_options[:today] = true
27
27
  Doing::Pager.page @wwid.today(options[:times], options[:output], filter_options).chomp
28
+ filter_options[:title] = options[:title]
28
29
  Doing.config.save_view(filter_options.to_view, options[:save].downcase) if options[:save]
29
30
  end
30
31
  end
@@ -9,39 +9,100 @@ command :views do |c|
9
9
  c.example 'doing views -e -o json color finished', desc: 'edit multiple view configs as JSON'
10
10
 
11
11
  c.desc 'List in single column'
12
- c.switch %i[c column], default_value: false
12
+ c.switch %i[c column], default_value: false, negatable: false
13
13
 
14
14
  c.desc 'Open YAML for view in editor (requires argument)'
15
- c.switch %i[e editor]
15
+ c.switch %i[e editor], negatable: false
16
16
 
17
17
  c.desc 'Output/edit view in alternative format (json, yaml)'
18
18
  c.arg_name 'FORMAT'
19
19
  c.flag %i[o output], must_match: /^[jy]/i, default_value: 'yaml'
20
20
 
21
+ c.desc 'Delete view config'
22
+ c.switch %i[r remove], negatable: false
23
+
21
24
  c.action do |_global_options, options, args|
25
+ cmd = Doing::ViewsCommand.new(options, args, @wwid)
26
+
22
27
  if args.count.positive?
23
- views = {}
24
- args.each { |v| views[v] = @wwid.get_view(v) }
25
-
26
- if options[:editor]
27
- res = if options[:output] =~ /^j/i
28
- JSON.parse(@wwid.fork_editor(JSON.pretty_generate(views), message: nil))
29
- else
30
- YAML.safe_load(@wwid.fork_editor(YAML.dump(views), message: nil))
31
- end
32
- args.each { |v| Doing.set("views.#{v}", res[v]) }
33
- Doing::Util.write_to_file(Doing.config.config_file, YAML.dump(Doing.settings), backup: true)
34
- Doing.logger.warn('Config:', "#{Doing.config.config_file} updated")
35
- elsif options[:output] =~ /^j/i
36
- out = JSON.pretty_generate(views)
37
- Doing::Pager.page out
28
+ if options[:remove]
29
+ cmd.remove_views
30
+ elsif options[:editor]
31
+ cmd.edit_views
38
32
  else
39
- out = YAML.dump(views)
40
- Doing::Pager.page out
33
+ cmd.output_views
41
34
  end
42
35
  else
43
- joiner = options[:column] ? "\n" : "\t"
36
+ cmd.list_views
37
+ end
38
+ end
39
+ end
40
+
41
+ module Doing
42
+ # views Command
43
+ class ViewsCommand
44
+ def initialize(options, args, wwid)
45
+ @options = options
46
+ @args = args
47
+ @wwid = wwid
48
+
49
+ @views = {}
50
+ args.each do |v|
51
+ view = @wwid.get_view(v)
52
+ raise InvalidArgument, 'Unrecognized view' unless view
53
+
54
+ @views[v] = view if view
55
+ end
56
+ end
57
+
58
+ def list_views
59
+ joiner = @options[:column] ? "\n" : "\t"
44
60
  print @wwid.views.join(joiner)
45
61
  end
62
+
63
+ def save_view(view, res)
64
+ val = if res.nil? || !res.key?(view) || res[view]&.empty?
65
+ nil
66
+ else
67
+ res[view]
68
+ end
69
+
70
+ Doing.set("views.#{view}", val)
71
+ end
72
+
73
+ def remove_views
74
+ @args.each do |v|
75
+ Doing.set("views.#{v}", nil)
76
+ end
77
+
78
+ save_config
79
+ end
80
+
81
+ def edit_views
82
+ res = if @options[:output] =~ /^j/i
83
+ JSON.parse(@wwid.fork_editor(JSON.pretty_generate(@views), message: nil))
84
+ else
85
+ YAML.safe_load(@wwid.fork_editor(YAML.dump(@views), message: nil))
86
+ end
87
+ @args.each do |v|
88
+ save_view(v, res)
89
+ end
90
+ save_config
91
+ end
92
+
93
+ def output_views
94
+ out = if @options[:output] =~ /^j/i
95
+ JSON.pretty_generate(@views)
96
+ else
97
+ YAML.dump(@views)
98
+ end
99
+
100
+ Doing::Pager.page out
101
+ end
102
+
103
+ def save_config
104
+ Doing::Util.write_to_file(Doing.config.config_file, YAML.dump(Doing.settings), backup: true)
105
+ Doing.logger.warn('Config:', "#{Doing.config.config_file} updated")
106
+ end
46
107
  end
47
108
  end
data/bin/doing CHANGED
@@ -88,14 +88,33 @@ accept TagSortSymbol do |value|
88
88
  value.normalize_tag_sort(Doing.config.fetch('tag_sort', :name))
89
89
  end
90
90
 
91
+ accept ExportTemplate do |value|
92
+ if value !~ Doing::Plugins.plugin_regex(type: :export)
93
+ raise Doing::Errors::InvalidPlugin.new('output', value)
94
+
95
+ end
96
+
97
+ tpl = nil
98
+
99
+ Doing::Plugins.plugins[:export].each do |k, options|
100
+ next unless value =~ /^(#{options[:trigger].normalize_trigger})$/i
101
+
102
+ tpl = k
103
+ break
104
+ end
105
+
106
+ tpl.nil? ? 'template' : value
107
+ end
108
+
91
109
  accept TemplateName do |value|
92
110
  res = Doing.setting('templates').keys.select { |k| k =~ value.to_rx(distance: 2) }
93
- raise InvalidArgument, "Unknown template: #{value}" unless res.good?
111
+ raise Doing::Errors::InvalidArgument, "Unknown template: #{value}" unless res.good?
94
112
 
95
113
  res.group_by(&:length).min.last[0]
96
114
  end
97
115
 
98
116
  accept DateBeginString do |value|
117
+ Doing.original_options[:date_begin] = value
99
118
  res = if value =~ REGEX_TIME
100
119
  value
101
120
  else
@@ -107,6 +126,7 @@ accept DateBeginString do |value|
107
126
  end
108
127
 
109
128
  accept DateEndString do |value|
129
+ Doing.original_options[:date_end] = value
110
130
  res = if value =~ REGEX_TIME
111
131
  value
112
132
  else
@@ -118,6 +138,7 @@ accept DateEndString do |value|
118
138
  end
119
139
 
120
140
  accept DateRangeString do |value|
141
+ Doing.original_options[:date_range] = value
121
142
  start, finish = value.split_date_range
122
143
  raise InvalidTimeExpression, 'Invalid range' unless start
123
144
 
@@ -126,6 +147,7 @@ accept DateRangeString do |value|
126
147
  end
127
148
 
128
149
  accept DateRangeOptionalString do |value|
150
+ Doing.original_options[:date_range] = value
129
151
  start, finish = value.split_date_range
130
152
  raise InvalidTimeExpression, 'Invalid range' unless start
131
153
 
@@ -133,6 +155,7 @@ accept DateRangeOptionalString do |value|
133
155
  end
134
156
 
135
157
  accept DateIntervalString do |value|
158
+ Doing.original_options[:date_interval] = value
136
159
  res = value.chronify_qty
137
160
  raise InvalidTimeExpression, 'Invalid time quantity' unless res
138
161
 
data/docs/doc/Array.html CHANGED
@@ -106,7 +106,17 @@
106
106
 
107
107
  </div>
108
108
 
109
- <div id="subclasses">
109
+ <h2>Overview</h2><div class="docstring">
110
+ <div class="discussion">
111
+ <p>Array helpers</p>
112
+
113
+
114
+ </div>
115
+ </div>
116
+ <div class="tags">
117
+
118
+
119
+ </div><div id="subclasses">
110
120
  <h2>Direct Known Subclasses</h2>
111
121
  <p class="children"><span class='object_link'><a href="Doing/Items.html" title="Doing::Items (class)">Doing::Items</a></span>, <span class='object_link'><a href="Doing/Note.html" title="Doing::Note (class)">Doing::Note</a></span></p>
112
122
  </div>
@@ -278,7 +288,7 @@ has content</p>
278
288
  </div>
279
289
 
280
290
  <div id="footer">
281
- Generated on Sun Mar 20 12:48:29 2022 by
291
+ Generated on Wed Mar 23 08:25:51 2022 by
282
292
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
283
293
  0.9.27 (ruby-3.0.1).
284
294
  </div>
@@ -283,7 +283,7 @@
283
283
  </div>
284
284
 
285
285
  <div id="footer">
286
- Generated on Sun Mar 20 12:48:30 2022 by
286
+ Generated on Wed Mar 23 08:25:52 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>
@@ -162,7 +162,7 @@
162
162
  </div>
163
163
 
164
164
  <div id="footer">
165
- Generated on Sun Mar 20 12:48:30 2022 by
165
+ Generated on Wed Mar 23 08:25:52 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>
@@ -407,7 +407,7 @@
407
407
  </div>
408
408
 
409
409
  <div id="footer">
410
- Generated on Sun Mar 20 12:48:30 2022 by
410
+ Generated on Wed Mar 23 08:25:52 2022 by
411
411
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
412
412
  0.9.27 (ruby-3.0.1).
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 Sun Mar 20 12:48:30 2022 by
128
+ Generated on Wed Mar 23 08:25:52 2022 by
129
129
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
130
130
  0.9.27 (ruby-3.0.1).
131
131
  </div>
@@ -114,7 +114,7 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Sun Mar 20 12:48:30 2022 by
117
+ Generated on Wed Mar 23 08:25:52 2022 by
118
118
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
119
  0.9.27 (ruby-3.0.1).
120
120
  </div>
@@ -105,7 +105,7 @@
105
105
  </div>
106
106
 
107
107
  <div id="footer">
108
- Generated on Sun Mar 20 12:48:29 2022 by
108
+ Generated on Wed Mar 23 08:25:51 2022 by
109
109
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
110
110
  0.9.27 (ruby-3.0.1).
111
111
  </div>
@@ -306,7 +306,7 @@ removes empty elements</p>
306
306
  </div>
307
307
 
308
308
  <div id="footer">
309
- Generated on Sun Mar 20 12:48:29 2022 by
309
+ Generated on Wed Mar 23 08:25:51 2022 by
310
310
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
311
311
  0.9.27 (ruby-3.0.1).
312
312
  </div>
@@ -188,7 +188,7 @@
188
188
  </div>
189
189
 
190
190
  <div id="footer">
191
- Generated on Sun Mar 20 12:48:29 2022 by
191
+ Generated on Wed Mar 23 08:25:51 2022 by
192
192
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
193
193
  0.9.27 (ruby-3.0.1).
194
194
  </div>
@@ -414,7 +414,7 @@ with</p>
414
414
  </div>
415
415
 
416
416
  <div id="footer">
417
- Generated on Sun Mar 20 12:48:29 2022 by
417
+ Generated on Wed Mar 23 08:25:51 2022 by
418
418
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
419
419
  0.9.27 (ruby-3.0.1).
420
420
  </div>
@@ -256,7 +256,7 @@
256
256
  </div>
257
257
 
258
258
  <div id="footer">
259
- Generated on Sun Mar 20 12:48:30 2022 by
259
+ Generated on Wed Mar 23 08:25:52 2022 by
260
260
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
261
261
  0.9.27 (ruby-3.0.1).
262
262
  </div>
@@ -222,7 +222,7 @@
222
222
  </div>
223
223
 
224
224
  <div id="footer">
225
- Generated on Sun Mar 20 12:48:30 2022 by
225
+ Generated on Wed Mar 23 08:25:52 2022 by
226
226
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
227
227
  0.9.27 (ruby-3.0.1).
228
228
  </div>
@@ -678,7 +678,7 @@
678
678
  </div>
679
679
 
680
680
  <div id="footer">
681
- Generated on Sun Mar 20 12:48:30 2022 by
681
+ Generated on Wed Mar 23 08:25:52 2022 by
682
682
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
683
683
  0.9.27 (ruby-3.0.1).
684
684
  </div>
@@ -458,7 +458,7 @@
458
458
  </div>
459
459
 
460
460
  <div id="footer">
461
- Generated on Sun Mar 20 12:48:30 2022 by
461
+ Generated on Wed Mar 23 08:25:52 2022 by
462
462
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
463
463
  0.9.27 (ruby-3.0.1).
464
464
  </div>
@@ -337,7 +337,7 @@
337
337
  </div>
338
338
 
339
339
  <div id="footer">
340
- Generated on Sun Mar 20 12:48:29 2022 by
340
+ Generated on Wed Mar 23 08:25:51 2022 by
341
341
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
342
342
  0.9.27 (ruby-3.0.1).
343
343
  </div>
@@ -261,7 +261,7 @@ hours into days</p>
261
261
  </div>
262
262
 
263
263
  <div id="footer">
264
- Generated on Sun Mar 20 12:48:29 2022 by
264
+ Generated on Wed Mar 23 08:25:51 2022 by
265
265
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
266
266
  0.9.27 (ruby-3.0.1).
267
267
  </div>
@@ -672,7 +672,7 @@ array</p>
672
672
  </div>
673
673
 
674
674
  <div id="footer">
675
- Generated on Sun Mar 20 12:48:29 2022 by
675
+ Generated on Wed Mar 23 08:25:51 2022 by
676
676
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
677
677
  0.9.27 (ruby-3.0.1).
678
678
  </div>
@@ -664,7 +664,7 @@ ANSI-sequences are stripped from the string.</p>
664
664
  </div>
665
665
 
666
666
  <div id="footer">
667
- Generated on Sun Mar 20 12:48:29 2022 by
667
+ Generated on Wed Mar 23 08:25:50 2022 by
668
668
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
669
669
  0.9.27 (ruby-3.0.1).
670
670
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Sun Mar 20 12:48:30 2022 by
438
+ Generated on Wed Mar 23 08:25:52 2022 by
439
439
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.27 (ruby-3.0.1).
441
441
  </div>
@@ -435,7 +435,7 @@
435
435
  </div>
436
436
 
437
437
  <div id="footer">
438
- Generated on Sun Mar 20 12:48:30 2022 by
438
+ Generated on Wed Mar 23 08:25:52 2022 by
439
439
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
440
440
  0.9.27 (ruby-3.0.1).
441
441
  </div>
@@ -219,7 +219,7 @@
219
219
  </div>
220
220
 
221
221
  <div id="footer">
222
- Generated on Sun Mar 20 12:48:29 2022 by
222
+ Generated on Wed Mar 23 08:25:51 2022 by
223
223
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
224
224
  0.9.27 (ruby-3.0.1).
225
225
  </div>