markdown_exec 1.3.2 → 1.3.3.1

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.
data/lib/menu.yml CHANGED
@@ -1,4 +1,4 @@
1
- # MDE - Markdown Executor (1.3.2)
1
+ # MDE - Markdown Executor (1.3.3.1)
2
2
  ---
3
3
  - :arg_name: NAME
4
4
  :compreply: false
@@ -101,6 +101,12 @@
101
101
  :long_name: pwd
102
102
  :opt_name: pwd
103
103
  :procname: val_as_bool
104
+ - :arg_name: BOOL
105
+ :default: false
106
+ :description: Display only blocks of type "bash"
107
+ :env_var: MDE_BASH_ONLY
108
+ :opt_name: bash_only
109
+ :procname: val_as_bool
104
110
  - :arg_name: INT.0-3
105
111
  :default: 1
106
112
  :description: Output display level (0 to 3 [data, +context, +info])
@@ -108,6 +114,32 @@
108
114
  :long_name: display-level
109
115
  :opt_name: display_level
110
116
  :procname: val_as_int
117
+ - :arg_name: REGEX
118
+ :default:
119
+ :description: Exclude blocks with name matching
120
+ :env_var: MDE_EXCLUDE_BY_NAME_REGEX
121
+ :opt_name: exclude_by_name_regex
122
+ :procname: val_as_str
123
+ - :arg_name: REGEX
124
+ :default:
125
+ :description: Exclude blocks with shell matching
126
+ :env_var: MDE_EXCLUDE_BY_SHELL_REGEX
127
+ :opt_name: exclude_by_shell_regex
128
+ :procname: val_as_str
129
+ - :arg_name: BOOL
130
+ :default: true
131
+ :description: Hide all blocks of type "expect"
132
+ :env_var: MDE_EXCLUDE_EXPECT_BLOCKS
133
+ :opt_name: exclude_expect_blocks
134
+ :procname: val_as_bool
135
+ - :arg_name: BOOL
136
+ :default: true
137
+ :description: |-
138
+ Exclude blocks with name matching expression " \
139
+ "`block_name_hidden_match`
140
+ :env_var: MDE_HIDE_BLOCKS_BY_NAME
141
+ :opt_name: hide_blocks_by_name
142
+ :procname: val_as_bool
111
143
  - :arg_name: INT.1-
112
144
  :default: 32
113
145
  :description: Max. items to return in list
@@ -133,6 +165,18 @@
133
165
  :env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
134
166
  :opt_name: menu_blocks_with_headings
135
167
  :procname: val_as_bool
168
+ - :arg_name: BOOL
169
+ :default: true
170
+ :description: Display Exit option at top of menu
171
+ :env_var: MDE_MENU_EXIT_AT_TOP
172
+ :opt_name: menu_exit_at_top
173
+ :procname: val_as_bool
174
+ - :arg_name: BOOL
175
+ :default: true
176
+ :description: Display Exit option in menu
177
+ :env_var: MDE_MENU_WITH_EXIT
178
+ :opt_name: menu_with_exit
179
+ :procname: val_as_bool
136
180
  - :arg_name: BOOL
137
181
  :default: false
138
182
  :description: Display summary for execution
@@ -140,6 +184,12 @@
140
184
  :long_name: output-execution-summary
141
185
  :opt_name: output_execution_summary
142
186
  :procname: val_as_bool
187
+ - :arg_name: BOOL
188
+ :default: false
189
+ :description: Output saved script filename at end of execution
190
+ :env_var: MDE_OUTPUT_SAVED_SCRIPT_FILENAME
191
+ :opt_name: output_saved_script_filename
192
+ :procname: val_as_bool
143
193
  - :arg_name: BOOL
144
194
  :default: false
145
195
  :description: Display script prior to execution
@@ -206,6 +256,18 @@
206
256
  :env_var: MDE_SAVED_STDOUT_GLOB
207
257
  :opt_name: saved_stdout_glob
208
258
  :procname: val_as_str
259
+ - :arg_name: REGEX
260
+ :default:
261
+ :description: Select blocks with name matching
262
+ :env_var: MDE_SELECT_BY_NAME_REGEX
263
+ :opt_name: select_by_name_regex
264
+ :procname: val_as_str
265
+ - :arg_name: REGEX
266
+ :default:
267
+ :description: Select blocks with shell matching
268
+ :env_var: MDE_SELECT_BY_SHELL_REGEX
269
+ :opt_name: select_by_shell_regex
270
+ :procname: val_as_str
209
271
  - :default: "^[\\(\\[].*[\\)\\]]$"
210
272
  :description: Pattern for blocks to hide from user-selection
211
273
  :env_var: MDE_BLOCK_NAME_HIDDEN_MATCH
@@ -223,11 +285,11 @@
223
285
  :env_var: MDE_BLOCK_REQUIRED_SCAN
224
286
  :opt_name: block_required_scan
225
287
  :procname: val_as_str
226
- - :default: "<(?<full>(?<type>\\$)?(?<name>[A-Za-z]\\S*))"
288
+ - :default: "<(?<full>(?<type>\\$)?(?<name>[A-Za-z_\\-\\.\\w]+))"
227
289
  :env_var: MDE_BLOCK_STDIN_SCAN
228
290
  :opt_name: block_stdin_scan
229
291
  :procname: val_as_str
230
- - :default: ">(?<full>(?<type>\\$)?(?<name>[A-Za-z]\\S*))"
292
+ - :default: ">(?<full>(?<type>\\$)?(?<name>[A-Za-z_\\-\\.\\w]+))"
231
293
  :env_var: MDE_BLOCK_STDOUT_SCAN
232
294
  :opt_name: block_stdout_scan
233
295
  :procname: val_as_str
@@ -239,7 +301,7 @@
239
301
  :env_var: MDE_FENCED_START_AND_END_MATCH
240
302
  :opt_name: fenced_start_and_end_match
241
303
  :procname: val_as_str
242
- - :default: "^`{3,}(?<shell>[^`\\s]*) *(?<name>.*)$"
304
+ - :default: "^`{3,}(?<shell>[^`\\s]*) *:?(?<name>[^\\s]*) *(?<rest>.*) *$"
243
305
  :env_var: MDE_FENCED_START_EX_MATCH
244
306
  :opt_name: fenced_start_ex_match
245
307
  :procname: val_as_str
@@ -255,6 +317,10 @@
255
317
  :env_var: MDE_HEADING3_MATCH
256
318
  :opt_name: heading3_match
257
319
  :procname: val_as_str
320
+ - :default: "^ *@import (.+)$"
321
+ :env_var: MDE_IMPORT_PATTERN
322
+ :opt_name: import_pattern
323
+ :procname: val_as_str
258
324
  - :default: "*.[Mm][Dd]"
259
325
  :env_var: MDE_MD_FILENAME_GLOB
260
326
  :opt_name: md_filename_glob
@@ -1,7 +1,21 @@
1
+ #!/usr/bin/env ruby
1
2
  # frozen_string_literal: true
2
3
 
3
4
  # encoding=utf-8
4
5
 
6
+ # version 2023-10-02
7
+
8
+ require 'bundler/setup'
9
+ Bundler.require(:default)
10
+
11
+ class FalseClass
12
+ unless defined?(blank?)
13
+ def present?
14
+ true
15
+ end
16
+ end
17
+ end
18
+
5
19
  # is the value empty?
6
20
  #
7
21
  class String
@@ -37,3 +51,33 @@ class Object
37
51
  end
38
52
  end
39
53
  end
54
+
55
+ if $PROGRAM_NAME == __FILE__
56
+ require 'minitest/autorun'
57
+
58
+ class TestStringMethods < Minitest::Test
59
+ def test_blank
60
+ assert "".blank?
61
+ assert " ".blank?
62
+ assert "\t\n\r".blank?
63
+ refute "foo".blank?
64
+ end
65
+
66
+ def test_present
67
+ assert "foo".present?
68
+ refute "".present?
69
+ end
70
+ end
71
+
72
+ class TestObjectMethods < Minitest::Test
73
+ def test_present
74
+ assert "foo".present?
75
+ refute "".present?
76
+ assert Object.new.present?
77
+ assert 123.present?
78
+ assert true.present?
79
+ assert false.present?
80
+ refute nil.present?
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # output standard header for file load during testing
4
+ #
5
+ def spec_source(file, env_var_name = 'SPEC_DEBUG')
6
+ if (->(val) { val.nil? ? false : !(val.empty? || val == '0') })
7
+ .call(ENV.fetch(env_var_name, nil))
8
+ puts "#{env_var_name}: #{file}"
9
+ end
10
+ end
data/lib/tap.rb CHANGED
@@ -5,16 +5,44 @@
5
5
  require 'json'
6
6
  require 'yaml'
7
7
 
8
- require_relative 'env'
9
- require_relative 'object_present'
8
+ # is the value a non-empty string or a binary?
9
+ #
10
+ # :reek:ManualDispatch ### temp
11
+ class Object
12
+ unless defined?(present?)
13
+ def present?
14
+ case self.class.to_s
15
+ when 'FalseClass', 'TrueClass'
16
+ true
17
+ else
18
+ self && (!respond_to?(:empty?) || !empty?)
19
+ end
20
+ end
21
+ end
22
+ end
10
23
 
11
- include Env
24
+ unless defined?(Env)
25
+ # utility functions to read environment variables
26
+ #
27
+ module Env
28
+ # :reek:UtilityFunction
29
+ def env_int(name, default: 0)
30
+ return default if name.nil? || (val = ENV.fetch(name, nil)).nil?
31
+ return default if val.empty?
32
+
33
+ val.to_i
34
+ end
35
+ end
36
+ end
12
37
 
13
38
  # rubocop:disable Metrics/ParameterLists
14
39
 
15
40
  ## application-level debug control
16
41
  #
42
+ # :reek:TooManyConstants
17
43
  module Tap
44
+ include Env
45
+
18
46
  DN = 'return'
19
47
  NONE = 0x0
20
48
  T1 = 1 # RESULT
@@ -49,6 +77,8 @@ module Tap
49
77
  $tap_enable = false
50
78
  $tap_mask = ALL2
51
79
 
80
+ # :reek:BooleanParameter
81
+ # :reek:ControlParameter
52
82
  def tap_config(enable: true, envvar: nil, value: nil)
53
83
  $tap_enable = false
54
84
  if envvar
@@ -66,7 +96,10 @@ module Tap
66
96
  self
67
97
  end
68
98
 
69
- def tap_inspect(name_ = nil, caller0: nil, mask: TDD, name: DN, source: nil, type: nil)
99
+ # :reek:ControlParameter
100
+ # :reek:LongParameterList
101
+ def tap_inspect(name_ = nil, caller_first: nil, mask: TDD, name: DN, source: nil,
102
+ type: nil)
70
103
  return self unless $tap_enable
71
104
  return self unless (mask & $tap_mask).positive?
72
105
 
@@ -74,7 +107,7 @@ module Tap
74
107
  outs = []
75
108
  outs.push(source.to_s) if source.present?
76
109
 
77
- vs = (caller0 || caller[0]).scan(/in `?(\S+)'$/).fetch(0, []).fetch(0, '')
110
+ vs = (caller_first || caller[0]).scan(/in `?(\S+)'$/).fetch(0, []).fetch(0, '')
78
111
  outs.push("#{vs}()") if vs.present?
79
112
 
80
113
  outs.push(tap_named_value(name_ || name, method(fn).call))
@@ -91,6 +124,14 @@ module Tap
91
124
  self
92
125
  end
93
126
 
127
+ def tap_pry
128
+ return self unless $tap_enable
129
+
130
+ binding.pry
131
+ self
132
+ end
133
+
134
+ # :reek:ControlParameter
94
135
  def tap_puts(name_ = nil, mask: TDD, name: nil)
95
136
  return self unless $tap_enable
96
137
  return self unless (mask & $tap_mask).positive?
@@ -99,8 +140,11 @@ module Tap
99
140
  self
100
141
  end
101
142
 
102
- def tap_yaml(name_ = nil, caller0: nil, mask: TDD, name: DN, source: nil)
103
- tap_inspect name_, caller0: (caller0 || caller[0]), mask: mask, name: name, source: source, type: :yaml
143
+ # :reek:ControlParameter
144
+ # :reek:LongParameterList
145
+ def tap_yaml(name_ = nil, caller_first: nil, mask: TDD, name: DN, source: nil)
146
+ tap_inspect name_, caller_first: (caller_first || caller[0]),
147
+ mask: mask, name: name, source: source, type: :yaml
104
148
  end
105
149
 
106
150
  private
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.3.2
4
+ version: 1.3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fareed Stevenson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-13 00:00:00.000000000 Z
11
+ date: 2023-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: clipboard
@@ -110,19 +110,19 @@ files:
110
110
  - bin/setup
111
111
  - bin/tab_completion.sh
112
112
  - bin/tab_completion.sh.erb
113
+ - lib/cached_nested_file_reader.rb
113
114
  - lib/cli.rb
114
115
  - lib/colorize.rb
115
116
  - lib/env.rb
116
117
  - lib/env_opts.rb
117
118
  - lib/environment_opt_parse.rb
118
- - lib/globfiles.rb
119
119
  - lib/markdown_exec.rb
120
120
  - lib/markdown_exec/version.rb
121
121
  - lib/menu.yml
122
122
  - lib/object_present.rb
123
+ - lib/rspec_helpers.rb
123
124
  - lib/shared.rb
124
125
  - lib/tap.rb
125
- - lib/yaml_env_opts.rb
126
126
  homepage: https://rubygems.org/gems/markdown_exec
127
127
  licenses:
128
128
  - MIT
data/lib/globfiles.rb DELETED
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # encoding=utf-8
4
-
5
- # require 'json'
6
- # require 'yaml'
7
-
8
- # require_relative 'env'
9
- # include Env
10
-
11
- ## directory listing of saved files matching glob
12
- #
13
- class Globfiles
14
- def initialize(folder, glob)
15
- @folder = folder
16
- @glob = glob
17
- end
18
-
19
- def list_all
20
- Dir.glob(File.join(@folder, @glob)).tap_inspect
21
- end
22
-
23
- ## single most recent item
24
- #
25
- def most_recent(arr = nil)
26
- arr = list_all if arr.nil?
27
- return if arr.count < 1
28
-
29
- arr.max.tap_inspect
30
- end
31
-
32
- ## multiple recent items
33
- #
34
- def most_recent_list(list_count, arr = nil)
35
- arr = list_all if arr.nil?
36
- return if (ac = arr.count) < 1
37
-
38
- arr.sort[-[ac, list_count].min..].reverse.tap_inspect
39
- end
40
- end # class Globfiles
data/lib/yaml_env_opts.rb DELETED
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # encoding=utf-8
4
-
5
- require 'yaml'
6
-
7
- require_relative 'env_opts'
8
- require_relative 'object_present'
9
- require_relative 'tap'
10
-
11
- include Tap #; tap_config
12
-
13
- # read configuration YAML file during initalization
14
- # value priority: menu default < configuration file < environment variable < command argument
15
- #
16
- class YamlEnvOpts < EnvOpts
17
- def initialize(opts_raw = {}, argv: ARGV, configuration_yaml_filespec: '', values: nil)
18
- super(opts_raw || {}, nil)
19
- per_values(values)
20
- configure_yaml_filespec(configuration_yaml_filespec)
21
- set_keys_value_per_environment_as_cast(opts_raw)
22
- parse(argv)
23
-
24
- self # rubocop:disable Lint/Void
25
- end
26
-
27
- private
28
-
29
- def apply_configuration(settings)
30
- settings.tap_inspect 'settings'
31
- return if settings.nil?
32
-
33
- settings.each do |name, value|
34
- set_key_value_as_cast(name, value)
35
- end.tap_inspect
36
- end
37
-
38
- def configure_yaml_filespec(configuration_yaml_filespec)
39
- apply_configuration(read_configuration_yaml(configuration_yaml_filespec))
40
- end
41
-
42
- def per_values(settings)
43
- settings.tap_inspect 'settings'
44
- return self if settings.nil?
45
- return self if settings.count.zero?
46
-
47
- settings.each do |name, value|
48
- set_key_value_as_cast(name, value)
49
- end
50
-
51
- self
52
- end
53
-
54
- def read_configuration_yaml(configuration_yaml_filespec)
55
- configuration_yaml_filespec.tap_inspect 'configuration_yaml_filespec'
56
- return unless configuration_yaml_filespec.present?
57
-
58
- YAML.safe_load(File.read(configuration_yaml_filespec) || '').tap_inspect
59
- end
60
- end