howzit 2.0.1 → 2.0.4

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: c765e26fa17336ee43c9695a14e86ac5a3a3f72c028e6264b17593d1c0b607e6
4
- data.tar.gz: f158ef7138d572cbfd94a08d56d50d221c6c04dc45477e437848d238055846b2
3
+ metadata.gz: fba7a6b730f2aabb0e92a26b772cc06fa4182ad07edf7f8620733be70debf766
4
+ data.tar.gz: 60900d73ffee99002daa4e32b5970c81986756c117fec172c824d59e87e72995
5
5
  SHA512:
6
- metadata.gz: 636f61b3f6ad8cc161e7a5453a0bc3afafe96cef27df2f0a3542083c0302c7f581a0d6fdabaaa37d52c958145297dec4496bda9e8e68ed94a77c5a151ffb5bb8
7
- data.tar.gz: '095a73c3482d35f493c695e5d0a154b814bb7630fefe16212859527113e476c715856bf1d3394702f51f8954a12c83095e97a70c64090652c3d41601f02b6a03'
6
+ metadata.gz: 819083c882f7f330d050d23486e390179beb95c4f220458c4a66c496a0fe99eb69746e762d90ce4c033983764693e5dc77499779e1138ae41e64c346b3930d45
7
+ data.tar.gz: 38d58943e9f8a8d32794ecc638257eb64f67cf09f0a22bc9811ca367627bafb48d22ceed7091551453700fd392fa857b94e37551208735433f0cf4a39ef27f6e
data/.travis.yml CHANGED
@@ -4,4 +4,10 @@ sudo: required
4
4
  dist: trusty
5
5
  cache: bundler
6
6
  rvm:
7
- - 2
7
+ - ruby-2.7.0
8
+ - ruby-3.0.1
9
+ install:
10
+ - gem uninstall bundler
11
+ - gem install bundler --version '2.2.29'
12
+ - bundle install
13
+ script: "rake"
data/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ ### 2.0.4
2
+
3
+ 2022-08-04 06:25
4
+
5
+ #### IMPROVED
6
+
7
+ - Ask to open new buildnote for editing after creation
8
+
9
+ #### FIXED
10
+
11
+ - Loop when creating new buildnote
12
+
13
+ ### 2.0.3
14
+
15
+ 2022-08-04 05:31
16
+
17
+ #### IMPROVED
18
+
19
+ - General code cleanup
20
+ - Attempt at os agnostic @copy command, hopefully works on Windows and Linux systems
21
+
22
+ #### FIXED
23
+
24
+ - Not displaying action if title is missing
25
+
26
+ ### 2.0.2
27
+
28
+ 2022-08-03 18:26
29
+
30
+ #### IMPROVED
31
+
32
+ - If a title is provided after an @command, display it instead of the contents when viewing
33
+
1
34
  ### 2.0.1
2
35
 
3
36
  2022-08-03 12:46
data/howzit.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(features|spec|test)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.required_ruby_version = '>= 2.0.1'
20
+ spec.required_ruby_version = '>= 2.6.0'
21
21
 
22
22
  spec.add_development_dependency 'bundler', '~> 2.2'
23
23
  spec.add_development_dependency 'rake', '~> 11.2'
@@ -40,4 +40,5 @@ Gem::Specification.new do |spec|
40
40
 
41
41
  spec.add_runtime_dependency 'mdless', '~> 1.0', '>= 1.0.28'
42
42
  spec.add_runtime_dependency 'tty-screen', '~> 0.8'
43
+ # spec.add_runtime_dependency 'tty-prompt', '~> 0.23'
43
44
  end
@@ -41,9 +41,9 @@ module Howzit
41
41
  # Output a list of topic titles
42
42
  def list
43
43
  output = []
44
- output.push(Color.template("{bg}Topics:{x}\n"))
44
+ output.push("{bg}Topics:{x}\n".c)
45
45
  @topics.each do |topic|
46
- output.push(Color.template("- {bw}#{topic.title}{x}"))
46
+ output.push("- {bw}#{topic.title}{x}".c)
47
47
  end
48
48
  output.join("\n")
49
49
  end
@@ -66,7 +66,7 @@ module Howzit
66
66
 
67
67
  def list_runnable
68
68
  output = []
69
- output.push(Color.template(%({bg}"Runnable" Topics:{x}\n)))
69
+ output.push(%({bg}"Runnable" Topics:{x}\n).c)
70
70
  @topics.each do |topic|
71
71
  s_out = []
72
72
 
@@ -75,7 +75,7 @@ module Howzit
75
75
  end
76
76
 
77
77
  unless s_out.empty?
78
- output.push(Color.template("- {bw}#{topic.title}{x}"))
78
+ output.push("- {bw}#{topic.title}{x}".c)
79
79
  output.push(s_out.join("\n"))
80
80
  end
81
81
  end
@@ -95,9 +95,9 @@ module Howzit
95
95
  default = !$stdout.isatty || Howzit.options[:default]
96
96
  # First make sure there isn't already a buildnotes file
97
97
  if note_file
98
- fname = Color.template("{by}#{note_file}{bw}")
98
+ fname = "{by}#{note_file}{bw}".c
99
99
  unless default
100
- res = Prompt.yn("#{fname} exists and appears to be a build note, continue anyway?", false)
100
+ res = Prompt.yn("#{fname} exists and appears to be a build note, continue anyway?", default: false)
101
101
  unless res
102
102
  puts 'Canceled'
103
103
  Process.exit 0
@@ -106,23 +106,25 @@ module Howzit
106
106
  end
107
107
 
108
108
  title = File.basename(Dir.pwd)
109
+ # prompt = TTY::Prompt.new
109
110
  if default
110
111
  input = title
111
112
  else
112
- printf Color.template("{bw}Project name {xg}[#{title}]{bw}: {x}")
113
+ # title = prompt.ask("{bw}Project name:{x}".c, default: title)
114
+ printf "{bw}Project name {xg}[#{title}]{bw}: {x}".c
113
115
  input = $stdin.gets.chomp
114
116
  title = input unless input.empty?
115
117
  end
116
118
  summary = ''
117
119
  unless default
118
- printf Color.template('{bw}Project summary: {x}')
120
+ printf '{bw}Project summary: {x}'.c
119
121
  input = $stdin.gets.chomp
120
122
  summary = input unless input.empty?
121
123
  end
122
124
 
123
125
  fname = 'buildnotes.md'
124
126
  unless default
125
- printf Color.template("{bw}Build notes filename (must begin with 'howzit' or 'build')\n{xg}[#{fname}]{bw}: {x}")
127
+ printf "{bw}Build notes filename (must begin with 'howzit' or 'build')\n{xg}[#{fname}]{bw}: {x}".c
126
128
  input = $stdin.gets.chomp
127
129
  fname = input unless input.empty?
128
130
  end
@@ -153,8 +155,8 @@ module Howzit
153
155
  EOBUILDNOTES
154
156
 
155
157
  if File.exist?(fname) && !default
156
- file = Color.template("{by}#{fname}")
157
- res = Prompt.yn("Are you absolutely sure you want to overwrite #{file}", false)
158
+ file = "{by}#{fname}".c
159
+ res = Prompt.yn("Are you absolutely sure you want to overwrite #{file}", default: false)
158
160
 
159
161
  unless res
160
162
  puts 'Canceled'
@@ -164,8 +166,16 @@ module Howzit
164
166
 
165
167
  File.open(fname, 'w') do |f|
166
168
  f.puts note
167
- puts Color.template("{by}Build notes for #{title} written to #{fname}")
169
+ puts "{by}Build notes for #{title} written to #{fname}".c
168
170
  end
171
+
172
+ if File.exist?(fname) && !default
173
+ res = Prompt.yn("{bg}Do you want to open {bw}#{file} {bg}for editing?{x}".c, default: false)
174
+
175
+ edit_note if res
176
+ end
177
+
178
+ Process.exit 0
169
179
  end
170
180
 
171
181
  def note_file
@@ -259,8 +269,8 @@ module Howzit
259
269
  required = t_meta['required'].strip.split(/\s*,\s*/)
260
270
  required.each do |req|
261
271
  unless @metadata.keys.include?(req.downcase)
262
- warn Color.template(%({xr}ERROR: Missing required metadata key from template '{bw}#{File.basename(template, '.md')}{xr}'{x}))
263
- warn Color.template(%({xr}Please define {by}#{req.downcase}{xr} in build notes{x}))
272
+ warn %({xr}ERROR: Missing required metadata key from template '{bw}#{File.basename(template, '.md')}{xr}'{x}).c
273
+ warn %({xr}Please define {by}#{req.downcase}{xr} in build notes{x}).c
264
274
  Process.exit 1
265
275
  end
266
276
  end
@@ -410,7 +420,7 @@ module Howzit
410
420
  raise "Invalid editor (#{editor})" unless Util.valid_command?(editor)
411
421
 
412
422
  if note_file.nil?
413
- res = Prompt.yn('No build notes file found, create one?', true)
423
+ res = Prompt.yn('No build notes file found, create one?', default: true)
414
424
 
415
425
  create_note if res
416
426
  edit_note
@@ -500,7 +510,7 @@ module Howzit
500
510
  matches = find_topic(s)
501
511
 
502
512
  if matches.empty?
503
- output.push(Color.template(%({bR}ERROR:{xr} No topic match found for {bw}#{s}{x}\n)))
513
+ output.push(%({bR}ERROR:{xr} No topic match found for {bw}#{s}{x}\n).c)
504
514
  else
505
515
  case Howzit.options[:multiple_matches]
506
516
  when :first
data/lib/howzit/prompt.rb CHANGED
@@ -4,16 +4,18 @@ module Howzit
4
4
  # Command line prompt utils
5
5
  module Prompt
6
6
  class << self
7
- def yn(prompt, default = true)
8
- return default if !$stdout.isatty
7
+ def yn(prompt, default: true)
8
+ return default unless $stdout.isatty
9
9
 
10
- system 'stty cbreak'
11
- yn = color_single_options(default ? %w[Y n] : %w[y N])
12
- $stdout.syswrite "\e[1;37m#{prompt} #{yn}\e[1;37m? \e[0m"
13
- res = $stdin.sysread 1
14
- res.chomp!
15
- puts
16
- system 'stty cooked'
10
+ return default if Howzit.options[:default]
11
+
12
+ system 'stty cbreak'
13
+ yn = color_single_options(default ? %w[Y n] : %w[y N])
14
+ $stdout.syswrite "\e[1;37m#{prompt} #{yn}\e[1;37m? \e[0m"
15
+ res = $stdin.sysread 1
16
+ res.chomp!
17
+ puts
18
+ system 'stty cooked'
17
19
  res.empty? ? default : res =~ /y/i
18
20
  end
19
21
 
@@ -28,6 +28,10 @@ module Howzit
28
28
  end
29
29
  end
30
30
 
31
+ def c
32
+ Color.template(self)
33
+ end
34
+
31
35
  def to_rx
32
36
  case Howzit.options[:matching]
33
37
  when 'exact'
data/lib/howzit/topic.rb CHANGED
@@ -28,14 +28,14 @@ module Howzit
28
28
  if @tasks.count.positive?
29
29
  unless @prereqs.empty?
30
30
  puts @prereqs.join("\n\n")
31
- res = Prompt.yn('This task has prerequisites, have they been met?', true)
31
+ res = Prompt.yn('This task has prerequisites, have they been met?', default: true)
32
32
  Process.exit 1 unless res
33
33
 
34
34
  end
35
35
 
36
36
  @tasks.each do |task|
37
37
  if task.type == :block
38
- warn Color.template("{bg}Running block {bw}#{title}{x}") if Howzit.options[:log_level] < 2
38
+ warn "{bg}Running block {bw}#{title}{x}".c if Howzit.options[:log_level] < 2
39
39
  block = task.action
40
40
  script = Tempfile.new('howzit_script')
41
41
  begin
@@ -49,22 +49,23 @@ module Howzit
49
49
  script.unlink
50
50
  end
51
51
  else
52
+ title = Howzit.options[:show_all_code] ? task.action : task.title
52
53
  case task.type
53
54
  when :include
54
55
  matches = Howzit.buildnote.find_topic(task.action)
55
56
  raise "Topic not found: #{task.action}" if matches.empty?
56
57
 
57
- warn Color.template("{by}Running tasks from {bw}#{matches[0].title}{x}") if Howzit.options[:log_level] < 2
58
+ $stderr.puts "{by}Running tasks from {bw}#{matches[0].title}{x}".c if Howzit.options[:log_level] < 2
58
59
  output.push(matches[0].run(nested: true))
59
- warn Color.template("{by}End include: #{matches[0].tasks.count} tasks") if Howzit.options[:log_level] < 2
60
+ $stderr.puts "{by}End include: #{matches[0].tasks.count} tasks".c if Howzit.options[:log_level] < 2
60
61
  tasks += matches[0].tasks.count
61
62
  when :run
62
- warn Color.template("{bg}Running {bw}#{task.title}{x}") if Howzit.options[:log_level] < 2
63
+ $stderr.puts "{bg}Running {bw}#{title}{x}".c if Howzit.options[:log_level] < 2
63
64
  system(task.action)
64
65
  tasks += 1
65
66
  when :copy
66
- warn Color.template("{bg}Copied {bw}#{task.title}{bg} to clipboard{x}") if Howzit.options[:log_level] < 2
67
- `echo #{Shellwords.escape(task.action)}'\\c'|pbcopy`
67
+ $stderr.puts "{bg}Copied {bw}#{title}{bg} to clipboard{x}".c if Howzit.options[:log_level] < 2
68
+ os_copy(task.action)
68
69
  tasks += 1
69
70
  when :open
70
71
  os_open(task.action)
@@ -73,28 +74,52 @@ module Howzit
73
74
  end
74
75
  end
75
76
  else
76
- warn Color.template("{r}--run: No {br}@directive{xr} found in {bw}#{key}{x}")
77
+ warn "{r}--run: No {br}@directive{xr} found in {bw}#{key}{x}".c
77
78
  end
78
- output.push(Color.template("{bm}Ran #{tasks} #{tasks == 1 ? 'task' : 'tasks'}{x}")) if Howzit.options[:log_level] < 2 && !nested
79
+ output.push("{bm}Ran #{tasks} #{tasks == 1 ? 'task' : 'tasks'}{x}".c) if Howzit.options[:log_level] < 2 && !nested
79
80
 
80
81
  puts postreqs.join("\n\n") unless postreqs.empty?
81
82
 
82
83
  output
83
84
  end
84
85
 
86
+ def os_copy(string)
87
+ os = RbConfig::CONFIG['target_os']
88
+ out = "{bg}Copying {bw}#{string}".c
89
+ case os
90
+ when /darwin.*/i
91
+ warn "#{out} (macOS){x}".c if Howzit.options[:log_level] < 2
92
+ `echo #{Shellwords.escape(string)}'\\c'|pbcopy`
93
+ when /mingw|mswin/i
94
+ warn "#{out} (Windows){x}".c if Howzit.options[:log_level] < 2
95
+ `echo #{Shellwords.escape(string)} | clip`
96
+ else
97
+ if 'xsel'.available?
98
+ warn "#{out} (Linux, xsel){x}".c if Howzit.options[:log_level] < 2
99
+ `echo #{Shellwords.escape(string)}'\\c'|xsel -i`
100
+ elsif 'xclip'.available?
101
+ warn "#{out} (Linux, xclip){x}".c if Howzit.options[:log_level] < 2
102
+ `echo #{Shellwords.escape(string)}'\\c'|xclip -i`
103
+ else
104
+ warn out if Howzit.options[:log_level] < 2
105
+ warn 'Unable to determine executable for clipboard.'
106
+ end
107
+ end
108
+ end
109
+
85
110
  def os_open(command)
86
111
  os = RbConfig::CONFIG['target_os']
87
- out = Color.template("{bg}Opening {bw}#{command}")
112
+ out = "{bg}Opening {bw}#{command}".c
88
113
  case os
89
114
  when /darwin.*/i
90
- warn Color.template("#{out} (macOS){x}") if Howzit.options[:log_level] < 2
115
+ warn "#{out} (macOS){x}".c if Howzit.options[:log_level] < 2
91
116
  `open #{Shellwords.escape(command)}`
92
117
  when /mingw|mswin/i
93
- warn Color.template("#{out} (Windows){x}") if Howzit.options[:log_level] < 2
118
+ warn "#{out} (Windows){x}".c if Howzit.options[:log_level] < 2
94
119
  `start #{Shellwords.escape(command)}`
95
120
  else
96
121
  if 'xdg-open'.available?
97
- warn Color.template("#{out} (Linux){x}") if Howzit.options[:log_level] < 2
122
+ warn "#{out} (Linux){x}".c if Howzit.options[:log_level] < 2
98
123
  `xdg-open #{Shellwords.escape(command)}`
99
124
  else
100
125
  warn out if Howzit.options[:log_level] < 2
@@ -120,7 +145,6 @@ module Howzit
120
145
  when /@(before|after|prereq|end)/
121
146
  next
122
147
  when /@include\((.*?)\)/
123
-
124
148
  m = Regexp.last_match
125
149
  matches = Howzit.buildnote.find_topic(m[1])
126
150
  unless matches.empty?
@@ -153,10 +177,11 @@ module Howzit
153
177
  Howzit.inclusions.push(matches[0])
154
178
  end
155
179
 
156
- when /@(run|copy|open|url|include)\((.*?)\)/
180
+ when /@(run|copy|open|url|include)\((.*?)\)(.*?)$/
157
181
  m = Regexp.last_match
158
182
  cmd = m[1]
159
183
  obj = m[2]
184
+ title = m[3].empty? ? obj : m[3]
160
185
  icon = case cmd
161
186
  when 'run'
162
187
  "\u{25B6}"
@@ -166,21 +191,21 @@ module Howzit
166
191
  "\u{279A}"
167
192
  end
168
193
 
169
- output.push(Color.template("{bmK}#{icon} {bwK}#{obj.gsub(/\\n/, '\​n')}{x}"))
194
+ output.push("{bmK}#{icon} {bwK}#{title.gsub(/\\n/, '\​n')}{x}".c)
170
195
  when /(`{3,})run *(.*?)$/i
171
196
  m = Regexp.last_match
172
197
  desc = m[2].length.positive? ? "Block: #{m[2]}" : 'Code Block'
173
- output.push(Color.template("{bmK}\u{25B6} {bwK}#{desc}{x}\n```"))
198
+ output.push("{bmK}\u{25B6} {bwK}#{desc}{x}\n```".c)
174
199
  when /@@@run *(.*?)$/i
175
200
  m = Regexp.last_match
176
201
  desc = m[1].length.positive? ? "Block: #{m[1]}" : 'Code Block'
177
- output.push(Color.template("{bmK}\u{25B6} {bwK}#{desc}{x}"))
202
+ output.push("{bmK}\u{25B6} {bwK}#{desc}{x}".c)
178
203
  else
179
- l.wrap!(Howzit.options[:wrap]) if (Howzit.options[:wrap]).positive?
204
+ l.wrap!(Howzit.options[:wrap]) if Howzit.options[:wrap].positive?
180
205
  output.push(l)
181
206
  end
182
207
  end
183
- output.push('') # FIXME: Is this where the extra line is coming from?
208
+ output.push('')
184
209
  end
185
210
 
186
211
  private
@@ -218,10 +243,10 @@ module Howzit
218
243
  runnable << Howzit::Task.new(:include, title, obj)
219
244
  when /run/i
220
245
  title = c[3] || obj
221
- # warn Color.template("{bg}Running {bw}#{obj}{x}") if Howzit.options[:log_level] < 2
246
+ # warn "{bg}Running {bw}#{obj}{x}".c if Howzit.options[:log_level] < 2
222
247
  runnable << Howzit::Task.new(:run, title, obj)
223
248
  when /copy/i
224
- # warn Color.template("{bg}Copied {bw}#{obj}{bg} to clipboard{x}") if Howzit.options[:log_level] < 2
249
+ # warn "{bg}Copied {bw}#{obj}{bg} to clipboard{x}".c if Howzit.options[:log_level] < 2
225
250
  runnable << Howzit::Task.new(:copy, title, Shellwords.escape(obj))
226
251
  when /open|url/i
227
252
  runnable << Howzit::Task.new(:open, title, obj)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Primary module for this gem.
3
4
  module Howzit
4
5
  # Current Howzit version.
5
- VERSION = '2.0.1'.freeze
6
+ VERSION = '2.0.4'
6
7
  end
data/lib/howzit.rb CHANGED
@@ -20,6 +20,7 @@ require 'tempfile'
20
20
  require 'yaml'
21
21
 
22
22
  require 'tty/screen'
23
+ # require 'tty/prompt'
23
24
 
24
25
  CONFIG_DIR = '~/.config/howzit'
25
26
  CONFIG_FILE = 'howzit.yaml'
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Howzit::BuildNote do
6
+ subject(:how) { @hz }
7
+
8
+ describe ".note_file" do
9
+ it "locates a build note file" do
10
+ expect(how.note_file).not_to be_empty
11
+ expect(how.note_file).to match /builda.md$/
12
+ end
13
+ end
14
+
15
+ describe ".grep" do
16
+ it "finds topic containing 'bermuda'" do
17
+ expect(how.grep('bermuda').map { |topic| topic.title }).to include('Topic Tropic')
18
+ end
19
+ it "does not return non-matching topic" do
20
+ expect(how.grep('bermuda').map { |topic| topic.title }).not_to include('Topic Balogna')
21
+ end
22
+ end
23
+
24
+ describe ".find_topic" do
25
+ it "finds the Topic Tropic topic" do
26
+ matches = how.find_topic('tropic')
27
+ expect(matches.count).to eq 1
28
+ expect(matches[0].title).to eq 'Topic Tropic'
29
+ end
30
+ it "fuzzy matches" do
31
+ Howzit.options[:matching] = 'fuzzy'
32
+ matches = how.find_topic('trpc')
33
+ expect(matches.count).to eq 1
34
+ expect(matches[0].title).to eq 'Topic Tropic'
35
+ end
36
+ it "succeeds with partial match" do
37
+ Howzit.options[:matching] = 'partial'
38
+ matches = how.find_topic('trop')
39
+ expect(matches.count).to eq 1
40
+ expect(matches[0].title).to eq 'Topic Tropic'
41
+ end
42
+ it "succeeds with beginswith match" do
43
+ Howzit.options[:matching] = 'beginswith'
44
+ matches = how.find_topic('topic')
45
+ expect(matches.count).to eq 3
46
+ expect(matches[0].title).to eq 'Topic Balogna'
47
+ end
48
+ it "succeeds with exact match" do
49
+ Howzit.options[:matching] = 'exact'
50
+ matches = how.find_topic('topic tropic')
51
+ expect(matches.count).to eq 1
52
+ expect(matches[0].title).to eq 'Topic Tropic'
53
+ end
54
+ it "fails with incomplete exact match" do
55
+ Howzit.options[:matching] = 'exact'
56
+ matches = how.find_topic('topic trop')
57
+ expect(matches.count).to eq 0
58
+ end
59
+ end
60
+
61
+ describe ".topics" do
62
+ it "contains 4 topics" do
63
+ expect(how.list_topics.count).to eq 3
64
+ end
65
+ it "outputs a newline-separated string for completion" do
66
+ expect(how.list_completions.scan(/\n/).count).to eq 2
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,22 @@
1
+ # spec
2
+
3
+
4
+
5
+ ## File Structure
6
+
7
+ Where are the main editable files? Is there a dist/build folder that should be ignored?
8
+
9
+ ## Build
10
+
11
+ What build system/parameters does this use?
12
+
13
+ @run(./build command)
14
+
15
+ ## Deploy
16
+
17
+ What are the procedures/commands to deploy this project?
18
+
19
+ ## Other
20
+
21
+ Version control notes, additional gulp/rake/make/etc tasks...
22
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Howzit::BuildNote do
@@ -9,102 +11,3 @@ describe Howzit::BuildNote do
9
11
  end
10
12
  end
11
13
  end
12
-
13
- describe Howzit::Task do
14
- subject(:task) { Howzit::Task.new(:run, 'List Directory', 'ls') }
15
-
16
- describe ".new" do
17
- it "makes a new task instance" do
18
- expect(task).to be_a Howzit::Task
19
- end
20
- end
21
- end
22
-
23
- describe Howzit::Topic do
24
- title = 'Test Title'
25
- content = 'Test Content'
26
- subject(:topic) { Howzit::Topic.new(title, content) }
27
-
28
- describe ".new" do
29
- it "makes a new topic instance" do
30
- expect(topic).to be_a Howzit::Topic
31
- end
32
- it "has the correct title" do
33
- expect(topic.title).to eq title
34
- end
35
- it "has the correct content" do
36
- expect(topic.content).to eq content
37
- end
38
- end
39
- end
40
-
41
- describe Howzit::BuildNote do
42
- Dir.chdir('spec')
43
- Howzit.options[:include_upstream] = false
44
- Howzit.options[:default] = true
45
- hz = Howzit.buildnote
46
- hz.create_note
47
-
48
- subject(:how) { hz }
49
-
50
- describe ".note_file" do
51
- it "locates a build note file" do
52
- expect(how.note_file).not_to be_empty
53
- end
54
- end
55
-
56
- describe ".grep" do
57
- it "finds topic containing 'editable'" do
58
- expect(how.grep('editable').map { |topic| topic.title }).to include('File Structure')
59
- end
60
- it "does not return non-matching topic" do
61
- expect(how.grep('editable').map { |topic| topic.title }).not_to include('Build')
62
- end
63
- end
64
-
65
- describe ".find_topic" do
66
- it "finds the File Structure topic" do
67
- matches = how.find_topic('file struct')
68
- expect(matches.count).to eq 1
69
- expect(matches[0].title).to eq 'File Structure'
70
- end
71
- it "fuzzy matches" do
72
- Howzit.options[:matching] = 'fuzzy'
73
- matches = how.find_topic('flestct')
74
- expect(matches.count).to eq 1
75
- expect(matches[0].title).to eq 'File Structure'
76
- end
77
- it "succeeds with partial match" do
78
- Howzit.options[:matching] = 'partial'
79
- matches = how.find_topic('structure')
80
- expect(matches.count).to eq 1
81
- expect(matches[0].title).to eq 'File Structure'
82
- end
83
- it "succeeds with beginswith match" do
84
- Howzit.options[:matching] = 'beginswith'
85
- matches = how.find_topic('file')
86
- expect(matches.count).to eq 1
87
- expect(matches[0].title).to eq 'File Structure'
88
- end
89
- it "succeeds with exact match" do
90
- Howzit.options[:matching] = 'exact'
91
- matches = how.find_topic('file structure')
92
- expect(matches.count).to eq 1
93
- expect(matches[0].title).to eq 'File Structure'
94
- end
95
- it "fails with incomplete exact match" do
96
- Howzit.options[:matching] = 'exact'
97
- matches = how.find_topic('file struct')
98
- expect(matches.count).to eq 0
99
- end
100
- end
101
-
102
- describe ".topics" do
103
- it "contains 4 topics" do
104
- expect(how.list_topics.count).to eq 4
105
- end
106
- it "outputs a newline-separated string for completion" do
107
- expect(how.list_completions.scan(/\n/).count).to eq 3
108
- end
109
- end
110
- end
data/spec/spec_helper.rb CHANGED
@@ -13,7 +13,52 @@ require 'howzit'
13
13
 
14
14
  RSpec.configure do |c|
15
15
  c.expect_with(:rspec) { |e| e.syntax = :expect }
16
+
16
17
  c.before(:each) do
17
18
  allow(FileUtils).to receive(:remove_entry_secure).with(anything)
19
+ save_buildnote
20
+ Howzit.options[:include_upstream] = false
21
+ Howzit.options[:default] = true
22
+ @hz = Howzit.buildnote
23
+ end
24
+
25
+ c.after(:each) do
26
+ delete_buildnote
18
27
  end
19
28
  end
29
+
30
+ def save_buildnote
31
+ note = <<~EONOTE
32
+ # Howzit Test
33
+
34
+ ## Topic Balogna
35
+
36
+ @before
37
+ This should be a prerequisite.
38
+ @end
39
+
40
+ @run(ls -1 &> /dev/null) Null Output
41
+ @include(Topic Tropic)
42
+
43
+ @after
44
+ This should be a postrequisite.
45
+ @end
46
+
47
+ ## Topic Banana
48
+
49
+ This is just another topic.
50
+
51
+ - It has a list in it
52
+ - That's pretty fun, right?
53
+
54
+ ## Topic Tropic
55
+
56
+ Bermuda, Bahama, something something wanna.
57
+ @copy(Balogna) Just some balogna
58
+ EONOTE
59
+ File.open('builda.md', 'w') { |f| f.puts note }
60
+ end
61
+
62
+ def delete_buildnote
63
+ FileUtils.rm('builda.md')
64
+ end
data/spec/task_spec.rb ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Howzit::Task do
6
+ subject(:task) { Howzit::Task.new(:run, 'List Directory', 'ls') }
7
+
8
+ describe ".new" do
9
+ it "makes a new task instance" do
10
+ expect(task).to be_a Howzit::Task
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Howzit::Topic do
6
+ title = 'Test Title'
7
+ content = 'Test Content'
8
+ subject(:topic) { Howzit::Topic.new(title, content) }
9
+
10
+ describe ".new" do
11
+ it "makes a new topic instance" do
12
+ expect(topic).to be_a Howzit::Topic
13
+ end
14
+ it "has the correct title" do
15
+ expect(topic.title).to eq title
16
+ end
17
+ it "has the correct content" do
18
+ expect(topic.content).to eq content
19
+ end
20
+ end
21
+ end
22
+
23
+ describe Howzit::Topic do
24
+ subject(:topic) { @hz.find_topic('Topic Balogna')[0] }
25
+
26
+ describe ".title" do
27
+ it "has the correct title" do
28
+ expect(topic.title).to match /Topic Balogna/
29
+ end
30
+ end
31
+
32
+ describe ".tasks" do
33
+ it "has 2 tasks" do
34
+ expect(topic.tasks.count).to eq 2
35
+ end
36
+ end
37
+
38
+ describe ".prereqs" do
39
+ it "has prereq" do
40
+ expect(topic.prereqs.count).to eq 1
41
+ end
42
+ it "has postreq" do
43
+ expect(topic.postreqs.count).to eq 1
44
+ end
45
+ end
46
+
47
+ describe ".run" do
48
+ Howzit.options[:default] = true
49
+ it "shows prereq and postreq" do
50
+ expect { topic.run }.to output(/prerequisite/).to_stdout
51
+ expect { topic.run }.to output(/postrequisite/).to_stdout
52
+ end
53
+ it "Copies to clipboard" do
54
+ expect {
55
+ ENV['RUBYOPT'] = '-W1'
56
+ Howzit.options[:log_level] = 0
57
+ topic.run
58
+ }.to output(/Copied/).to_stderr
59
+ end
60
+ end
61
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: howzit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-03 00:00:00.000000000 Z
11
+ date: 2022-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -280,8 +280,12 @@ files:
280
280
  - lib/howzit/util.rb
281
281
  - lib/howzit/version.rb
282
282
  - spec/.rubocop.yml
283
+ - spec/buildnote_spec.rb
284
+ - spec/buildnotes.md.bak
283
285
  - spec/ruby_gem_spec.rb
284
286
  - spec/spec_helper.rb
287
+ - spec/task_spec.rb
288
+ - spec/topic_spec.rb
285
289
  - update_readmes.rb
286
290
  homepage: https://github.com/ttscoff/howzit
287
291
  licenses:
@@ -295,7 +299,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
295
299
  requirements:
296
300
  - - ">="
297
301
  - !ruby/object:Gem::Version
298
- version: 2.0.1
302
+ version: 2.6.0
299
303
  required_rubygems_version: !ruby/object:Gem::Requirement
300
304
  requirements:
301
305
  - - ">="
@@ -309,5 +313,9 @@ summary: Provides a way to access Markdown project notes by topic with query cap
309
313
  and the ability to execute the tasks it describes.
310
314
  test_files:
311
315
  - spec/.rubocop.yml
316
+ - spec/buildnote_spec.rb
317
+ - spec/buildnotes.md.bak
312
318
  - spec/ruby_gem_spec.rb
313
319
  - spec/spec_helper.rb
320
+ - spec/task_spec.rb
321
+ - spec/topic_spec.rb