markdown_exec 1.8.6 → 1.8.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pryrc +0 -1
- data/.rubocop.yml +0 -2
- data/CHANGELOG.md +14 -2
- data/Gemfile.lock +1 -1
- data/bin/tab_completion.sh +2 -2
- data/examples/opts.md +2 -0
- data/lib/ansi_formatter.rb +1 -5
- data/lib/filter.rb +15 -3
- data/lib/hash_delegator.rb +440 -494
- data/lib/markdown_exec/version.rb +1 -1
- data/lib/mdoc.rb +33 -12
- data/lib/menu.src.yml +72 -4
- data/lib/menu.yml +62 -5
- data/lib/regexp_replacer.rb +14 -14
- data/lib/saved_assets.rb +10 -8
- metadata +4 -4
data/lib/mdoc.rb
CHANGED
@@ -23,6 +23,7 @@ module MarkdownExec
|
|
23
23
|
#
|
24
24
|
def initialize(table = [])
|
25
25
|
@table = table
|
26
|
+
# &bc '@table.count:',@table.count
|
26
27
|
end
|
27
28
|
|
28
29
|
def collect_block_code_cann(fcb)
|
@@ -69,20 +70,28 @@ module MarkdownExec
|
|
69
70
|
# @param name [String] The name of the code block to start the retrieval from.
|
70
71
|
# @return [Array<Hash>] An array of code blocks required by the specified code block.
|
71
72
|
#
|
72
|
-
def
|
73
|
+
def collect_block_dependencies(name)
|
73
74
|
name_block = get_block_by_anyname(name)
|
74
75
|
if name_block.nil? || name_block.keys.empty?
|
75
76
|
raise "Named code block `#{name}` not found. (@#{__LINE__})"
|
76
77
|
end
|
77
78
|
|
78
79
|
dependencies = collect_dependencies(name_block[:oname])
|
80
|
+
# &bc 'dependencies.count:',dependencies.count
|
79
81
|
all_dependency_names = collect_unique_names(dependencies).push(name_block[:oname]).uniq
|
80
|
-
|
82
|
+
# &bc 'all_dependency_names.count:',all_dependency_names.count
|
81
83
|
|
82
|
-
# in order of appearance in
|
83
|
-
#
|
84
|
-
blocks = @table.select
|
85
|
-
|
84
|
+
# select non-chrome blocks in order of appearance in source documents
|
85
|
+
#
|
86
|
+
blocks = @table.select do |fcb|
|
87
|
+
!fcb.fetch(:chrome, false) && all_dependency_names.include?(fcb.fetch(:oname))
|
88
|
+
end
|
89
|
+
# &bc 'blocks.count:',blocks.count
|
90
|
+
|
91
|
+
## add cann key to blocks, calc unmet_dependencies
|
92
|
+
#
|
93
|
+
unmet_dependencies = all_dependency_names.dup
|
94
|
+
blocks = blocks.map do |fcb|
|
86
95
|
unmet_dependencies.delete(fcb[:oname]) # may not exist if block name is duplicated
|
87
96
|
if (call = fcb[:call])
|
88
97
|
[get_block_by_oname("[#{call.match(/^%\((\S+) |\)/)[1]}]")
|
@@ -91,6 +100,7 @@ module MarkdownExec
|
|
91
100
|
[]
|
92
101
|
end + [fcb]
|
93
102
|
end.flatten(1)
|
103
|
+
# &bc 'unmet_dependencies.count:',unmet_dependencies.count
|
94
104
|
|
95
105
|
{ all_dependency_names: all_dependency_names,
|
96
106
|
blocks: blocks,
|
@@ -103,11 +113,13 @@ module MarkdownExec
|
|
103
113
|
# @param name [String] The name of the code block to start the collection from.
|
104
114
|
# @return [Array<String>] An array of strings containing the collected code blocks.
|
105
115
|
#
|
106
|
-
def collect_recursively_required_code(name, label_body: true, label_format_above: nil,
|
107
|
-
label_format_below: nil
|
108
|
-
block_search =
|
116
|
+
def collect_recursively_required_code(name, block_source:, label_body: true, label_format_above: nil,
|
117
|
+
label_format_below: nil)
|
118
|
+
block_search = collect_block_dependencies(name)
|
109
119
|
if block_search[:blocks]
|
110
120
|
blocks = collect_wrapped_blocks(block_search[:blocks])
|
121
|
+
# &bc 'blocks.count:',blocks.count
|
122
|
+
|
111
123
|
block_search.merge(
|
112
124
|
{ block_names: blocks.map { |block| block[:oname] },
|
113
125
|
code: blocks.map do |fcb|
|
@@ -134,6 +146,8 @@ module MarkdownExec
|
|
134
146
|
else
|
135
147
|
block_search.merge({ block_names: [], code: [] })
|
136
148
|
end
|
149
|
+
rescue StandardError
|
150
|
+
error_handler('collect_recursively_required_code')
|
137
151
|
end
|
138
152
|
|
139
153
|
def collect_unique_names(hash)
|
@@ -160,6 +174,13 @@ module MarkdownExec
|
|
160
174
|
end.flatten(1).compact
|
161
175
|
end
|
162
176
|
|
177
|
+
def error_handler(name = '', opts = {})
|
178
|
+
Exceptions.error_handler(
|
179
|
+
"MDoc.#{name} -- #{$!}",
|
180
|
+
opts
|
181
|
+
)
|
182
|
+
end
|
183
|
+
|
163
184
|
# Retrieves code blocks based on the provided options.
|
164
185
|
#
|
165
186
|
# @param opts [Hash] The options used for filtering code blocks.
|
@@ -432,13 +453,13 @@ if $PROGRAM_NAME == __FILE__
|
|
432
453
|
end
|
433
454
|
|
434
455
|
### broken test
|
435
|
-
def
|
436
|
-
result = @doc.
|
456
|
+
def test_collect_block_dependencies
|
457
|
+
result = @doc.collect_block_dependencies('block3')[:blocks]
|
437
458
|
expected_result = [@table[0], @table[1], @table[2]]
|
438
459
|
assert_equal expected_result, result
|
439
460
|
|
440
461
|
assert_raises(RuntimeError) do
|
441
|
-
@doc.
|
462
|
+
@doc.collect_block_dependencies('missing_block')
|
442
463
|
end
|
443
464
|
end
|
444
465
|
|
data/lib/menu.src.yml
CHANGED
@@ -238,17 +238,17 @@
|
|
238
238
|
:opt_name: find_path
|
239
239
|
:procname: val_as_str
|
240
240
|
|
241
|
-
- :default: "^# *(?<
|
241
|
+
- :default: "^# *(?<line>[^#]*?) *$"
|
242
242
|
:env_var: MDE_HEADING1_MATCH
|
243
243
|
:opt_name: heading1_match
|
244
244
|
:procname: val_as_str
|
245
245
|
|
246
|
-
- :default: "^## *(?<
|
246
|
+
- :default: "^## *(?<line>[^#]*?) *$"
|
247
247
|
:env_var: MDE_HEADING2_MATCH
|
248
248
|
:opt_name: heading2_match
|
249
249
|
:procname: val_as_str
|
250
250
|
|
251
|
-
- :default: "^### *(?<
|
251
|
+
- :default: "^### *(?<line>.+?) *$"
|
252
252
|
:env_var: MDE_HEADING3_MATCH
|
253
253
|
:opt_name: heading3_match
|
254
254
|
:procname: val_as_str
|
@@ -363,7 +363,7 @@
|
|
363
363
|
:procname: val_as_bool
|
364
364
|
|
365
365
|
- :arg_name: BOOL
|
366
|
-
:default:
|
366
|
+
:default: true
|
367
367
|
:description: Controls whether headings(levels 1,2,3) are displayed in the block selection menu
|
368
368
|
:env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
|
369
369
|
:opt_name: menu_blocks_with_headings
|
@@ -419,6 +419,42 @@
|
|
419
419
|
:opt_name: menu_final_divider
|
420
420
|
:procname: val_as_str
|
421
421
|
|
422
|
+
- :default: fg_rgbh_80_80_c0
|
423
|
+
:description: Color for heading 1 in menu
|
424
|
+
:env_var: MDE_MENU_HEADING1_COLOR
|
425
|
+
:opt_name: menu_heading1_color
|
426
|
+
:procname: val_as_str
|
427
|
+
|
428
|
+
- :default: "# %{line}"
|
429
|
+
:description: format for menu heading1 in menu
|
430
|
+
:env_var: MDE_MENU_HEADING1_FORMAT
|
431
|
+
:opt_name: menu_heading1_format
|
432
|
+
:procname: val_as_str
|
433
|
+
|
434
|
+
- :default: fg_rgbh_60_60_c0
|
435
|
+
:description: Color for heading 2 in menu
|
436
|
+
:env_var: MDE_MENU_HEADING2_COLOR
|
437
|
+
:opt_name: menu_heading2_color
|
438
|
+
:procname: val_as_str
|
439
|
+
|
440
|
+
- :default: "## %{line}"
|
441
|
+
:description: format for menu heading2 in menu
|
442
|
+
:env_var: MDE_MENU_HEADING2_FORMAT
|
443
|
+
:opt_name: menu_heading2_format
|
444
|
+
:procname: val_as_str
|
445
|
+
|
446
|
+
- :default: fg_rgbh_40_40_c0
|
447
|
+
:description: Color for heading 3 in menu
|
448
|
+
:env_var: MDE_MENU_HEADING3_COLOR
|
449
|
+
:opt_name: menu_heading3_color
|
450
|
+
:procname: val_as_str
|
451
|
+
|
452
|
+
- :default: "### %{line}"
|
453
|
+
:description: format for menu heading3 in menu
|
454
|
+
:env_var: MDE_MENU_HEADING3_FORMAT
|
455
|
+
:opt_name: menu_heading3_format
|
456
|
+
:procname: val_as_str
|
457
|
+
|
422
458
|
- :default: "0"
|
423
459
|
:description: Import levels for blocks to appear in menu. Empty is all.
|
424
460
|
:env_var: MDE_MENU_IMPORT_LEVEL_MATCH
|
@@ -440,6 +476,25 @@
|
|
440
476
|
:opt_name: menu_include_imported_notes
|
441
477
|
:procname: val_as_bool
|
442
478
|
|
479
|
+
- :arg_name: BOOL
|
480
|
+
:default: true
|
481
|
+
:description: Display inherited lines at top of menu (vs bottom)
|
482
|
+
:env_var: MDE_MENU_INHERITED_LINES_AT_TOP
|
483
|
+
:opt_name: menu_inherited_lines_at_top
|
484
|
+
:procname: val_as_bool
|
485
|
+
|
486
|
+
- :default: fg_rgbh_94_00_D3
|
487
|
+
:description: Color of inherited lines in menu
|
488
|
+
:env_var: MDE_MENU_INHERITED_LINES_COLOR
|
489
|
+
:opt_name: menu_inherited_lines_color
|
490
|
+
:procname: val_as_str
|
491
|
+
|
492
|
+
- :default: "%{line}"
|
493
|
+
:description: format for inherited lines in menu
|
494
|
+
:env_var: MDE_MENU_INHERITED_LINES_FORMAT
|
495
|
+
:opt_name: menu_inherited_lines_format
|
496
|
+
:procname: val_as_str
|
497
|
+
|
443
498
|
- :default:
|
444
499
|
:line: ""
|
445
500
|
:description: opening demarcation for menu
|
@@ -511,6 +566,12 @@
|
|
511
566
|
:opt_name: menu_opts_set_format
|
512
567
|
:procname: val_as_str
|
513
568
|
|
569
|
+
- :default: "."
|
570
|
+
:description: Block name to display menu
|
571
|
+
:env_var: MDE_MENU_PERSIST_BLOCK_NAME
|
572
|
+
:opt_name: menu_persist_block_name
|
573
|
+
:procname: val_as_str
|
574
|
+
|
514
575
|
- :default: fg_rgbh_ff_ff_ff
|
515
576
|
:description: Color of menu task
|
516
577
|
:env_var: MDE_MENU_TASK_COLOR
|
@@ -567,6 +628,13 @@
|
|
567
628
|
:opt_name: menu_with_exit
|
568
629
|
:procname: val_as_bool
|
569
630
|
|
631
|
+
- :arg_name: BOOL
|
632
|
+
:default: true
|
633
|
+
:description: Display inherited lines in menu
|
634
|
+
:env_var: MDE_MENU_WITH_INHERITED_LINES
|
635
|
+
:opt_name: menu_with_inherited_lines
|
636
|
+
:procname: val_as_bool
|
637
|
+
|
570
638
|
- :arg_name: BOOL
|
571
639
|
:default: false
|
572
640
|
:description: Hide decorative menu entries
|
data/lib/menu.yml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# MDE - Markdown Executor (1.8.
|
1
|
+
# MDE - Markdown Executor (1.8.7)
|
2
2
|
---
|
3
3
|
- :description: Show current configuration values
|
4
4
|
:procname: show_config
|
@@ -205,15 +205,15 @@
|
|
205
205
|
:long_name: find-path
|
206
206
|
:opt_name: find_path
|
207
207
|
:procname: val_as_str
|
208
|
-
- :default: "^# *(?<
|
208
|
+
- :default: "^# *(?<line>[^#]*?) *$"
|
209
209
|
:env_var: MDE_HEADING1_MATCH
|
210
210
|
:opt_name: heading1_match
|
211
211
|
:procname: val_as_str
|
212
|
-
- :default: "^## *(?<
|
212
|
+
- :default: "^## *(?<line>[^#]*?) *$"
|
213
213
|
:env_var: MDE_HEADING2_MATCH
|
214
214
|
:opt_name: heading2_match
|
215
215
|
:procname: val_as_str
|
216
|
-
- :default: "^### *(?<
|
216
|
+
- :default: "^### *(?<line>.+?) *$"
|
217
217
|
:env_var: MDE_HEADING3_MATCH
|
218
218
|
:opt_name: heading3_match
|
219
219
|
:procname: val_as_str
|
@@ -308,7 +308,7 @@
|
|
308
308
|
:opt_name: menu_blocks_with_docname
|
309
309
|
:procname: val_as_bool
|
310
310
|
- :arg_name: BOOL
|
311
|
-
:default:
|
311
|
+
:default: true
|
312
312
|
:description: Controls whether headings(levels 1,2,3) are displayed in the block
|
313
313
|
selection menu
|
314
314
|
:env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
|
@@ -356,6 +356,36 @@
|
|
356
356
|
:env_var: MDE_MENU_FINAL_DIVIDER
|
357
357
|
:opt_name: menu_final_divider
|
358
358
|
:procname: val_as_str
|
359
|
+
- :default: fg_rgbh_80_80_c0
|
360
|
+
:description: Color for heading 1 in menu
|
361
|
+
:env_var: MDE_MENU_HEADING1_COLOR
|
362
|
+
:opt_name: menu_heading1_color
|
363
|
+
:procname: val_as_str
|
364
|
+
- :default: "# %{line}"
|
365
|
+
:description: format for menu heading1 in menu
|
366
|
+
:env_var: MDE_MENU_HEADING1_FORMAT
|
367
|
+
:opt_name: menu_heading1_format
|
368
|
+
:procname: val_as_str
|
369
|
+
- :default: fg_rgbh_60_60_c0
|
370
|
+
:description: Color for heading 2 in menu
|
371
|
+
:env_var: MDE_MENU_HEADING2_COLOR
|
372
|
+
:opt_name: menu_heading2_color
|
373
|
+
:procname: val_as_str
|
374
|
+
- :default: "## %{line}"
|
375
|
+
:description: format for menu heading2 in menu
|
376
|
+
:env_var: MDE_MENU_HEADING2_FORMAT
|
377
|
+
:opt_name: menu_heading2_format
|
378
|
+
:procname: val_as_str
|
379
|
+
- :default: fg_rgbh_40_40_c0
|
380
|
+
:description: Color for heading 3 in menu
|
381
|
+
:env_var: MDE_MENU_HEADING3_COLOR
|
382
|
+
:opt_name: menu_heading3_color
|
383
|
+
:procname: val_as_str
|
384
|
+
- :default: "### %{line}"
|
385
|
+
:description: format for menu heading3 in menu
|
386
|
+
:env_var: MDE_MENU_HEADING3_FORMAT
|
387
|
+
:opt_name: menu_heading3_format
|
388
|
+
:procname: val_as_str
|
359
389
|
- :default: '0'
|
360
390
|
:description: Import levels for blocks to appear in menu. Empty is all.
|
361
391
|
:env_var: MDE_MENU_IMPORT_LEVEL_MATCH
|
@@ -373,6 +403,22 @@
|
|
373
403
|
:env_var: MDE_MENU_INCLUDE_IMPORTED_NOTES
|
374
404
|
:opt_name: menu_include_imported_notes
|
375
405
|
:procname: val_as_bool
|
406
|
+
- :arg_name: BOOL
|
407
|
+
:default: true
|
408
|
+
:description: Display inherited lines at top of menu (vs bottom)
|
409
|
+
:env_var: MDE_MENU_INHERITED_LINES_AT_TOP
|
410
|
+
:opt_name: menu_inherited_lines_at_top
|
411
|
+
:procname: val_as_bool
|
412
|
+
- :default: fg_rgbh_94_00_D3
|
413
|
+
:description: Color of inherited lines in menu
|
414
|
+
:env_var: MDE_MENU_INHERITED_LINES_COLOR
|
415
|
+
:opt_name: menu_inherited_lines_color
|
416
|
+
:procname: val_as_str
|
417
|
+
- :default: "%{line}"
|
418
|
+
:description: format for inherited lines in menu
|
419
|
+
:env_var: MDE_MENU_INHERITED_LINES_FORMAT
|
420
|
+
:opt_name: menu_inherited_lines_format
|
421
|
+
:procname: val_as_str
|
376
422
|
- :default:
|
377
423
|
:line: ''
|
378
424
|
:description: opening demarcation for menu
|
@@ -431,6 +477,11 @@
|
|
431
477
|
:env_var: MDE_MENU_OPTS_SET_FORMAT
|
432
478
|
:opt_name: menu_opts_set_format
|
433
479
|
:procname: val_as_str
|
480
|
+
- :default: "."
|
481
|
+
:description: Block name to display menu
|
482
|
+
:env_var: MDE_MENU_PERSIST_BLOCK_NAME
|
483
|
+
:opt_name: menu_persist_block_name
|
484
|
+
:procname: val_as_str
|
434
485
|
- :default: fg_rgbh_ff_ff_ff
|
435
486
|
:description: Color of menu task
|
436
487
|
:env_var: MDE_MENU_TASK_COLOR
|
@@ -478,6 +529,12 @@
|
|
478
529
|
:env_var: MDE_MENU_WITH_EXIT
|
479
530
|
:opt_name: menu_with_exit
|
480
531
|
:procname: val_as_bool
|
532
|
+
- :arg_name: BOOL
|
533
|
+
:default: true
|
534
|
+
:description: Display inherited lines in menu
|
535
|
+
:env_var: MDE_MENU_WITH_INHERITED_LINES
|
536
|
+
:opt_name: menu_with_inherited_lines
|
537
|
+
:procname: val_as_bool
|
481
538
|
- :arg_name: BOOL
|
482
539
|
:default: false
|
483
540
|
:description: Hide decorative menu entries
|
data/lib/regexp_replacer.rb
CHANGED
@@ -15,28 +15,28 @@ class RegexpReplacer
|
|
15
15
|
def perform_replacement(option)
|
16
16
|
content = File.read(@file_path)
|
17
17
|
modified_content = case option
|
18
|
-
when
|
19
|
-
|
20
|
-
when
|
21
|
-
|
18
|
+
when 'v'
|
19
|
+
verbose(content)
|
20
|
+
when 'q'
|
21
|
+
quiet(content)
|
22
22
|
else
|
23
|
-
raise "Invalid option. Please choose
|
23
|
+
raise "Invalid option. Please choose 'v' or 'q'."
|
24
24
|
end
|
25
25
|
File.write(@file_path, modified_content)
|
26
26
|
end
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
# Replacement for pattern
|
31
|
-
def
|
32
|
-
regexp = /^( *)# (
|
33
|
-
substitution = '\1;;pp __LINE__,\3 #\2'
|
30
|
+
# Replacement for pattern 'v'
|
31
|
+
def verbose(content)
|
32
|
+
regexp = /^( *)# (&\w+) ('.+)/
|
33
|
+
substitution = '\1;;pp [__LINE__,\3] #\2'
|
34
34
|
content.gsub(regexp, substitution)
|
35
35
|
end
|
36
36
|
|
37
|
-
# Replacement for pattern
|
38
|
-
def
|
39
|
-
regexp = /^( *);;pp __LINE__,(.+) #(
|
37
|
+
# Replacement for pattern 'q'
|
38
|
+
def quiet(content)
|
39
|
+
regexp = /^( *);; ?pp \[__LINE__,(.+)\] #(&\w+)/
|
40
40
|
substitution = '\1# \3 \2'
|
41
41
|
content.gsub(regexp, substitution)
|
42
42
|
end
|
@@ -44,14 +44,14 @@ end
|
|
44
44
|
|
45
45
|
# Running the script with command line arguments
|
46
46
|
if ARGV.length != 2
|
47
|
-
puts "Usage: ruby regexp_replacer.rb [file_path] [option (
|
47
|
+
puts "Usage: ruby regexp_replacer.rb [file_path] [option ('v' or 'q')]"
|
48
48
|
exit
|
49
49
|
end
|
50
50
|
|
51
51
|
file_path, option = ARGV
|
52
52
|
replacer = RegexpReplacer.new(file_path)
|
53
53
|
begin
|
54
|
-
replacer.perform_replacement(option
|
54
|
+
replacer.perform_replacement(option)
|
55
55
|
puts "Replacement performed successfully."
|
56
56
|
rescue StandardError => e
|
57
57
|
puts "Error: #{e.message}"
|
data/lib/saved_assets.rb
CHANGED
@@ -12,18 +12,20 @@ module MarkdownExec
|
|
12
12
|
# method derives a name for stdout redirection.
|
13
13
|
#
|
14
14
|
class SavedAsset
|
15
|
-
FNR11 =
|
16
|
-
FNR12 = '
|
15
|
+
FNR11 = %r{/|:}.freeze
|
16
|
+
FNR12 = '_'
|
17
|
+
DEFAULT_FTIME = '%F-%H-%M-%S'
|
17
18
|
|
18
19
|
# Generates a formatted script name based on the provided parameters.
|
19
|
-
def self.script_name(filename:, prefix:, time:, blockname:)
|
20
|
-
fne = filename.gsub(
|
21
|
-
"#{[prefix, time.strftime(
|
20
|
+
def self.script_name(filename:, prefix:, time:, blockname:, ftime: DEFAULT_FTIME, join_str: '_', pattern: FNR11, replace: FNR12, exts: '.sh')
|
21
|
+
fne = filename.gsub(pattern, replace)
|
22
|
+
"#{[prefix, time.strftime(ftime), fne, ',', blockname].join(join_str)}#{exts}"
|
22
23
|
end
|
23
24
|
|
24
25
|
# Generates a formatted stdout name based on the provided parameters.
|
25
|
-
def self.stdout_name(filename:, prefix:, time:, blockname:)
|
26
|
-
|
26
|
+
def self.stdout_name(filename:, prefix:, time:, blockname:, ftime: DEFAULT_FTIME, join_str: '_', pattern: FNR11, replace: FNR12, exts: '.out.txt')
|
27
|
+
fne = filename.gsub(pattern, replace)
|
28
|
+
"#{[prefix, time.strftime(ftime), fne, ',', blockname].join(join_str)}#{exts}"
|
27
29
|
end
|
28
30
|
end
|
29
31
|
end
|
@@ -50,7 +52,7 @@ if $PROGRAM_NAME == __FILE__
|
|
50
52
|
time = Time.new(2023, 1, 1, 12, 0, 0)
|
51
53
|
blockname = 'block1'
|
52
54
|
|
53
|
-
expected_name = 'test_2023-01-01-12-00-00_sample.
|
55
|
+
expected_name = 'test_2023-01-01-12-00-00_sample.txt_,_block1.out.txt'
|
54
56
|
assert_equal expected_name,
|
55
57
|
MarkdownExec::SavedAsset.stdout_name(filename: filename, prefix: prefix, time: time,
|
56
58
|
blockname: blockname)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: markdown_exec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.8.
|
4
|
+
version: 1.8.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fareed Stevenson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-12-
|
11
|
+
date: 2023-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: clipboard
|
@@ -81,8 +81,8 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.2.0
|
83
83
|
description: Interactively select and execute fenced code blocks in markdown files.
|
84
|
-
Build complex scripts by
|
85
|
-
|
84
|
+
Build complex scripts by naming and requiring blocks. Log resulting scripts and
|
85
|
+
output. Re-run scripts.
|
86
86
|
email:
|
87
87
|
- fareed@phomento.com
|
88
88
|
executables:
|