markdown_exec 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +30 -0
- data/Gemfile +4 -4
- data/Gemfile.lock +56 -0
- data/Rakefile +14 -14
- data/bin/console +3 -3
- data/bin/mde +84 -76
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/markdown_exec.rb +3 -3
- metadata +20 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0103a836804fd50f493ec31ad7899a7b1235c1b26feb2ce30b8f2738657f820f
|
4
|
+
data.tar.gz: 0b2cbd8e447e0dab4c6f63c3d23cd1c952841a713414df49193cef0495d0fca4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df473dc9a66adae26932f11268f2a9d7fd4faae7949a0ab8b97a148916f41a679173d1500696e3d822ff49c9d730a7e9e28ac7601e19fb9c6edd513c042da05f
|
7
|
+
data.tar.gz: 8bb208972a34a57a9e2008a081e957e6e11a1e4d2e69aae28575e8af6afb3d8199116799b324e202706c909b3760f0b4c92d7c8f1b6a332ce98e00c01f560464
|
data/.rubocop.yml
CHANGED
@@ -1,6 +1,36 @@
|
|
1
1
|
AllCops:
|
2
2
|
TargetRubyVersion: 2.6
|
3
3
|
|
4
|
+
Metrics/AbcSize:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
Metrics/BlockLength:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Metrics/BlockNesting:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Metrics/ClassLength:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Metrics/CyclomaticComplexity:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
# Metrics/LayoutLength:
|
20
|
+
# Enabled: false
|
21
|
+
|
22
|
+
Metrics/MethodLength:
|
23
|
+
Enabled: false
|
24
|
+
|
25
|
+
Metrics/PerceivedComplexity:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Style/GlobalVars:
|
29
|
+
Enabled: false
|
30
|
+
|
31
|
+
Style/MultilineBlockChain:
|
32
|
+
Enabled: false
|
33
|
+
|
4
34
|
Style/StringLiterals:
|
5
35
|
Enabled: true
|
6
36
|
EnforcedStyle: single_quotes
|
data/Gemfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
source
|
3
|
+
source 'https://rubygems.org'
|
4
4
|
|
5
5
|
# Specify your gem's dependencies in markdown_exec.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem
|
8
|
+
gem 'rake', '~> 13.0'
|
9
9
|
|
10
|
-
gem
|
10
|
+
gem 'minitest', '~> 5.0'
|
11
11
|
|
12
|
-
gem
|
12
|
+
gem 'rubocop', '~> 1.21'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
markdown_exec (0.0.3)
|
5
|
+
tty-prompt (~> 0.23.1)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
ast (2.4.2)
|
11
|
+
minitest (5.15.0)
|
12
|
+
parallel (1.21.0)
|
13
|
+
parser (3.1.1.0)
|
14
|
+
ast (~> 2.4.1)
|
15
|
+
pastel (0.8.0)
|
16
|
+
tty-color (~> 0.5)
|
17
|
+
rainbow (3.1.1)
|
18
|
+
rake (13.0.6)
|
19
|
+
regexp_parser (2.2.1)
|
20
|
+
rexml (3.2.5)
|
21
|
+
rubocop (1.26.0)
|
22
|
+
parallel (~> 1.10)
|
23
|
+
parser (>= 3.1.0.0)
|
24
|
+
rainbow (>= 2.2.2, < 4.0)
|
25
|
+
regexp_parser (>= 1.8, < 3.0)
|
26
|
+
rexml
|
27
|
+
rubocop-ast (>= 1.16.0, < 2.0)
|
28
|
+
ruby-progressbar (~> 1.7)
|
29
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
30
|
+
rubocop-ast (1.16.0)
|
31
|
+
parser (>= 3.1.1.0)
|
32
|
+
ruby-progressbar (1.11.0)
|
33
|
+
tty-color (0.6.0)
|
34
|
+
tty-cursor (0.7.1)
|
35
|
+
tty-prompt (0.23.1)
|
36
|
+
pastel (~> 0.8)
|
37
|
+
tty-reader (~> 0.8)
|
38
|
+
tty-reader (0.9.0)
|
39
|
+
tty-cursor (~> 0.7)
|
40
|
+
tty-screen (~> 0.8)
|
41
|
+
wisper (~> 2.0)
|
42
|
+
tty-screen (0.8.1)
|
43
|
+
unicode-display_width (2.1.0)
|
44
|
+
wisper (2.0.1)
|
45
|
+
|
46
|
+
PLATFORMS
|
47
|
+
arm64-darwin-21
|
48
|
+
|
49
|
+
DEPENDENCIES
|
50
|
+
markdown_exec!
|
51
|
+
minitest (~> 5.0)
|
52
|
+
rake (~> 13.0)
|
53
|
+
rubocop (~> 1.21)
|
54
|
+
|
55
|
+
BUNDLED WITH
|
56
|
+
2.2.32
|
data/Rakefile
CHANGED
@@ -1,37 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rake/testtask'
|
5
5
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
7
|
-
t.libs <<
|
8
|
-
t.libs <<
|
9
|
-
t.test_files = FileList[
|
7
|
+
t.libs << 'test'
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
10
10
|
end
|
11
11
|
|
12
|
-
require
|
12
|
+
require 'rubocop/rake_task'
|
13
13
|
|
14
14
|
RuboCop::RakeTask.new
|
15
15
|
|
16
16
|
task default: %i[test rubocop]
|
17
17
|
|
18
|
-
GEM_NAME =
|
19
|
-
GEM_VERSION =
|
18
|
+
GEM_NAME = 'markdown_exec'
|
19
|
+
GEM_VERSION = '0.0.3'
|
20
20
|
|
21
21
|
# task :default => :build
|
22
22
|
|
23
23
|
task :build do
|
24
|
-
system "gem build
|
24
|
+
system "gem build #{GEM_NAME}.gemspec"
|
25
25
|
end
|
26
26
|
|
27
|
-
task :
|
28
|
-
system "gem install
|
27
|
+
task install: :build do
|
28
|
+
system "gem install #{GEM_NAME}-#{GEM_VERSION}.gem"
|
29
29
|
end
|
30
30
|
|
31
|
-
task :
|
32
|
-
system
|
31
|
+
task publish: :build do
|
32
|
+
system "gem push #{GEM_NAME}-#{GEM_VERSION}.gem"
|
33
33
|
end
|
34
34
|
|
35
35
|
task :clean do
|
36
|
-
system
|
36
|
+
system 'rm *.gem'
|
37
37
|
end
|
data/bin/console
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'markdown_exec'
|
6
6
|
|
7
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -11,5 +11,5 @@ require "markdown_exec"
|
|
11
11
|
# require "pry"
|
12
12
|
# Pry.start
|
13
13
|
|
14
|
-
require
|
14
|
+
require 'irb'
|
15
15
|
IRB.start(__FILE__)
|
data/bin/mde
CHANGED
@@ -2,21 +2,22 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
# encoding=utf-8
|
5
|
+
# rubocop:disable Style/GlobalVars
|
5
6
|
|
6
|
-
env_debug = ENV[
|
7
|
-
$pdebug = !(env_debug ||
|
7
|
+
env_debug = ENV['MARKDOWN_EXEC_DEBUG']
|
8
|
+
$pdebug = !(env_debug || '').empty?
|
8
9
|
|
9
|
-
APP_NAME =
|
10
|
-
APP_DESC =
|
11
|
-
VERSION =
|
10
|
+
APP_NAME = 'MDExec'
|
11
|
+
APP_DESC = 'Markdown block executor'
|
12
|
+
VERSION = '0.0.3'
|
12
13
|
|
13
|
-
require
|
14
|
+
require 'markdown_exec'
|
14
15
|
# puts MarkdownExec::MDExec.echo(ARGV[0])
|
15
16
|
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
17
|
+
require 'optparse'
|
18
|
+
require 'pathname'
|
19
|
+
require 'tty-prompt'
|
20
|
+
require 'yaml'
|
20
21
|
|
21
22
|
# require_relative 'mdlib'
|
22
23
|
# #!/usr/bin/env ruby
|
@@ -26,12 +27,8 @@ require "yaml"
|
|
26
27
|
# env_debug = ENV['MARKDOWN_EXEC_DEBUG']
|
27
28
|
# $pdebug = !(env_debug || '').empty?
|
28
29
|
|
29
|
-
require
|
30
|
-
require
|
31
|
-
# require 'yaml'
|
32
|
-
# require_relative 'deep_merge'
|
33
|
-
# require_relative 'object_odig'
|
34
|
-
# require_relative 'present'
|
30
|
+
require 'open3'
|
31
|
+
# require 'tty-prompt'
|
35
32
|
|
36
33
|
BLOCK_SIZE = 1024
|
37
34
|
SELECT_PAGE_HEIGHT = 12
|
@@ -56,7 +53,7 @@ class MarkParse
|
|
56
53
|
def find_files
|
57
54
|
puts "pwd: #{`pwd`}" if $pdebug
|
58
55
|
# `ls -1 *.md`.split("\n").tap { |ret| puts "find_files() ret: #{ret.inspect}" if $pdebug }
|
59
|
-
`ls -1 #{File.join options[:mdfolder],
|
56
|
+
`ls -1 #{File.join options[:mdfolder], '*.md'}`.split("\n").tap do |ret|
|
60
57
|
puts "find_files() ret: #{ret.inspect}" if $pdebug
|
61
58
|
end
|
62
59
|
end
|
@@ -109,7 +106,7 @@ class MarkParse
|
|
109
106
|
blocks = []
|
110
107
|
current = nil
|
111
108
|
in_block = false
|
112
|
-
block_title =
|
109
|
+
block_title = ''
|
113
110
|
|
114
111
|
headings = []
|
115
112
|
File.readlines(opts[:mdfilename]).each do |line|
|
@@ -117,11 +114,11 @@ class MarkParse
|
|
117
114
|
continue unless line
|
118
115
|
|
119
116
|
if opts[:mdheadings]
|
120
|
-
if lm = line.match(/^### *(.+?) *$/)
|
117
|
+
if (lm = line.match(/^### *(.+?) *$/))
|
121
118
|
headings = [headings[0], headings[1], lm[1]]
|
122
|
-
elsif lm = line.match(/^## *([^#]*?) *$/)
|
119
|
+
elsif (lm = line.match(/^## *([^#]*?) *$/))
|
123
120
|
headings = [headings[0], lm[1]]
|
124
|
-
elsif lm = line.match(/^# *([^#]*?) *$/)
|
121
|
+
elsif (lm = line.match(/^# *([^#]*?) *$/))
|
125
122
|
headings = [lm[1]]
|
126
123
|
end
|
127
124
|
puts "get_blocks() headings: #{headings.inspect}" if $pdebug
|
@@ -129,17 +126,17 @@ class MarkParse
|
|
129
126
|
|
130
127
|
if line.match(/^`{3,}/)
|
131
128
|
if in_block
|
132
|
-
puts
|
129
|
+
puts 'get_blocks() in_block' if $pdebug
|
133
130
|
if current
|
134
131
|
|
135
132
|
# block_title ||= current.join(' ').gsub(/ +/, ' ')[0..64]
|
136
|
-
block_title = current.join(
|
133
|
+
block_title = current.join(' ').gsub(/ +/, ' ')[0..64] if block_title.nil? || block_title.empty?
|
137
134
|
|
138
135
|
blocks += block_summary opts, headings, block_title, current
|
139
136
|
current = nil
|
140
137
|
end
|
141
138
|
in_block = false
|
142
|
-
block_title =
|
139
|
+
block_title = ''
|
143
140
|
else
|
144
141
|
## new block
|
145
142
|
#
|
@@ -149,9 +146,9 @@ class MarkParse
|
|
149
146
|
|
150
147
|
do1 = false
|
151
148
|
if opts[:bash_only]
|
152
|
-
do1 = true if lm && (lm[1] ==
|
149
|
+
do1 = true if lm && (lm[1] == 'bash')
|
153
150
|
elsif opts[:exclude_expect_blocks]
|
154
|
-
do1 = true unless lm && (lm[1] ==
|
151
|
+
do1 = true unless lm && (lm[1] == 'expect')
|
155
152
|
else
|
156
153
|
do1 = true
|
157
154
|
end
|
@@ -180,7 +177,7 @@ class MarkParse
|
|
180
177
|
puts "make_block_label() opts: #{opts.inspect}" if $pdebug
|
181
178
|
puts "make_block_label() block: #{block.inspect}" if $pdebug
|
182
179
|
if opts[:mdheadings]
|
183
|
-
heads = block.fetch(:headings, []).compact.join(
|
180
|
+
heads = block.fetch(:headings, []).compact.join(' # ')
|
184
181
|
"#{block[:title]} [#{heads}] (#{opts[:mdfilename]})"
|
185
182
|
else
|
186
183
|
"#{block[:title]} (#{opts[:mdfilename]})"
|
@@ -201,7 +198,7 @@ class MarkParse
|
|
201
198
|
puts "select_block() blocks: #{blocks.to_yaml}" if $pdebug
|
202
199
|
|
203
200
|
prompt = TTY::Prompt.new(interrupt: :exit)
|
204
|
-
pt = "#{opts.fetch(:prompt, nil) ||
|
201
|
+
pt = "#{opts.fetch(:prompt, nil) || 'Pick one'}:"
|
205
202
|
puts "select_block() pt: #{pt.inspect}" if $pdebug
|
206
203
|
|
207
204
|
blocks.each { |block| block.merge! label: make_block_label(block, opts) }
|
@@ -226,9 +223,9 @@ class MarkParse
|
|
226
223
|
# puts "InputInterrupt"
|
227
224
|
# end
|
228
225
|
|
229
|
-
|
230
|
-
puts "select_block()
|
231
|
-
sel =
|
226
|
+
label_block = blocks.select { |block| block[:label] == sel }.fetch(0, nil)
|
227
|
+
puts "select_block() label_block: #{label_block.inspect}" if $pdebug
|
228
|
+
sel = label_block[:name]
|
232
229
|
puts "select_block() sel: #{sel.inspect}" if $pdebug
|
233
230
|
|
234
231
|
cbs = code_blocks(blocks, sel)
|
@@ -239,9 +236,9 @@ class MarkParse
|
|
239
236
|
cbs.each { |cb| fout cb } if opts[:display] || opts[:approve]
|
240
237
|
|
241
238
|
allow = true
|
242
|
-
allow = prompt.yes?
|
239
|
+
allow = prompt.yes? 'Process?' if opts[:approve]
|
243
240
|
|
244
|
-
selected =
|
241
|
+
selected = block_by_name blocks, sel
|
245
242
|
puts "select_block() selected: #{selected.inspect}" if $pdebug
|
246
243
|
if allow && opts[:execute]
|
247
244
|
|
@@ -249,7 +246,6 @@ class MarkParse
|
|
249
246
|
#
|
250
247
|
cmd2 = cbs.flatten.join("\n")
|
251
248
|
fout "$ #{cmd2.to_yaml}"
|
252
|
-
cnt = 0
|
253
249
|
|
254
250
|
# Open3.popen3(cmd2) do |stdin, stdout, stderr, wait_thr|
|
255
251
|
# cnt += 1
|
@@ -257,7 +253,7 @@ class MarkParse
|
|
257
253
|
# # stdin.close # we're done
|
258
254
|
# stdout_str = stdout.read # read stdout to string. note that this will block until the command is done!
|
259
255
|
# stderr_str = stderr.read # read stderr to string
|
260
|
-
# status = wait_thr.value # will block until the command finishes; returns status that responds to .success?
|
256
|
+
# status = wait_thr.value # will block until the command finishes; returns status that responds to .success?
|
261
257
|
# fout "#{stdout_str}"
|
262
258
|
# fout "#{cnt}: err: #{stderr_str}" if stderr_str != ''
|
263
259
|
# # fout "#{cnt}: stt: #{status}"
|
@@ -278,15 +274,13 @@ class MarkParse
|
|
278
274
|
# exceptions = ready[2]
|
279
275
|
|
280
276
|
readable.each do |f|
|
281
|
-
fileno = f.fileno
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
# fout "fileno: #{fileno} EOF"
|
289
|
-
end
|
277
|
+
# fileno = f.fileno
|
278
|
+
|
279
|
+
data = f.read_nonblock(BLOCK_SIZE)
|
280
|
+
# fout "- fileno: #{fileno}\n#{data}"
|
281
|
+
fout data
|
282
|
+
rescue EOFError #=> e
|
283
|
+
# fout "fileno: #{fileno} EOF"
|
290
284
|
end
|
291
285
|
end
|
292
286
|
rescue IOError => e
|
@@ -315,7 +309,7 @@ class MarkParse
|
|
315
309
|
end
|
316
310
|
|
317
311
|
prompt = TTY::Prompt.new
|
318
|
-
sel = prompt.select("#{opts.fetch(:prompt,
|
312
|
+
sel = prompt.select("#{opts.fetch(:prompt, 'Pick one')}:", files, per_page: select_per_page)
|
319
313
|
end
|
320
314
|
|
321
315
|
sel
|
@@ -334,25 +328,29 @@ class MarkParse
|
|
334
328
|
puts "code() all: #{all.inspect}" if $pdebug
|
335
329
|
all.reverse.map do |req|
|
336
330
|
puts "code() req: #{req.inspect}" if $pdebug
|
337
|
-
|
338
|
-
end
|
331
|
+
block_by_name(table, req).fetch(:body, '')
|
332
|
+
end
|
333
|
+
.flatten(1)
|
334
|
+
.tap { |ret| puts "code() ret: #{ret.inspect}" if $pdebug }
|
339
335
|
end
|
340
336
|
|
341
|
-
def
|
337
|
+
def block_by_name(table, name, default = {})
|
342
338
|
table.select { |block| block[:name] == name }.fetch(0, default)
|
343
339
|
end
|
344
340
|
|
345
341
|
def code_blocks(table, name)
|
346
342
|
puts "code_blocks() table: #{table.inspect}" if $pdebug
|
347
343
|
puts "code_blocks() name: #{name.inspect}" if $pdebug
|
348
|
-
|
349
|
-
puts "code_blocks()
|
350
|
-
all = [
|
344
|
+
name_block = block_by_name(table, name)
|
345
|
+
puts "code_blocks() name_block: #{name_block.inspect}" if $pdebug
|
346
|
+
all = [name_block[:name]] + unroll(table, name_block[:reqs])
|
351
347
|
puts "code_blocks() all: #{all.inspect}" if $pdebug
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
348
|
+
|
349
|
+
# in order of appearance in document
|
350
|
+
table.select { |block| all.include? block[:name] }
|
351
|
+
.map { |block| block.fetch(:body, '') }
|
352
|
+
.flatten(1)
|
353
|
+
.tap { |ret| puts "code_blocks() ret: #{ret.inspect}" if $pdebug }
|
356
354
|
end
|
357
355
|
|
358
356
|
def unroll(table, reqs)
|
@@ -368,12 +366,13 @@ class MarkParse
|
|
368
366
|
|
369
367
|
all += [req]
|
370
368
|
puts "unrol() all: #{all.inspect}" if $pdebug
|
371
|
-
|
372
|
-
end.compact.flatten(1).tap { |_ret| puts "unroll() rem: #{rem.inspect}" if $pdebug }
|
369
|
+
block_by_name(table, req).fetch(:reqs, [])
|
373
370
|
end
|
374
|
-
|
371
|
+
.compact
|
372
|
+
.flatten(1)
|
373
|
+
.tap { |_ret| puts "unroll() rem: #{rem.inspect}" if $pdebug }
|
375
374
|
end
|
376
|
-
|
375
|
+
all.tap { |ret| puts "unroll() ret: #{ret.inspect}" if $pdebug }
|
377
376
|
|
378
377
|
$stderr.sync = true
|
379
378
|
$stdout.sync = true
|
@@ -386,10 +385,10 @@ end
|
|
386
385
|
#
|
387
386
|
def read_configuration!(options, configuration_path)
|
388
387
|
if Pathname.new(configuration_path).exist?
|
389
|
-
|
390
|
-
options.merge!((YAML
|
388
|
+
# rubocop:disable Security/YAMLLoad
|
389
|
+
options.merge!((YAML.load(File.open(configuration_path)) || {})
|
391
390
|
.transform_keys(&:to_sym))
|
392
|
-
|
391
|
+
# rubocop:enable Security/YAMLLoad
|
393
392
|
end
|
394
393
|
options
|
395
394
|
end
|
@@ -400,8 +399,8 @@ options = {
|
|
400
399
|
mdheadings: true,
|
401
400
|
list_blocks: false,
|
402
401
|
list_docs: false,
|
403
|
-
mdfilename:
|
404
|
-
mdfolder:
|
402
|
+
mdfilename: 'README.md',
|
403
|
+
mdfolder: '.'
|
405
404
|
}
|
406
405
|
|
407
406
|
def options_finalize!(options); end
|
@@ -415,58 +414,60 @@ read_configuration! options, ".#{APP_NAME.downcase}.yml"
|
|
415
414
|
# load_resources! options
|
416
415
|
# puts "q31 options: #{options.to_yaml}" if $pdebug
|
417
416
|
|
417
|
+
# rubocop:disable Metrics/BlockLength
|
418
418
|
option_parser = OptionParser.new do |opts|
|
419
419
|
executable_name = File.basename($PROGRAM_NAME)
|
420
420
|
opts.banner = [
|
421
|
-
|
421
|
+
"#{APP_NAME} - #{APP_DESC} (#{VERSION})".freeze,
|
422
422
|
"Usage: #{executable_name} [options]"
|
423
423
|
].join("\n")
|
424
424
|
|
425
425
|
## menu top: on_head appear in reverse order added
|
426
426
|
#
|
427
|
-
opts.on(
|
427
|
+
opts.on('--config PATH', 'Read configuration file') do |value|
|
428
428
|
read_configuration! options, value
|
429
429
|
end
|
430
430
|
|
431
431
|
## menu body: items appear in order added
|
432
432
|
#
|
433
|
-
opts.on(
|
433
|
+
opts.on('-f RELATIVE', '--mdfilename', 'Name of document') do |value|
|
434
434
|
options[:mdfilename] = value
|
435
435
|
end
|
436
436
|
|
437
|
-
opts.on(
|
437
|
+
opts.on('-p PATH', '--mdfolder', 'Path to documents') do |value|
|
438
438
|
options[:mdfolder] = value
|
439
439
|
end
|
440
440
|
|
441
|
-
opts.on(
|
441
|
+
opts.on('--list-blocks', 'List blocks') do |_value|
|
442
442
|
options[:list_blocks] = true
|
443
443
|
end
|
444
444
|
|
445
|
-
opts.on(
|
445
|
+
opts.on('--list-docs', 'List docs in current folder') do |_value|
|
446
446
|
options[:list_docs] = true
|
447
447
|
end
|
448
448
|
|
449
449
|
## menu bottom: items appear in order added
|
450
450
|
#
|
451
|
-
opts.on_tail(
|
451
|
+
opts.on_tail('-h', '--help', 'App help') do |_value|
|
452
452
|
puts option_parser.help
|
453
453
|
exit
|
454
454
|
end
|
455
455
|
|
456
|
-
opts.on_tail(
|
456
|
+
opts.on_tail('-v', '--version', 'App version') do |_value|
|
457
457
|
puts VERSION
|
458
458
|
exit
|
459
459
|
end
|
460
460
|
|
461
|
-
opts.on_tail(
|
461
|
+
opts.on_tail('-x', '--exit', 'Exit app') do |_value|
|
462
462
|
exit
|
463
463
|
end
|
464
464
|
|
465
|
-
opts.on_tail(
|
465
|
+
opts.on_tail('-0', 'Show configuration') do |_v|
|
466
466
|
options_finalize! options
|
467
467
|
puts options.to_yaml
|
468
468
|
end
|
469
469
|
end
|
470
|
+
# rubocop:enable Metrics/BlockLength
|
470
471
|
|
471
472
|
option_parser.load # filename defaults to basename of the program without suffix in a directory ~/.options
|
472
473
|
option_parser.environment # env defaults to the basename of the program.
|
@@ -475,6 +476,7 @@ options_finalize! options
|
|
475
476
|
|
476
477
|
## process
|
477
478
|
#
|
479
|
+
# rubocop:disable Metrics/BlockLength
|
478
480
|
loop do # once
|
479
481
|
mp = MarkParse.new options
|
480
482
|
options.merge!(
|
@@ -482,8 +484,9 @@ loop do # once
|
|
482
484
|
approve: true,
|
483
485
|
bash: true,
|
484
486
|
display: true,
|
487
|
+
exclude_expect_blocks: true,
|
485
488
|
execute: true,
|
486
|
-
prompt:
|
489
|
+
prompt: 'Execute',
|
487
490
|
struct: true
|
488
491
|
}
|
489
492
|
)
|
@@ -506,6 +509,7 @@ loop do # once
|
|
506
509
|
#
|
507
510
|
mp.select_block(bash: true, struct: true) if options[:mdfilename]
|
508
511
|
|
512
|
+
# rubocop:disable Style/BlockComments
|
509
513
|
=begin
|
510
514
|
# rescue ArgumentError => e
|
511
515
|
# puts "User abort: #{e}"
|
@@ -517,5 +521,9 @@ loop do # once
|
|
517
521
|
# ensure
|
518
522
|
# exit
|
519
523
|
=end
|
520
|
-
|
524
|
+
# rubocop:enable Style/BlockComments
|
525
|
+
|
526
|
+
break unless false # rubocop:disable Lint/LiteralAsCondition
|
521
527
|
end
|
528
|
+
# rubocop:enable Metrics/BlockLength
|
529
|
+
# rubocop:enable Style/GlobalVars
|
data/lib/markdown_exec.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative 'markdown_exec/version'
|
4
4
|
|
5
5
|
module MarkdownExec
|
6
6
|
class Error < StandardError; end
|
7
|
-
# Your code goes here...
|
8
7
|
|
8
|
+
# Markdown Exec
|
9
9
|
class MDExec
|
10
|
-
def self.echo(str =
|
10
|
+
def self.echo(str = '')
|
11
11
|
"#{str}#{str}"
|
12
12
|
end
|
13
13
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown_exec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fareed Stevenson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
12
|
-
dependencies:
|
11
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-prompt
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.23.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.23.1
|
13
27
|
description: Execute shell blocks in markdown files. Name blocks and require named
|
14
28
|
blocks.
|
15
29
|
email:
|
@@ -22,6 +36,7 @@ files:
|
|
22
36
|
- CHANGELOG.md
|
23
37
|
- CODE_OF_CONDUCT.md
|
24
38
|
- Gemfile
|
39
|
+
- Gemfile.lock
|
25
40
|
- LICENSE.txt
|
26
41
|
- README.md
|
27
42
|
- Rakefile
|
@@ -30,11 +45,11 @@ files:
|
|
30
45
|
- bin/setup
|
31
46
|
- lib/markdown_exec.rb
|
32
47
|
- lib/markdown_exec/version.rb
|
33
|
-
homepage: https://rubygems.org/gems/
|
48
|
+
homepage: https://rubygems.org/gems/markdown_exec
|
34
49
|
licenses:
|
35
50
|
- MIT
|
36
51
|
metadata:
|
37
|
-
homepage_uri: https://rubygems.org/gems/
|
52
|
+
homepage_uri: https://rubygems.org/gems/markdown_exec
|
38
53
|
post_install_message:
|
39
54
|
rdoc_options: []
|
40
55
|
require_paths:
|