howzit 2.1.15 → 2.1.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 801a2edf83210d0abd3cf17ab9c9259469429478c48b8245df7475bde19c6676
4
- data.tar.gz: c47dd24e16f255fcbbd0ac5acadb3c57f423bda0237bbbb85b43f8c82e08b0db
3
+ metadata.gz: 4c4fea8cf5770f7beb101c32a4596c4a4d58006d1378c95dd482e95052b2e672
4
+ data.tar.gz: d0e85f76ddf1dc2f02a0bfb7dc85f5495e749aa13bdda0ed773cb8ce11ff8fb7
5
5
  SHA512:
6
- metadata.gz: f8ea4385da70cb5cf7e8d66b5352f164d7cee71b050cf47a544539bf61d0ffd95b4c46f77347b8cf016fd50bd9edf6f7fe1b088fb4f8d324af9343c833334204
7
- data.tar.gz: 7bc8190df842331c74ab4dc0146262b886c1174d3fcf2faef35dc536d0622fe29c2868c4db6e2067e1198c801116d8b67bb0272214cfe8a75dd210a86ec8db66
6
+ metadata.gz: bca6e7eb45d1c69862aa8e7ff25cd9ccf713826a61836d9d515f761eb1aee46ee6e5c90f5dfdbb120b02dcf0700023817a3fd5dd74a9538170188f8c23397eb9
7
+ data.tar.gz: e565bd5ff26d4788a72ecd776d39297ec11b2ffb1290b079496f4fdad3dc7faa4ccfebce8d725d9d503727cc06f4014bea34c6afff3bf70377d051594a033dfb
data/.irbrc CHANGED
@@ -1,6 +1,12 @@
1
1
  # frozen_string_literal: true
2
- `gem rdoc binbundle --ri`
2
+ IRB.conf[:AUTO_INDENT] = true
3
+
4
+ require "irb/completion"
5
+ require_relative "lib/conductor"
3
6
 
4
7
  # rubocop:disable Style/MixinUsage
5
8
  include Howzit # standard:disable all
6
9
  # rubocop:enable Style/MixinUsage
10
+
11
+ require "awesome_print"
12
+ AwesomePrint.irb!
data/.rubocop.yml CHANGED
@@ -22,10 +22,10 @@ Layout/LineLength:
22
22
  Max: 120
23
23
 
24
24
  Metrics/MethodLength:
25
- Max: 40
25
+ Max: 45
26
26
 
27
27
  Metrics/BlockLength:
28
- Max: 40
28
+ Max: 45
29
29
  Exclude:
30
30
  - Rakefile
31
31
  - bin/howzit
@@ -34,9 +34,6 @@ Metrics/BlockLength:
34
34
  Metrics/ClassLength:
35
35
  Max: 300
36
36
 
37
- Metrics/CyclomaticComplexity:
38
- Max: 10
39
-
40
37
  Metrics/PerceivedComplexity:
41
38
  Max: 30
42
39
 
@@ -44,7 +41,7 @@ Metrics/AbcSize:
44
41
  Max: 45
45
42
 
46
43
  Metrics/CyclomaticComplexity:
47
- Max: 15
44
+ Max: 20
48
45
 
49
46
  Style/RegexpLiteral:
50
47
  Exclude:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ### 2.1.18
2
+
3
+ 2025-01-01 09:53
4
+
5
+ #### IMPROVED
6
+
7
+ - Include named arguments when listing runnable topics
8
+
9
+ ### 2.1.16
10
+
11
+ 2024-08-13 10:59
12
+
13
+ #### IMPROVED
14
+
15
+ - Add extra linebreak before @include headers
16
+
1
17
  ### 2.1.15
2
18
 
3
19
  2024-08-07 13:10
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'bump/tasks'
3
+ # require 'bump/tasks'
4
4
  require 'bundler/gem_tasks'
5
5
  require 'rspec/core/rake_task'
6
6
  require 'rubocop/rake_task'
@@ -8,6 +8,13 @@ require 'yard'
8
8
  require 'tty-spinner'
9
9
  require 'rdoc/task'
10
10
 
11
+ module TempFixForRakeLastComment
12
+ def last_comment
13
+ last_description
14
+ end
15
+ end
16
+ Rake::Application.send :include, TempFixForRakeLastComment
17
+
11
18
  Rake::RDocTask.new do |rd|
12
19
  rd.main = 'README.rdoc'
13
20
  rd.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'bin/**/*')
@@ -70,20 +77,28 @@ task :dockertest, :version, :login do |_, args|
70
77
  file = 'docker/Dockerfile'
71
78
  end
72
79
 
73
- puts `docker build . --file #{file} -t #{img}`
80
+ d_spinner = TTY::Spinner.new("[:spinner] Setting up Docker", hide_cursor: true, format: :dots)
81
+ d_spinner.auto_spin
82
+ `docker build . --file #{file} -t #{img} &> /dev/null`
83
+ d_spinner.success
84
+ d_spinner.stop
74
85
 
75
86
  exec "docker run -v #{File.dirname(__FILE__)}:/howzit -it #{img} /bin/bash -l" if args[:login]
76
87
 
77
- spinner = TTY::Spinner.new("[:spinner] Running tests #{img}", hide_cursor: true)
88
+ spinner = TTY::Spinner.new("[:spinner] Running tests #{img}", hide_cursor: true, format: :dots)
78
89
 
79
90
  spinner.auto_spin
80
91
  res = `docker run --rm -v #{File.dirname(__FILE__)}:/howzit -it #{img}`
81
- # commit = puts `bash -c "docker commit $(docker ps -a|grep #{img}|awk '{print $1}'|head -n 1) #{img}"`.strip
82
- spinner.success
92
+ commit = `bash -c "docker commit $(docker ps -a|grep #{img}|awk '{print $1}'|head -n 1) #{img}"`.strip
93
+ if $?.exitstatus == 0
94
+ spinner.success
95
+ else
96
+ spinner.error
97
+ puts res
98
+ end
83
99
  spinner.stop
84
100
 
85
- puts res
86
- # puts commit&.empty? ? "Error commiting Docker tag #{img}" : "Committed Docker tag #{img}"
101
+ puts commit&.empty? ? "Error commiting Docker tag #{img}" : "Committed Docker tag #{img}"
87
102
  end
88
103
 
89
104
  desc 'Alias for build'
data/bin/howzit CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- $LOAD_PATH.unshift File.join(__dir__, '..', 'lib')
5
- require 'howzit'
4
+ $LOAD_PATH.unshift File.join(__dir__, "..", "lib")
5
+ require "howzit"
6
6
 
7
7
  Howzit::Color.coloring = $stdout.isatty
8
8
 
@@ -13,127 +13,127 @@ Howzit.named_arguments = {}
13
13
 
14
14
  OptionParser.new do |opts|
15
15
  opts.banner = "Usage: #{File.basename(__FILE__)} [OPTIONS] [TOPIC]"
16
- opts.separator ''
17
- opts.separator 'Show build notes for the current project (buildnotes.md).
18
- Include a topic name to see just that topic, or no argument to display all.'
19
- opts.separator ''
20
- opts.separator 'Options:'
16
+ opts.separator ""
17
+ opts.separator "Show build notes for the current project (buildnotes.md).
18
+ Include a topic name to see just that topic, or no argument to display all."
19
+ opts.separator ""
20
+ opts.separator "Options:"
21
21
 
22
22
  opts.separator " Behavior:\n\n" #=================================================================== BEHAVIOR
23
23
 
24
- opts.on('--ask', 'Request confirmation for all tasks when running a topic') { Howzit.options[:ask] = true }
24
+ opts.on("--ask", "Request confirmation for all tasks when running a topic") { Howzit.options[:ask] = true }
25
25
 
26
- opts.on('--default', 'Answer all prompts with default response') do
27
- raise '--default cannot be used with --yes or --no' if Howzit.options[:yes] || Howzit.options[:no]
26
+ opts.on("--default", "Answer all prompts with default response") do
27
+ raise "--default cannot be used with --yes or --no" if Howzit.options[:yes] || Howzit.options[:no]
28
28
 
29
29
  Howzit.options[:default] = true
30
30
  end
31
31
 
32
- opts.on('-f', '--force', 'Continue executing after an error') { Howzit.options[:force] = true }
32
+ opts.on("-f", "--force", "Continue executing after an error") { Howzit.options[:force] = true }
33
33
 
34
- opts.on('-m', '--matching TYPE', MATCHING_OPTIONS,
35
- 'Topics matching type', "(#{MATCHING_OPTIONS.join(', ')})") do |c|
34
+ opts.on("-m", "--matching TYPE", MATCHING_OPTIONS,
35
+ "Topics matching type", "(#{MATCHING_OPTIONS.join(", ")})") do |c|
36
36
  Howzit.options[:matching] = c
37
37
  end
38
38
 
39
- opts.on('--multiple TYPE', MULTIPLE_OPTIONS,
40
- 'Multiple result handling', "(#{MULTIPLE_OPTIONS.join(', ')}, default choose)") do |c|
39
+ opts.on("--multiple TYPE", MULTIPLE_OPTIONS,
40
+ "Multiple result handling", "(#{MULTIPLE_OPTIONS.join(", ")}, default choose)") do |c|
41
41
  Howzit.options[:multiple_matches] = c.to_sym
42
42
  end
43
43
 
44
- opts.on('-u', '--[no-]upstream', 'Traverse up parent directories for additional build notes') do |p|
44
+ opts.on("-u", "--[no-]upstream", "Traverse up parent directories for additional build notes") do |p|
45
45
  Howzit.options[:include_upstream] = p
46
46
  end
47
47
 
48
- opts.on('-y', '--yes', 'Answer yes to all prompts') do
49
- raise '--default cannot be used with --yes' if Howzit.options[:default]
48
+ opts.on("-y", "--yes", "Answer yes to all prompts") do
49
+ raise "--default cannot be used with --yes" if Howzit.options[:default]
50
50
 
51
51
  Howzit.options[:yes] = true
52
52
  end
53
53
 
54
- opts.on('-n', '--no', 'Answer no to all prompts') do
55
- raise '--default cannot be used with --no' if Howzit.options[:default]
54
+ opts.on("-n", "--no", "Answer no to all prompts") do
55
+ raise "--default cannot be used with --no" if Howzit.options[:default]
56
56
 
57
57
  Howzit.options[:no] = true
58
58
  end
59
59
 
60
60
  opts.separator "\n Listing:\n\n" #=================================================================== LISTING
61
61
 
62
- opts.on('-L', '--list-completions', 'List topics (completion-compatible)') do
62
+ opts.on("-L", "--list-completions", "List topics (completion-compatible)") do
63
63
  Howzit.options[:list_topics] = true
64
64
  Howzit.options[:list_topic_titles] = true
65
65
  end
66
66
 
67
- opts.on('-l', '--list', 'List available topics') do
67
+ opts.on("-l", "--list", "List available topics") do
68
68
  Howzit.options[:list_topics] = true
69
69
  end
70
70
 
71
- opts.on('-R', '--list-runnable [PATTERN]', 'List topics containing @ directives (verbose)') do |pat|
71
+ opts.on("-R", "--list-runnable [PATTERN]", "List topics containing @ directives (verbose)") do |pat|
72
72
  Howzit.options[:for_topic] = pat
73
73
  Howzit.options[:list_runnable] = true
74
74
  end
75
75
 
76
- opts.on('-T', '--task-list', 'List topics containing @ directives (completion-compatible)') do
76
+ opts.on("-T", "--task-list", "List topics containing @ directives (completion-compatible)") do
77
77
  Howzit.options[:list_runnable] = true
78
78
  Howzit.options[:list_runnable_titles] = true
79
79
  end
80
80
 
81
- opts.on('--templates', 'List available templates') do
81
+ opts.on("--templates", "List available templates") do
82
82
  out = []
83
83
  Dir.chdir(Howzit.config.template_folder)
84
- Dir.glob('*.md').each do |file|
85
- template = File.basename(file, '.md')
84
+ Dir.glob("*.md").each do |file|
85
+ template = File.basename(file, ".md")
86
86
  out.push(Howzit::Color.template("{Mk}template:{Yk}#{template}{x}"))
87
- out.push(Howzit::Color.template('{bk}[{bl}tasks{bk}]──────────────────────────────────────┐{x}'))
87
+ out.push(Howzit::Color.template("{bk}[{bl}tasks{bk}]──────────────────────────────────────┐{x}"))
88
88
  metadata = file.extract_metadata
89
89
  topics = Howzit::BuildNote.new(file: file).topics
90
90
  topics.each do |topic|
91
- out.push(Howzit::Color.template(" {bk}│{bw}-{x} {bcK}#{template}:#{topic.title.sub(/^.*?:/, '')}{x}"))
91
+ out.push(Howzit::Color.template(" {bk}│{bw}-{x} {bcK}#{template}:#{topic.title.sub(/^.*?:/, "")}{x}"))
92
92
  end
93
93
  unless metadata.empty?
94
94
  meta = []
95
- meta << metadata['required'].split(/\s*,\s*/).map { |m| "*{bw}#{m}{xw}" } if metadata.key?('required')
96
- meta << metadata['optional'].split(/\s*,\s*/).map(&:to_s) if metadata.key?('optional')
97
- out.push(Howzit::Color.template('{bk}[{bl}meta{bk}]───────────────────────────────────────┤{x}'))
98
- out.push(Howzit::Color.template(" {bk}│ {xw}#{meta.join(', ')}{x}"))
95
+ meta << metadata["required"].split(/\s*,\s*/).map { |m| "*{bw}#{m}{xw}" } if metadata.key?("required")
96
+ meta << metadata["optional"].split(/\s*,\s*/).map(&:to_s) if metadata.key?("optional")
97
+ out.push(Howzit::Color.template("{bk}[{bl}meta{bk}]───────────────────────────────────────┤{x}"))
98
+ out.push(Howzit::Color.template(" {bk}│ {xw}#{meta.join(", ")}{x}"))
99
99
  end
100
- out.push(Howzit::Color.template(' {bk}└───────────────────────────────────────────┘{x}'))
100
+ out.push(Howzit::Color.template(" {bk}└───────────────────────────────────────────┘{x}"))
101
101
  end
102
102
  Howzit::Util.page out.join("\n")
103
103
  Process.exit 0
104
104
  end
105
105
 
106
- opts.on('--templates-c', 'List available templates in a format for completion') do
106
+ opts.on("--templates-c", "List available templates in a format for completion") do
107
107
  out = []
108
108
  Dir.chdir(Howzit.config.template_folder)
109
- Dir.glob('*.md').each do |file|
110
- template = File.basename(file, '.md')
109
+ Dir.glob("*.md").each do |file|
110
+ template = File.basename(file, ".md")
111
111
  out.push(template)
112
112
  end
113
113
  puts out.join("\n")
114
114
  Process.exit 0
115
115
  end
116
116
 
117
- opts.on('--title-only', 'Output title only') do
117
+ opts.on("--title-only", "Output title only") do
118
118
  Howzit.options[:output_title] = true
119
119
  Howzit.options[:title_only] = true
120
120
  end
121
121
 
122
122
  opts.separator("\n Commands:\n\n") #=================================================================== COMMANDS
123
123
 
124
- opts.on('-c', '--create', 'Create a skeleton build note in the current working directory') do
124
+ opts.on("-c", "--create", "Create a skeleton build note in the current working directory") do
125
125
  Howzit.buildnote.create_note
126
126
  Process.exit 0
127
127
  end
128
128
 
129
- opts.on('--config-get [KEY]', 'Display the configuration settings or setting for a specific key') do |k|
129
+ opts.on("--config-get [KEY]", "Display the configuration settings or setting for a specific key") do |k|
130
130
  if k.nil?
131
131
  Howzit::Config::DEFAULTS.sort_by { |key, _| key }.each do |key, _|
132
132
  print "#{key}: "
133
133
  p Howzit.options[key]
134
134
  end
135
135
  else
136
- k.sub!(/^:/, '')
136
+ k.sub!(/^:/, "")
137
137
  if Howzit.options.key?(k.to_sym)
138
138
  puts Howzit.options[k.to_sym]
139
139
  else
@@ -143,12 +143,12 @@ OptionParser.new do |opts|
143
143
  Process.exit 0
144
144
  end
145
145
 
146
- opts.on('--config-set KEY=VALUE', 'Set a config value (must be a valid key)') do |key|
147
- raise 'Argument must be KEY=VALUE' unless key =~ /\S=\S/
146
+ opts.on("--config-set KEY=VALUE", "Set a config value (must be a valid key)") do |key|
147
+ raise "Argument must be KEY=VALUE" unless key =~ /\S=\S/
148
148
 
149
149
  parts = key.split(/=/)
150
- k = parts.shift.sub(/^:/, '')
151
- v = parts.join(' ')
150
+ k = parts.shift.sub(/^:/, "")
151
+ v = parts.join(" ")
152
152
 
153
153
  if Howzit.options.key?(k.to_sym)
154
154
  Howzit.options[k.to_sym] = v.to_config_value(Howzit.options[k.to_sym])
@@ -160,103 +160,103 @@ OptionParser.new do |opts|
160
160
  end
161
161
 
162
162
  desc = %(Edit buildnotes file in current working directory using default editor)
163
- opts.on('-e', '--edit', desc) do
163
+ opts.on("-e", "--edit", desc) do
164
164
  Howzit.buildnote.edit
165
165
  Process.exit 0
166
166
  end
167
167
 
168
- opts.on('--edit-config', "Edit configuration file using default editor") do
168
+ opts.on("--edit-config", "Edit configuration file using default editor") do
169
169
  Howzit.config.editor
170
170
  Process.exit 0
171
171
  end
172
172
 
173
- opts.on('--edit-template NAME', 'Create or edit a template') do |template|
173
+ opts.on("--edit-template NAME", "Create or edit a template") do |template|
174
174
  Howzit.buildnote.edit_template(template)
175
175
  Process.exit 0
176
176
  end
177
177
 
178
- opts.on('--grep PATTERN', 'Display sections matching a search pattern') do |pat|
178
+ opts.on("--grep PATTERN", "Display sections matching a search pattern") do |pat|
179
179
  Howzit.options[:grep] = pat
180
180
  end
181
181
 
182
- opts.on('--hook', 'Copy a link to the build note file, ready for pasting into Hook.app or other notes') do
182
+ opts.on("--hook", "Copy a link to the build note file, ready for pasting into Hook.app or other notes") do
183
183
  Howzit.buildnote.hook
184
184
  Process.exit 0
185
185
  end
186
186
 
187
- opts.on('-r', '--run', 'Execute @run, @open, and/or @copy commands for given topic') do
187
+ opts.on("-r", "--run", "Execute @run, @open, and/or @copy commands for given topic") do
188
188
  Howzit.options[:run] = true
189
189
  end
190
190
 
191
- opts.on('-s', '--select', 'Select topic from menu') do
191
+ opts.on("-s", "--select", "Select topic from menu") do
192
192
  Howzit.options[:choose] = true
193
193
  end
194
194
 
195
195
  opts.separator("\n Formatting:\n\n") #=================================================================== FORMATTING
196
196
 
197
- opts.on('--[no-]color', 'Colorize output (default on)') do |c|
197
+ opts.on("--[no-]color", "Colorize output (default on)") do |c|
198
198
  Howzit.options[:color] = c
199
199
  Howzit.options[:highlight] = false unless c
200
200
  end
201
201
 
202
- opts.on('--header-format TYPE', HEADER_FORMAT_OPTIONS,
203
- "Formatting style for topic titles (#{HEADER_FORMAT_OPTIONS.join(', ')})") do |t|
202
+ opts.on("--header-format TYPE", HEADER_FORMAT_OPTIONS,
203
+ "Formatting style for topic titles (#{HEADER_FORMAT_OPTIONS.join(", ")})") do |t|
204
204
  Howzit.options[:header_format] = t
205
205
  end
206
206
 
207
- opts.on('--[no-]md-highlight', 'Highlight Markdown syntax (default on), requires mdless or mdcat') do |m|
207
+ opts.on("--[no-]md-highlight", "Highlight Markdown syntax (default on), requires mdless or mdcat") do |m|
208
208
  Howzit.options[:highlight] = Howzit.options[:color] ? m : false
209
209
  end
210
210
 
211
- opts.on('--[no-]pager', 'Paginate output (default on)') do |p|
211
+ opts.on("--[no-]pager", "Paginate output (default on)") do |p|
212
212
  Howzit.options[:paginate] = p
213
213
  end
214
214
 
215
- opts.on('--show-code', 'Display the content of fenced run blocks') do
215
+ opts.on("--show-code", "Display the content of fenced run blocks") do
216
216
  Howzit.options[:show_all_code] = true
217
217
  end
218
218
 
219
- opts.on('-t', '--title', 'Output title with build notes') do
219
+ opts.on("-t", "--title", "Output title with build notes") do
220
220
  Howzit.options[:output_title] = true
221
221
  end
222
222
 
223
- opts.on('-w', '--wrap COLUMNS', 'Wrap to specified width (default 80, 0 to disable)') do |w|
223
+ opts.on("-w", "--wrap COLUMNS", "Wrap to specified width (default 80, 0 to disable)") do |w|
224
224
  Howzit.options[:wrap] = w.to_i
225
225
  end
226
226
 
227
227
  opts.separator("\n Logging:\n\n") #=================================================================== LOGGING
228
228
 
229
- opts.on('-d', '--debug', 'Show debug messages (and all messages)') do
229
+ opts.on("-d", "--debug", "Show debug messages (and all messages)") do
230
230
  Howzit.options[:log_level] = 0
231
231
  Howzit.console.reset_level
232
232
  end
233
233
 
234
- opts.on('-q', '--quiet', 'Silence info message') do
234
+ opts.on("-q", "--quiet", "Silence info message") do
235
235
  Howzit.options[:log_level] = 4
236
236
  Howzit.console.reset_level
237
237
  end
238
238
 
239
- opts.on('--verbose', 'Show all messages') do
239
+ opts.on("--verbose", "Show all messages") do
240
240
  Howzit.options[:log_level] = 1
241
241
  Howzit.console.reset_level
242
242
  end
243
243
 
244
244
  opts.separator("\n Misc:\n\n") #=================================================================== MISC
245
245
 
246
- opts.on('-h', '--help', 'Display this screen') do
246
+ opts.on("-h", "--help", "Display this screen") do
247
247
  Howzit::Util.page opts.to_s
248
248
  Process.exit 0
249
249
  end
250
250
 
251
- opts.on('-v', '--version', 'Display version number') do
251
+ opts.on("-v", "--version", "Display version number") do
252
252
  puts "#{File.basename(__FILE__)} v#{Howzit::VERSION}"
253
253
  Process.exit 0
254
254
  end
255
255
  end.parse!(args)
256
256
 
257
- trap('INT') do
257
+ trap("INT") do
258
258
  puts
259
- puts 'Cancelled'
259
+ puts "Cancelled"
260
260
  Process.exit 0
261
261
  end
262
262
 
data/howzit.gemspec CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path(File.join('..', 'lib'), __FILE__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require 'howzit/version'
@@ -8,7 +10,9 @@ Gem::Specification.new do |spec|
8
10
  spec.authors = ['Brett Terpstra']
9
11
  spec.email = ['me@brettterpstra.com']
10
12
  spec.description = 'Command line project documentation and task runner'
11
- spec.summary = 'Provides a way to access Markdown project notes by topic with query capabilities and the ability to execute the tasks it describes.'
13
+ spec.summary = ['Provides a way to access Markdown project notes by topic',
14
+ 'with query capabilities and the ability to execute the',
15
+ 'tasks it describes.'].join(' ')
12
16
  spec.homepage = 'https://github.com/ttscoff/howzit'
13
17
  spec.license = 'MIT'
14
18
 
@@ -20,28 +24,27 @@ Gem::Specification.new do |spec|
20
24
  spec.required_ruby_version = '>= 2.6.0'
21
25
 
22
26
  spec.add_development_dependency 'bundler', '~> 2.2'
23
- spec.add_development_dependency 'rake', '~> 11.2'
24
- spec.add_development_dependency 'bump', '~> 0.5'
27
+ spec.add_development_dependency 'rake', '~> 13.0'
25
28
 
26
29
  spec.add_development_dependency 'guard', '~> 2.11'
27
- spec.add_development_dependency 'guard-yard', '~> 2.1'
28
- spec.add_development_dependency 'guard-rubocop', '~> 1.2'
29
30
  spec.add_development_dependency 'guard-rspec', '~> 4.5'
31
+ spec.add_development_dependency 'guard-rubocop', '~> 1.2'
32
+ spec.add_development_dependency 'guard-yard', '~> 2.1'
30
33
 
31
- spec.add_development_dependency 'rubocop', '~> 0.28'
32
- spec.add_development_dependency 'rspec', '~> 3.1'
33
34
  spec.add_development_dependency 'cli-test', '~> 1.0'
35
+ spec.add_development_dependency 'rspec', '~> 3.13'
36
+ spec.add_development_dependency 'rubocop', '~> 0.28'
34
37
  spec.add_development_dependency 'simplecov', '~> 0.9'
35
38
  # spec.add_development_dependency 'codecov', '~> 0.1'
36
39
  spec.add_development_dependency 'fuubar', '~> 2.0'
37
40
 
38
- spec.add_development_dependency 'yard', '~> 0.9.5'
39
- spec.add_development_dependency 'redcarpet', '~> 3.2'
40
41
  spec.add_development_dependency 'github-markup', '~> 1.3'
42
+ spec.add_development_dependency 'redcarpet', '~> 3.2'
41
43
  spec.add_development_dependency 'tty-spinner', '~> 0.9'
44
+ spec.add_development_dependency 'yard', '~> 0.9.5'
42
45
 
43
46
  spec.add_runtime_dependency 'mdless', '~> 1.0', '>= 1.0.28'
44
- spec.add_runtime_dependency 'tty-screen', '~> 0.8'
45
47
  spec.add_runtime_dependency 'tty-box', '~> 0.7'
48
+ spec.add_runtime_dependency 'tty-screen', '~> 0.8'
46
49
  # spec.add_runtime_dependency 'tty-prompt', '~> 0.23'
47
50
  end
@@ -21,7 +21,7 @@ module Howzit
21
21
  content = Util.read_file(file)
22
22
  raise "{br}No content found in build note (#{file}){x}".c if content.nil? || content.empty?
23
23
 
24
- this_meta = content.split(/^#/)[0].strip.get_metadata
24
+ this_meta = content.split(/^#/)[0].strip.metadata
25
25
 
26
26
  @metadata = meta.nil? ? this_meta : meta.merge(this_meta)
27
27
 
@@ -57,7 +57,7 @@ module Howzit
57
57
  ## @param template [String] The template title
58
58
  ##
59
59
  def edit_template(template)
60
- file = template.sub(/(\.md)?$/i, '.md')
60
+ file = template.sub(/(\.md)?$/i, ".md")
61
61
  file = File.join(Howzit.config.template_folder, file)
62
62
  edit_template_file(file)
63
63
  end
@@ -72,7 +72,7 @@ module Howzit
72
72
 
73
73
  @topics.filter do |topic|
74
74
  rx = term.to_rx
75
- topic.title.downcase.sub(/ *\(.*?\) *$/, '') =~ rx
75
+ topic.title.downcase.sub(/ *\(.*?\) *$/, "") =~ rx
76
76
  end
77
77
  end
78
78
 
@@ -84,7 +84,7 @@ module Howzit
84
84
  title = "#{title} project notes"
85
85
  url = "[#{title}](file://#{note_file})"
86
86
  Util.os_copy(url)
87
- Howzit.console.info('Link copied to clipboard.')
87
+ Howzit.console.info("Link copied to clipboard.")
88
88
  end
89
89
 
90
90
  ##
@@ -115,7 +115,13 @@ module Howzit
115
115
  ## @return [Array] array of topic titles
116
116
  ##
117
117
  def list_topics
118
- @topics.map(&:title)
118
+ @topics.map do |topic|
119
+ title = topic.title
120
+ unless topic.named_args.empty?
121
+ title += "(#{topic.named_args.keys.join(", ")})"
122
+ end
123
+ title
124
+ end
119
125
  end
120
126
 
121
127
  ##
@@ -137,7 +143,13 @@ module Howzit
137
143
  def list_runnable_completions
138
144
  output = []
139
145
  @topics.each do |topic|
140
- output.push(topic.title) if topic.tasks.count.positive?
146
+ if topic.tasks.count.positive?
147
+ title = topic.title
148
+ unless topic.named_args.empty?
149
+ title += "(#{topic.named_args.keys.join(", ")})"
150
+ end
151
+ output.push(title)
152
+ end
141
153
  end
142
154
  output.join("\n")
143
155
  end
@@ -159,7 +171,12 @@ module Howzit
159
171
 
160
172
  next if s_out.empty?
161
173
 
162
- output.push("- {bw}#{topic.title}{x}".c)
174
+ title = topic.title
175
+ unless topic.named_args.empty?
176
+ title += " {dy}({xy}#{topic.named_args.keys.join(", ")}{dy}){x}"
177
+ end
178
+
179
+ output.push("- {g}#{title}{x}".c)
163
180
  output.push(s_out.join("\n"))
164
181
  end
165
182
 
@@ -182,7 +199,7 @@ module Howzit
182
199
  ## @param prompt [Boolean] confirm file creation?
183
200
  ##
184
201
  def create_template_file(file, prompt: false)
185
- trap('SIGINT') do
202
+ trap("SIGINT") do
186
203
  Howzit.console.info "\nCancelled"
187
204
  exit!
188
205
  end
@@ -194,7 +211,7 @@ module Howzit
194
211
  Process.exit 0 unless res
195
212
  end
196
213
 
197
- title = File.basename(file, '.md')
214
+ title = File.basename(file, ".md")
198
215
 
199
216
  note = <<~EOBUILDNOTES
200
217
  # #{title}
@@ -206,12 +223,12 @@ module Howzit
206
223
  if File.exist?(file) && !default
207
224
  file = "{by}#{file}".c
208
225
  unless Prompt.yn("Are you sure you want to overwrite #{file}", default: false)
209
- Howzit.console.info('Cancelled')
226
+ Howzit.console.info("Cancelled")
210
227
  Process.exit 0
211
228
  end
212
229
  end
213
230
 
214
- File.open(file, 'w') do |f|
231
+ File.open(file, "w") do |f|
215
232
  f.puts note
216
233
  Howzit.console.info("{by}Template {bw}#{title}{by} written to {bw}#{file}{x}".c)
217
234
  end
@@ -226,7 +243,7 @@ module Howzit
226
243
 
227
244
  # Create a buildnotes skeleton
228
245
  def create_note(prompt: false)
229
- trap('SIGINT') do
246
+ trap("SIGINT") do
230
247
  Howzit.console.info "\nCancelled"
231
248
  exit!
232
249
  end
@@ -234,7 +251,7 @@ module Howzit
234
251
  default = !$stdout.isatty || Howzit.options[:default]
235
252
 
236
253
  if prompt && !default
237
- res = Prompt.yn('No build notes file found, create one?', default: true)
254
+ res = Prompt.yn("No build notes file found, create one?", default: true)
238
255
  Process.exit 0 unless res
239
256
  end
240
257
 
@@ -257,14 +274,14 @@ module Howzit
257
274
  input = $stdin.gets.chomp
258
275
  title = input unless input.empty?
259
276
  end
260
- summary = ''
277
+ summary = ""
261
278
  unless default
262
- printf '{bw}Project summary: {x}'.c
279
+ printf "{bw}Project summary: {x}".c
263
280
  input = $stdin.gets.chomp
264
281
  summary = input unless input.empty?
265
282
  end
266
283
 
267
- fname = 'buildnotes.md'
284
+ fname = "buildnotes.md"
268
285
  unless default
269
286
  printf "{bw}Build notes filename (must begin with 'howzit' or 'build')\n{xg}[#{fname}]{bw}: {x}".c
270
287
  input = $stdin.gets.chomp
@@ -299,12 +316,12 @@ module Howzit
299
316
  if File.exist?(fname) && !default
300
317
  file = "{by}#{fname}".c
301
318
  unless Prompt.yn("Are you absolutely sure you want to overwrite #{file}", default: false)
302
- Howzit.console.info('Canceled')
319
+ Howzit.console.info("Canceled")
303
320
  Process.exit 0
304
321
  end
305
322
  end
306
323
 
307
- File.open(fname, 'w') do |f|
324
+ File.open(fname, "w") do |f|
308
325
  f.puts note
309
326
  Howzit.console.info("{by}Build notes for {bw}#{title}{by} written to {bw}#{fname}{x}".c)
310
327
  end
@@ -340,15 +357,15 @@ module Howzit
340
357
  return mtch[0] unless File.exist?(file)
341
358
 
342
359
  content = Util.read_file(file)
343
- home = ENV['HOME']
344
- short_path = File.dirname(file.sub(/^#{home}/, '~'))
360
+ home = ENV["HOME"]
361
+ short_path = File.dirname(file.sub(/^#{home}/, "~"))
345
362
  prefix = "#{short_path}/#{File.basename(file)}:"
346
363
  parts = content.split(/^##+/)
347
364
  parts.shift
348
365
  if parts.empty?
349
366
  content
350
367
  else
351
- "## #{parts.join('## ')}".gsub(/^(##+ *)(?=\S)/, "\\1#{prefix}")
368
+ "## #{parts.join("## ")}".gsub(/^(##+ *)(?=\S)/, "\\1#{prefix}")
352
369
  end
353
370
  end
354
371
 
@@ -363,17 +380,17 @@ module Howzit
363
380
  t_leader = Util.read_file(template).split(/^#/)[0].strip
364
381
  return unless t_leader.length.positive?
365
382
 
366
- t_meta = t_leader.get_metadata
383
+ t_meta = t_leader.metadata
367
384
 
368
- return unless t_meta.key?('required')
385
+ return unless t_meta.key?("required")
369
386
 
370
- required = t_meta['required'].strip.split(/\s*,\s*/)
387
+ required = t_meta["required"].strip.split(/\s*,\s*/)
371
388
  required.each do |req|
372
389
  next if @metadata.keys.include?(req.downcase)
373
390
 
374
391
  Howzit.console.error %({bRw}ERROR:{xbr} Missing required metadata key from template '{bw}#{File.basename(
375
- template, '.md'
376
- )}{xr}'{x}).c
392
+ template, ".md"
393
+ )}{xr}'{x}).c
377
394
  Howzit.console.error %({br}Please define {by}#{req.downcase}{xr} in build notes{x}).c
378
395
  Process.exit 1
379
396
  end
@@ -391,8 +408,8 @@ module Howzit
391
408
  subtopics = nil
392
409
 
393
410
  if template =~ /\[(.*?)\]$/
394
- subtopics = Regexp.last_match[1].split(/\s*\|\s*/).map { |t| t.gsub(/\*/, '.*?') }
395
- template.sub!(/\[.*?\]$/, '').strip
411
+ subtopics = Regexp.last_match[1].split(/\s*\|\s*/).map { |t| t.gsub(/\*/, ".*?") }
412
+ template.sub!(/\[.*?\]$/, "").strip
396
413
  end
397
414
 
398
415
  [template, subtopics]
@@ -412,7 +429,7 @@ module Howzit
412
429
  templates.each do |template|
413
430
  template, subtopics = detect_subtopics(template)
414
431
 
415
- file = template.sub(/(\.md)?$/i, '.md')
432
+ file = template.sub(/(\.md)?$/i, ".md")
416
433
  file = File.join(Howzit.config.template_folder, file)
417
434
 
418
435
  next unless File.exist?(file)
@@ -476,7 +493,7 @@ module Howzit
476
493
  buildnotes = []
477
494
  filename = nil
478
495
 
479
- while dir != '/' && (dir =~ %r{[A-Z]:/}).nil?
496
+ while dir != "/" && (dir =~ %r{[A-Z]:/}).nil?
480
497
  Dir.chdir(dir)
481
498
  filename = glob_note
482
499
  unless filename.nil?
@@ -499,7 +516,7 @@ module Howzit
499
516
  ## @return [String] file path
500
517
  ##
501
518
  def glob_note
502
- Dir.glob('*.{txt,md,markdown}').select(&:build_note?).sort[0]
519
+ Dir.glob("*.{txt,md,markdown}").select(&:build_note?).sort[0]
503
520
  end
504
521
 
505
522
  ##
@@ -512,9 +529,9 @@ module Howzit
512
529
  def find_note_file
513
530
  filename = glob_note
514
531
 
515
- if filename.nil? && 'git'.available?
532
+ if filename.nil? && "git".available?
516
533
  proj_dir = `git rev-parse --show-toplevel 2>/dev/null`.strip
517
- unless proj_dir == ''
534
+ unless proj_dir == ""
518
535
  Dir.chdir(proj_dir)
519
536
  filename = glob_note
520
537
  end
@@ -556,10 +573,10 @@ module Howzit
556
573
 
557
574
  return template_topics if leader.empty?
558
575
 
559
- data = leader.get_metadata
576
+ data = leader.metadata
560
577
 
561
- if data.key?('template')
562
- templates = data['template'].strip.split(/\s*,\s*/)
578
+ if data.key?("template")
579
+ templates = data["template"].strip.split(/\s*,\s*/)
563
580
 
564
581
  template_topics.concat(gather_templates(templates))
565
582
  end
@@ -601,13 +618,13 @@ module Howzit
601
618
 
602
619
  lines = sect.split(/\n/)
603
620
  title = lines.slice!(0).strip
604
- prefix = ''
621
+ prefix = ""
605
622
  if path && path != note_file
606
623
  if path =~ /#{Howzit.config.template_folder}/
607
- short_path = File.basename(path, '.md')
624
+ short_path = File.basename(path, ".md")
608
625
  else
609
- home = ENV['HOME']
610
- short_path = File.dirname(path.sub(/^#{home}/, '~'))
626
+ home = ENV["HOME"]
627
+ short_path = File.dirname(path.sub(/^#{home}/, "~"))
611
628
  prefix = "_from #{short_path}_\n\n"
612
629
  end
613
630
  title = "#{short_path}:#{title}"
@@ -619,7 +636,7 @@ module Howzit
619
636
  end
620
637
 
621
638
  template_topics.each do |topic|
622
- topics.push(topic) unless find_topic(topic.title.sub(/^.+:/, '')).count.positive?
639
+ topics.push(topic) unless find_topic(topic.title.sub(/^.+:/, "")).count.positive?
623
640
  end
624
641
 
625
642
  topics
@@ -638,7 +655,7 @@ module Howzit
638
655
  upstream_topics = read_upstream
639
656
 
640
657
  upstream_topics.each do |topic|
641
- @topics.push(topic) unless find_topic(topic.title.sub(/^.+:/, '')).count.positive?
658
+ @topics.push(topic) unless find_topic(topic.title.sub(/^.+:/, "")).count.positive?
642
659
  end
643
660
  Howzit.has_read_upstream = true
644
661
  end
@@ -653,11 +670,11 @@ module Howzit
653
670
  ## Open build note in editor
654
671
  ##
655
672
  def edit_note
656
- editor = Howzit.options.fetch(:editor, ENV['EDITOR'])
673
+ editor = Howzit.options.fetch(:editor, ENV["EDITOR"])
657
674
 
658
675
  editor = Howzit.config.update_editor if editor.nil?
659
676
 
660
- raise 'No editor defined' if editor.nil?
677
+ raise "No editor defined" if editor.nil?
661
678
 
662
679
  raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
663
680
 
@@ -671,7 +688,7 @@ module Howzit
671
688
  ## @param template [String] The template name
672
689
  ##
673
690
  def create_template(template)
674
- file = template.sub(/(\.md)?$/i, '.md')
691
+ file = template.sub(/(\.md)?$/i, ".md")
675
692
  file = File.join(Howzit.config.template_folder, file)
676
693
  create_template_file(file, prompt: false)
677
694
  end
@@ -680,11 +697,11 @@ module Howzit
680
697
  ## Open template in editor
681
698
  ##
682
699
  def edit_template_file(file)
683
- editor = Howzit.options.fetch(:editor, ENV['EDITOR'])
700
+ editor = Howzit.options.fetch(:editor, ENV["EDITOR"])
684
701
 
685
702
  editor = Howzit.config.update_editor if editor.nil?
686
703
 
687
- raise 'No editor defined' if editor.nil?
704
+ raise "No editor defined" if editor.nil?
688
705
 
689
706
  raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
690
707
 
@@ -705,12 +722,12 @@ module Howzit
705
722
  new_topic = topic.is_a?(String) ? find_topic(topic)[0] : topic.dup
706
723
 
707
724
  output = if run
708
- new_topic.run
709
- else
710
- new_topic.print_out({ single: single })
711
- end
725
+ new_topic.run
726
+ else
727
+ new_topic.print_out({ single: single })
728
+ end
712
729
 
713
- output.nil? ? '' : output.join("\n\n")
730
+ output.nil? ? "" : output.join("\n\n")
714
731
  end
715
732
 
716
733
  ##
@@ -731,7 +748,7 @@ module Howzit
731
748
  Process.exit(0)
732
749
  elsif Howzit.options[:output_title] && !Howzit.options[:run]
733
750
  if @title && !@title.empty?
734
- header = @title.format_header({ hr: "\u{2550}", color: '{bwK}' })
751
+ header = @title.format_header({ hr: "\u{2550}", color: "{bwK}" })
735
752
  output.push("#{header}\n")
736
753
  end
737
754
  end
@@ -770,9 +787,9 @@ module Howzit
770
787
  elsif Howzit.options[:choose]
771
788
  titles = Prompt.choose(list_topics, height: :max)
772
789
  titles.each { |title| topic_matches.push(find_topic(title)[0]) }
773
- # If there are arguments use those to search for a matching topic
790
+ # If there are arguments use those to search for a matching topic
774
791
  elsif !Howzit.cli_args.empty?
775
- search = Howzit.cli_args.join(' ').strip.downcase.split(/ *, */).map(&:strip)
792
+ search = Howzit.cli_args.join(" ").strip.downcase.split(/ *, */).map(&:strip)
776
793
 
777
794
  search.each do |s|
778
795
  matches = find_topic(s)
@@ -791,7 +808,7 @@ module Howzit
791
808
  titles = matches.map(&:title)
792
809
  res = Prompt.choose(titles)
793
810
  old_matching = Howzit.options[:matching]
794
- Howzit.options[:matching] = 'exact'
811
+ Howzit.options[:matching] = "exact"
795
812
  res.each { |title| topic_matches.concat(find_topic(title)) }
796
813
  Howzit.options[:matching] = old_matching
797
814
  end
data/lib/howzit/colors.rb CHANGED
@@ -5,7 +5,7 @@ module Howzit
5
5
  # Terminal output color functions.
6
6
  module Color
7
7
  # Regexp to match excape sequences
8
- ESCAPE_REGEX = /(?<=\[)(?:(?:(?:[349]|10)[0-9]|[0-9])?;?)+(?=m)/
8
+ ESCAPE_REGEX = /(?<=\[)(?:(?:(?:[349]|10)[0-9]|[0-9])?;?)+(?=m)/.freeze
9
9
 
10
10
  # All available color names. Available as methods and string extensions.
11
11
  #
@@ -361,7 +361,7 @@ module Howzit
361
361
 
362
362
  # Regular expression that is used to scan for ANSI-sequences while
363
363
  # uncoloring strings.
364
- COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9])?m/
364
+ COLORED_REGEXP = /\e\[(?:(?:[349]|10)[0-7]|[0-9])?m/.freeze
365
365
 
366
366
  # Returns an uncolored version of the string, that is all
367
367
  # ANSI-sequences are stripped from the string.
data/lib/howzit/config.rb CHANGED
@@ -132,7 +132,7 @@ module Howzit
132
132
  puts 'No $EDITOR defined, no value in config'
133
133
  editor = Prompt.read_editor
134
134
  if editor.nil?
135
- 'Cancelled, no editor stored.'
135
+ puts 'Cancelled, no editor stored.'
136
136
  Process.exit 1
137
137
  end
138
138
  update_config_option({ config_editor: editor, editor: editor })
@@ -38,7 +38,7 @@ module Howzit
38
38
  position = 0
39
39
  in_order = 0
40
40
  chars.each do |char|
41
- new_pos = self[position..] =~ /#{char}/i
41
+ new_pos = self[position..-1] =~ /#{char}/i
42
42
  if new_pos
43
43
  position += new_pos
44
44
  in_order += 1
@@ -350,14 +350,14 @@ module Howzit
350
350
  ##
351
351
  ## Split the content at the first top-level header and
352
352
  ## assume everything before it is metadata. Passes to
353
- ## #get_metadata for processing
353
+ ## #metadata for processing
354
354
  ##
355
355
  ## @return [Hash] key/value pairs
356
356
  ##
357
357
  def extract_metadata
358
358
  if File.exist?(self)
359
359
  leader = Util.read_file(self).split(/^#/)[0].strip
360
- leader.length.positive? ? leader.get_metadata : {}
360
+ leader.length.positive? ? leader.metadata : {}
361
361
  else
362
362
  {}
363
363
  end
@@ -368,7 +368,7 @@ module Howzit
368
368
  ##
369
369
  ## @return [Hash] The metadata as key/value pairs
370
370
  ##
371
- def get_metadata
371
+ def metadata
372
372
  data = {}
373
373
  scan(/(?mi)^(\S[\s\S]+?): ([\s\S]*?)(?=\n\S[\s\S]*?:|\Z)/).each do |m|
374
374
  data[m[0].strip.downcase] = m[1]
@@ -453,7 +453,7 @@ module Howzit
453
453
  else
454
454
  options[:hr] * (cols - title.uncolor.length)
455
455
  end
456
- Color.template("\n\n#{title}#{tail}{x}")
456
+ Color.template("\n\n#{title}#{tail}{x}\n\n")
457
457
  end
458
458
  end
459
459
  end
@@ -3,5 +3,5 @@
3
3
  # Primary module for this gem.
4
4
  module Howzit
5
5
  # Current Howzit version.
6
- VERSION = '2.1.15'
6
+ VERSION = '2.1.18'
7
7
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: howzit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.15
4
+ version: 2.1.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-08-07 00:00:00.000000000 Z
10
+ date: 2025-01-01 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -30,28 +29,14 @@ dependencies:
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: '11.2'
32
+ version: '13.0'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '11.2'
41
- - !ruby/object:Gem::Dependency
42
- name: bump
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.5'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.5'
39
+ version: '13.0'
55
40
  - !ruby/object:Gem::Dependency
56
41
  name: guard
57
42
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +52,19 @@ dependencies:
67
52
  - !ruby/object:Gem::Version
68
53
  version: '2.11'
69
54
  - !ruby/object:Gem::Dependency
70
- name: guard-yard
55
+ name: guard-rspec
71
56
  requirement: !ruby/object:Gem::Requirement
72
57
  requirements:
73
58
  - - "~>"
74
59
  - !ruby/object:Gem::Version
75
- version: '2.1'
60
+ version: '4.5'
76
61
  type: :development
77
62
  prerelease: false
78
63
  version_requirements: !ruby/object:Gem::Requirement
79
64
  requirements:
80
65
  - - "~>"
81
66
  - !ruby/object:Gem::Version
82
- version: '2.1'
67
+ version: '4.5'
83
68
  - !ruby/object:Gem::Dependency
84
69
  name: guard-rubocop
85
70
  requirement: !ruby/object:Gem::Requirement
@@ -95,61 +80,61 @@ dependencies:
95
80
  - !ruby/object:Gem::Version
96
81
  version: '1.2'
97
82
  - !ruby/object:Gem::Dependency
98
- name: guard-rspec
83
+ name: guard-yard
99
84
  requirement: !ruby/object:Gem::Requirement
100
85
  requirements:
101
86
  - - "~>"
102
87
  - !ruby/object:Gem::Version
103
- version: '4.5'
88
+ version: '2.1'
104
89
  type: :development
105
90
  prerelease: false
106
91
  version_requirements: !ruby/object:Gem::Requirement
107
92
  requirements:
108
93
  - - "~>"
109
94
  - !ruby/object:Gem::Version
110
- version: '4.5'
95
+ version: '2.1'
111
96
  - !ruby/object:Gem::Dependency
112
- name: rubocop
97
+ name: cli-test
113
98
  requirement: !ruby/object:Gem::Requirement
114
99
  requirements:
115
100
  - - "~>"
116
101
  - !ruby/object:Gem::Version
117
- version: '0.28'
102
+ version: '1.0'
118
103
  type: :development
119
104
  prerelease: false
120
105
  version_requirements: !ruby/object:Gem::Requirement
121
106
  requirements:
122
107
  - - "~>"
123
108
  - !ruby/object:Gem::Version
124
- version: '0.28'
109
+ version: '1.0'
125
110
  - !ruby/object:Gem::Dependency
126
111
  name: rspec
127
112
  requirement: !ruby/object:Gem::Requirement
128
113
  requirements:
129
114
  - - "~>"
130
115
  - !ruby/object:Gem::Version
131
- version: '3.1'
116
+ version: '3.13'
132
117
  type: :development
133
118
  prerelease: false
134
119
  version_requirements: !ruby/object:Gem::Requirement
135
120
  requirements:
136
121
  - - "~>"
137
122
  - !ruby/object:Gem::Version
138
- version: '3.1'
123
+ version: '3.13'
139
124
  - !ruby/object:Gem::Dependency
140
- name: cli-test
125
+ name: rubocop
141
126
  requirement: !ruby/object:Gem::Requirement
142
127
  requirements:
143
128
  - - "~>"
144
129
  - !ruby/object:Gem::Version
145
- version: '1.0'
130
+ version: '0.28'
146
131
  type: :development
147
132
  prerelease: false
148
133
  version_requirements: !ruby/object:Gem::Requirement
149
134
  requirements:
150
135
  - - "~>"
151
136
  - !ruby/object:Gem::Version
152
- version: '1.0'
137
+ version: '0.28'
153
138
  - !ruby/object:Gem::Dependency
154
139
  name: simplecov
155
140
  requirement: !ruby/object:Gem::Requirement
@@ -179,19 +164,19 @@ dependencies:
179
164
  - !ruby/object:Gem::Version
180
165
  version: '2.0'
181
166
  - !ruby/object:Gem::Dependency
182
- name: yard
167
+ name: github-markup
183
168
  requirement: !ruby/object:Gem::Requirement
184
169
  requirements:
185
170
  - - "~>"
186
171
  - !ruby/object:Gem::Version
187
- version: 0.9.5
172
+ version: '1.3'
188
173
  type: :development
189
174
  prerelease: false
190
175
  version_requirements: !ruby/object:Gem::Requirement
191
176
  requirements:
192
177
  - - "~>"
193
178
  - !ruby/object:Gem::Version
194
- version: 0.9.5
179
+ version: '1.3'
195
180
  - !ruby/object:Gem::Dependency
196
181
  name: redcarpet
197
182
  requirement: !ruby/object:Gem::Requirement
@@ -207,33 +192,33 @@ dependencies:
207
192
  - !ruby/object:Gem::Version
208
193
  version: '3.2'
209
194
  - !ruby/object:Gem::Dependency
210
- name: github-markup
195
+ name: tty-spinner
211
196
  requirement: !ruby/object:Gem::Requirement
212
197
  requirements:
213
198
  - - "~>"
214
199
  - !ruby/object:Gem::Version
215
- version: '1.3'
200
+ version: '0.9'
216
201
  type: :development
217
202
  prerelease: false
218
203
  version_requirements: !ruby/object:Gem::Requirement
219
204
  requirements:
220
205
  - - "~>"
221
206
  - !ruby/object:Gem::Version
222
- version: '1.3'
207
+ version: '0.9'
223
208
  - !ruby/object:Gem::Dependency
224
- name: tty-spinner
209
+ name: yard
225
210
  requirement: !ruby/object:Gem::Requirement
226
211
  requirements:
227
212
  - - "~>"
228
213
  - !ruby/object:Gem::Version
229
- version: '0.9'
214
+ version: 0.9.5
230
215
  type: :development
231
216
  prerelease: false
232
217
  version_requirements: !ruby/object:Gem::Requirement
233
218
  requirements:
234
219
  - - "~>"
235
220
  - !ruby/object:Gem::Version
236
- version: '0.9'
221
+ version: 0.9.5
237
222
  - !ruby/object:Gem::Dependency
238
223
  name: mdless
239
224
  requirement: !ruby/object:Gem::Requirement
@@ -255,33 +240,33 @@ dependencies:
255
240
  - !ruby/object:Gem::Version
256
241
  version: 1.0.28
257
242
  - !ruby/object:Gem::Dependency
258
- name: tty-screen
243
+ name: tty-box
259
244
  requirement: !ruby/object:Gem::Requirement
260
245
  requirements:
261
246
  - - "~>"
262
247
  - !ruby/object:Gem::Version
263
- version: '0.8'
248
+ version: '0.7'
264
249
  type: :runtime
265
250
  prerelease: false
266
251
  version_requirements: !ruby/object:Gem::Requirement
267
252
  requirements:
268
253
  - - "~>"
269
254
  - !ruby/object:Gem::Version
270
- version: '0.8'
255
+ version: '0.7'
271
256
  - !ruby/object:Gem::Dependency
272
- name: tty-box
257
+ name: tty-screen
273
258
  requirement: !ruby/object:Gem::Requirement
274
259
  requirements:
275
260
  - - "~>"
276
261
  - !ruby/object:Gem::Version
277
- version: '0.7'
262
+ version: '0.8'
278
263
  type: :runtime
279
264
  prerelease: false
280
265
  version_requirements: !ruby/object:Gem::Requirement
281
266
  requirements:
282
267
  - - "~>"
283
268
  - !ruby/object:Gem::Version
284
- version: '0.7'
269
+ version: '0.8'
285
270
  description: Command line project documentation and task runner
286
271
  email:
287
272
  - me@brettterpstra.com
@@ -348,7 +333,6 @@ homepage: https://github.com/ttscoff/howzit
348
333
  licenses:
349
334
  - MIT
350
335
  metadata: {}
351
- post_install_message:
352
336
  rdoc_options: []
353
337
  require_paths:
354
338
  - lib
@@ -363,8 +347,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
363
347
  - !ruby/object:Gem::Version
364
348
  version: '0'
365
349
  requirements: []
366
- rubygems_version: 3.2.15
367
- signing_key:
350
+ rubygems_version: 3.6.2
368
351
  specification_version: 4
369
352
  summary: Provides a way to access Markdown project notes by topic with query capabilities
370
353
  and the ability to execute the tasks it describes.