markdown_exec 2.8.0 → 2.8.2

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.
@@ -7,5 +7,5 @@ module MarkdownExec
7
7
  BIN_NAME = 'mde'
8
8
  GEM_NAME = 'markdown_exec'
9
9
  TAP_DEBUG = 'MDE_DEBUG'
10
- VERSION = '2.8.0'
10
+ VERSION = '2.8.2'
11
11
  end
data/lib/markdown_exec.rb CHANGED
@@ -656,32 +656,6 @@ module MarkdownExec
656
656
  @options.merge(@options.run_state.to_h)
657
657
  end
658
658
 
659
- def iter_source_blocks(source, &block)
660
- case source
661
- when 1
662
- HashDelegator.new(@options).blocks_from_nested_files.each(&block)
663
- when 2
664
- blocks_in_file, menu_blocks, mdoc =
665
- HashDelegator.new(@options)
666
- .mdoc_menu_and_blocks_from_nested_files(LinkState.new)
667
- blocks_in_file.each(&block)
668
- when 3
669
- blocks_in_file, menu_blocks, mdoc =
670
- HashDelegator.new(@options)
671
- .mdoc_menu_and_blocks_from_nested_files(LinkState.new)
672
- menu_blocks.each(&block)
673
- else
674
- @options.iter_blocks_from_nested_files do |btype, fcb|
675
- case btype
676
- when :blocks
677
- yield fcb
678
- when :filter
679
- %i[blocks]
680
- end
681
- end
682
- end
683
- end
684
-
685
659
  ##
686
660
  # Returns a lambda expression based on the given procname.
687
661
  # @param procname [String] The name of the process to generate a lambda for.
@@ -916,7 +890,7 @@ module MarkdownExec
916
890
  # save value to options hash if option is named
917
891
  #
918
892
  lambda { |value|
919
- name = item[:long_name]&.present? ? '--' + item[:long_name].to_s : '-' + item[:short_name].to_s
893
+ name = item[:long_name]&.present? ? "--#{item[:long_name]}" : "-#{item[:short_name]}"
920
894
  options_parsed << item.merge(name: name, value: value)
921
895
  (item[:proccode] ? item[:proccode].call(value) : value).tap do |converted|
922
896
  options[item[:opt_name]] = converted if item[:opt_name]
@@ -1013,7 +987,16 @@ module MarkdownExec
1013
987
  # Presents a TTY prompt to select an option or exit, returns selected option or nil
1014
988
  def select_option_or_exit(prompt_text, strings, opts = {})
1015
989
  @options.select_option_with_metadata(
1016
- prompt_text, strings, opts
990
+ prompt_text,
991
+ strings,
992
+ opts,
993
+ menu_blocks: strings.map do |string|
994
+ FCB.new(
995
+ chrome: true,
996
+ dname: string,
997
+ id: string
998
+ )
999
+ end
1017
1000
  )&.fetch(:selected)
1018
1001
  end
1019
1002
 
data/lib/mdoc.rb CHANGED
@@ -85,14 +85,17 @@ module MarkdownExec
85
85
 
86
86
  dependencies = collect_dependencies(nickname)
87
87
  # !!t dependencies.count
88
- all_dependency_names = collect_unique_names(dependencies).push(nickname).uniq
88
+ all_dependency_names =
89
+ collect_unique_names(dependencies).push(nickname).uniq
89
90
  # !!t all_dependency_names.count
90
91
 
91
92
  # select blocks in order of appearance in source documents
92
93
  #
93
94
  blocks = @table.select do |fcb|
94
95
  # 2024-08-04 match nickname
95
- all_dependency_names.include?(fcb.pub_name) || all_dependency_names.include?(fcb.nickname) || all_dependency_names.include?(fcb.oname)
96
+ all_dependency_names.include?(fcb.pub_name) ||
97
+ all_dependency_names.include?(fcb.nickname) ||
98
+ all_dependency_names.include?(fcb.oname)
96
99
  end
97
100
  # !!t blocks.count
98
101
 
@@ -102,7 +105,10 @@ module MarkdownExec
102
105
  blocks = blocks.map do |fcb|
103
106
  # 2024-08-04 match oname for long block names
104
107
  # 2024-08-04 match nickname
105
- unmet_dependencies.delete(fcb.pub_name) || unmet_dependencies.delete(fcb.nickname) || unmet_dependencies.delete(fcb.oname) # may not exist if block name is duplicated
108
+ # may not exist if block name is duplicated
109
+ unmet_dependencies.delete(fcb.pub_name) ||
110
+ unmet_dependencies.delete(fcb.nickname) ||
111
+ unmet_dependencies.delete(fcb.oname)
106
112
  if (call = fcb.call)
107
113
  fcb1 = get_block_by_anyname("[#{call.match(/^%\((\S+) |\)/)[1]}]")
108
114
  fcb1.cann = call
@@ -124,8 +130,10 @@ module MarkdownExec
124
130
  # @param name [String] The name of the code block to start the collection from.
125
131
  # @return [Array<String>] An array of strings containing the collected code blocks.
126
132
  #
127
- def collect_recursively_required_code(anyname:, block_source:, label_body: true, label_format_above: nil,
128
- label_format_below: nil)
133
+ def collect_recursively_required_code(
134
+ anyname:, block_source:,
135
+ label_body: true, label_format_above: nil, label_format_below: nil
136
+ )
129
137
  block_search = collect_block_dependencies(anyname: anyname)
130
138
  if block_search[:blocks]
131
139
  blocks = collect_wrapped_blocks(block_search[:blocks])
@@ -150,8 +158,10 @@ module MarkdownExec
150
158
  elsif fcb.type == BlockType::PORT
151
159
  generate_env_variable_shell_commands(fcb)
152
160
  elsif label_body
153
- generate_label_body_code(fcb, block_source, label_format_above,
154
- label_format_below)
161
+ generate_label_body_code(
162
+ fcb, block_source,
163
+ label_format_above, label_format_below
164
+ )
155
165
  else # raw body
156
166
  fcb.body
157
167
  end
@@ -230,9 +240,14 @@ module MarkdownExec
230
240
  initialize: opts[:compressed_ids].nil?
231
241
  ) do |fcb, _hide, _collapsed_level|
232
242
  # update fcb per state
233
- if fcb.collapsible
234
- fcb.s1decorated = fcb.s1decorated + ' ' + (fcb.collapse ? opts[:menu_collapsible_symbol_collapsed] : opts[:menu_collapsible_symbol_expanded])
235
- end
243
+ next unless fcb.collapsible
244
+
245
+ fcb.s1decorated = fcb.s1decorated + ' ' +
246
+ (if fcb.collapse
247
+ opts[:menu_collapsible_symbol_collapsed]
248
+ else
249
+ opts[:menu_collapsible_symbol_expanded]
250
+ end)
236
251
  end
237
252
  opts[:compressed_ids] = collapser.compress_ids
238
253
  opts[:expanded_ids] = collapser.expand_ids
@@ -240,7 +255,9 @@ module MarkdownExec
240
255
  # remove
241
256
  # . empty chrome between code; edges are same as blanks
242
257
  #
243
- select_elements_with_neighbor_conditions(selrows) do |prev_element, current, next_element|
258
+ select_elements_with_neighbor_conditions(selrows) do |prev_element,
259
+ current,
260
+ next_element|
244
261
  !(current[:chrome] && !current.oname.present?) ||
245
262
  !(!prev_element.nil? &&
246
263
  prev_element.shell.present? &&
@@ -291,13 +308,17 @@ module MarkdownExec
291
308
 
292
309
  label_above = if label_format_above.present?
293
310
  format(label_format_above,
294
- block_source.merge({ block_name: block_name_for_bash_comment }))
311
+ block_source.merge(
312
+ { block_name: block_name_for_bash_comment }
313
+ ))
295
314
  else
296
315
  nil
297
316
  end
298
317
  label_below = if label_format_below.present?
299
318
  format(label_format_below,
300
- block_source.merge({ block_name: block_name_for_bash_comment }))
319
+ block_source.merge(
320
+ { block_name: block_name_for_bash_comment }
321
+ ))
301
322
  else
302
323
  nil
303
324
  end
@@ -334,13 +355,12 @@ module MarkdownExec
334
355
  else
335
356
  opts[:hide_blocks_by_name] &&
336
357
  ((opts[:block_name_hidden_match]&.present? &&
337
- block.oname&.match(Regexp.new(opts[:block_name_hidden_match]))) ||
358
+ block.s2title&.match(Regexp.new(opts[:block_name_hidden_match]))) ||
338
359
  (opts[:block_name_include_match]&.present? &&
339
- block.oname&.match(Regexp.new(opts[:block_name_include_match]))) ||
360
+ block.s2title&.match(Regexp.new(opts[:block_name_include_match]))) ||
340
361
  (opts[:block_name_wrapper_match]&.present? &&
341
- block.oname&.match(Regexp.new(opts[:block_name_wrapper_match])))) &&
342
- (block.oname&.present? || block[:label]&.present?)
343
-
362
+ block.s2title&.match(Regexp.new(opts[:block_name_wrapper_match])))) &&
363
+ (block.s2title&.present? || block[:label]&.present?)
344
364
  end
345
365
  end
346
366
 
@@ -415,8 +435,11 @@ module MarkdownExec
415
435
  memo
416
436
  end
417
437
 
418
- def select_elements_with_neighbor_conditions(array,
419
- last_selected_placeholder = nil, next_selected_placeholder = nil)
438
+ def select_elements_with_neighbor_conditions(
439
+ array,
440
+ last_selected_placeholder = nil,
441
+ next_selected_placeholder = nil
442
+ )
420
443
  selected_elements = []
421
444
  last_selected = last_selected_placeholder
422
445
 
@@ -463,8 +486,10 @@ if $PROGRAM_NAME == __FILE__
463
486
  end if false
464
487
 
465
488
  def test_collect_dependencies_with_valid_source
466
- @mdoc.stubs(:get_block_by_anyname).with('source1').returns(OpenStruct.new(reqs: ['source2']))
467
- @mdoc.stubs(:get_block_by_anyname).with('source2').returns(OpenStruct.new(reqs: []))
489
+ @mdoc.stubs(:get_block_by_anyname)
490
+ .with('source1').returns(OpenStruct.new(reqs: ['source2']))
491
+ @mdoc.stubs(:get_block_by_anyname)
492
+ .with('source2').returns(OpenStruct.new(reqs: []))
468
493
 
469
494
  expected = { 'source1' => ['source2'], 'source2' => [] }
470
495
  assert_equal expected, @mdoc.collect_dependencies('source1')
@@ -529,20 +554,23 @@ if $PROGRAM_NAME == __FILE__
529
554
  def test_hide_menu_block_on_name
530
555
  opts = { hide_blocks_by_name: true,
531
556
  block_name_hidden_match: 'block1' }
532
- block = FCB.new(oname: 'block1')
557
+ block = FCB.new(s2title: 'block1')
533
558
  result = @doc.hide_menu_block_on_name(opts, block)
534
559
  assert result # this should be true based on the given logic
535
560
  end
536
561
 
537
562
  def test_fcbs_per_options
538
- opts = { hide_blocks_by_name: true, block_name_hidden_match: 'block1' }
563
+ opts = { hide_blocks_by_name: true,
564
+ block_name_hidden_match: 'block1' }
539
565
  result = @doc.fcbs_per_options(opts)
540
566
  assert_equal [@table[1], @table[2]], result
541
567
  end if false ### broken test
542
568
 
543
569
  def test_recursively_required
544
570
  result = @doc.recursively_required_hash('block3')
545
- assert_equal ({ 'block3' => ['block1'], 'block1' => ['block2'], 'block2' => nil }),
571
+ assert_equal ({ 'block3' => ['block1'],
572
+ 'block1' => ['block2'],
573
+ 'block2' => nil }),
546
574
  result
547
575
 
548
576
  result_no_reqs = @doc.recursively_required_hash(nil)
@@ -585,8 +613,9 @@ if $PROGRAM_NAME == __FILE__
585
613
  # Test case 3: blocks with missing wraps
586
614
  assert_equal(
587
615
  %w[block4],
588
- @mdoc.collect_wrapped_blocks([OpenStruct.new(oname: 'block4',
589
- wraps: ['wrap4'])]).map(&:oname)
616
+ @mdoc.collect_wrapped_blocks(
617
+ [OpenStruct.new(oname: 'block4', wraps: ['wrap4'])]
618
+ ).map(&:oname)
590
619
  )
591
620
  end
592
621
  end
data/lib/menu.src.yml CHANGED
@@ -54,6 +54,7 @@
54
54
 
55
55
  - :opt_name: block_name_match
56
56
  :env_var: MDE_BLOCK_NAME_MATCH
57
+ :description: Pattern for the block name in the line defining the block
57
58
  :default: ":(?<title>\\S+)( |$)"
58
59
  :procname: val_as_str
59
60
 
data/lib/menu.yml CHANGED
@@ -44,6 +44,7 @@
44
44
  :procname: val_as_str
45
45
  - :opt_name: block_name_match
46
46
  :env_var: MDE_BLOCK_NAME_MATCH
47
+ :description: Pattern for the block name in the line defining the block
47
48
  :default: ":(?<title>\\S+)( |$)"
48
49
  :procname: val_as_str
49
50
  - :opt_name: block_name_nick_match
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: 2.8.0
4
+ version: 2.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fareed Stevenson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-10 00:00:00.000000000 Z
11
+ date: 2025-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clipboard
@@ -107,7 +107,13 @@ files:
107
107
  - assets/select_a_block.png
108
108
  - assets/select_a_file.png
109
109
  - bats/bats.bats
110
+ - bats/block-hide.bats
110
111
  - bats/block-type-opts.bats
112
+ - bats/block-type-ux-auto.bats
113
+ - bats/block-type-ux-exec.bats
114
+ - bats/block-type-ux-require.bats
115
+ - bats/block-type-ux-row-format.bats
116
+ - bats/block-type-ux-transform.bats
111
117
  - bats/block-type-vars.bats
112
118
  - bats/block-types.bats
113
119
  - bats/border.bats
@@ -136,9 +142,15 @@ files:
136
142
  - bin/tab_completion.sh
137
143
  - bin/tab_completion.sh.erb
138
144
  - docs/dev/bats-document-configuration.md
145
+ - docs/dev/block-hide.md
139
146
  - docs/dev/block-type-bash.md
140
147
  - docs/dev/block-type-opts.md
141
148
  - docs/dev/block-type-port.md
149
+ - docs/dev/block-type-ux-auto.md
150
+ - docs/dev/block-type-ux-exec.md
151
+ - docs/dev/block-type-ux-require.md
152
+ - docs/dev/block-type-ux-row-format.md
153
+ - docs/dev/block-type-ux-transform.md
142
154
  - docs/dev/block-type-vars.md
143
155
  - docs/dev/border.md
144
156
  - docs/dev/command-substitution.md