markdown_exec 1.3.0 → 1.3.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.
data/lib/menu.yml CHANGED
@@ -1,4 +1,4 @@
1
- # MDE - Markdown Executor (1.3.0)
1
+ # MDE - Markdown Executor (1.3.2)
2
2
  ---
3
3
  - :arg_name: NAME
4
4
  :compreply: false
@@ -7,19 +7,19 @@
7
7
  :long_name: block-name
8
8
  :opt_name: block_name
9
9
  :short_name: b
10
- :proc1: val_as_str
10
+ :procname: val_as_str
11
11
  - :arg_name: PATH
12
12
  :default: "."
13
13
  :description: Read configuration file
14
14
  :long_name: config
15
- :proc1: path
15
+ :procname: path
16
16
  - :arg_name: BOOL
17
17
  :default: false
18
18
  :description: Debug output
19
19
  :env_var: MDE_DEBUG
20
20
  :long_name: debug
21
21
  :short_name: d
22
- :proc1: debug
22
+ :procname: debug
23
23
  - :arg_name: RELATIVE_PATH
24
24
  :compreply: "."
25
25
  :description: Name of document
@@ -27,11 +27,11 @@
27
27
  :long_name: filename
28
28
  :opt_name: filename
29
29
  :short_name: f
30
- :proc1: val_as_str
30
+ :procname: val_as_str
31
31
  - :description: App help
32
32
  :long_name: help
33
33
  :short_name: h
34
- :proc1: help
34
+ :procname: help
35
35
  - :arg_name: RELATIVE_PATH
36
36
  :default: "."
37
37
  :description: Path to documents
@@ -39,7 +39,7 @@
39
39
  :long_name: path
40
40
  :opt_name: path
41
41
  :short_name: p
42
- :proc1: val_as_str
42
+ :procname: val_as_str
43
43
  - :arg_name: BOOL
44
44
  :default: true
45
45
  :description: Pause for user to approve script
@@ -47,22 +47,22 @@
47
47
  :long_name: user-must-approve
48
48
  :opt_name: user_must_approve
49
49
  :short_name: q
50
- :proc1: val_as_bool
50
+ :procname: val_as_bool
51
51
  - :description: Print the gem's version
52
52
  :long_name: version
53
53
  :short_name: v
54
- :proc1: version
54
+ :procname: version
55
55
  - :description: Exit app
56
56
  :long_name: exit
57
57
  :short_name: x
58
- :proc1: exit
58
+ :procname: exit
59
59
  - :description: Show current configuration values
60
60
  :short_name: '0'
61
- :proc1: show_config
61
+ :procname: show_config
62
62
  - :description: List blocks
63
63
  :long_name: list-blocks
64
64
  :opt_name: list_blocks
65
- :proc1: val_as_bool
65
+ :procname: val_as_bool
66
66
  - :description: List default configuration as environment variables
67
67
  :long_name: list-default-env
68
68
  :opt_name: list_default_env
@@ -72,222 +72,293 @@
72
72
  - :description: List docs in current folder
73
73
  :long_name: list-docs
74
74
  :opt_name: list_docs
75
- :proc1: val_as_bool
75
+ :procname: val_as_bool
76
76
  - :description: List recent saved output
77
77
  :long_name: list-recent-output
78
78
  :opt_name: list_recent_output
79
- :proc1: val_as_bool
79
+ :procname: val_as_bool
80
80
  - :description: List recent saved scripts
81
81
  :long_name: list-recent-scripts
82
82
  :opt_name: list_recent_scripts
83
- :proc1: val_as_bool
83
+ :procname: val_as_bool
84
84
  - :description: Select and execute a recently saved output
85
85
  :long_name: select-recent-output
86
86
  :opt_name: select_recent_output
87
- :proc1: val_as_bool
87
+ :procname: val_as_bool
88
88
  - :description: Select and execute a recently saved script
89
89
  :long_name: select-recent-script
90
90
  :opt_name: select_recent_script
91
- :proc1: val_as_bool
91
+ :procname: val_as_bool
92
92
  - :description: List tab completions
93
93
  :long_name: tab-completions
94
94
  :opt_name: tab_completions
95
- :proc1: val_as_bool
95
+ :procname: val_as_bool
96
96
  - :description: Run most recently saved script
97
97
  :long_name: run-last-script
98
98
  :opt_name: run_last_script
99
- :proc1: val_as_bool
99
+ :procname: val_as_bool
100
100
  - :description: Gem home folder
101
101
  :long_name: pwd
102
102
  :opt_name: pwd
103
- :proc1: val_as_bool
104
- - :arg_name: INT.0-2
103
+ :procname: val_as_bool
104
+ - :arg_name: INT.0-3
105
105
  :default: 1
106
- :description: Output display level (0 to 2 [data, +context, +info])
106
+ :description: Output display level (0 to 3 [data, +context, +info])
107
107
  :env_var: MDE_DISPLAY_LEVEL
108
108
  :long_name: display-level
109
109
  :opt_name: display_level
110
- :proc1: val_as_int
110
+ :procname: val_as_int
111
111
  - :arg_name: INT.1-
112
112
  :default: 32
113
113
  :description: Max. items to return in list
114
114
  :env_var: MDE_LIST_COUNT
115
115
  :long_name: list-count
116
116
  :opt_name: list_count
117
- :proc1: val_as_int
117
+ :procname: val_as_int
118
118
  - :arg_name: PREFIX
119
119
  :default: mde
120
120
  :description: Name prefix for stdout files
121
121
  :env_var: MDE_LOGGED_STDOUT_FILENAME_PREFIX
122
122
  :opt_name: logged_stdout_filename_prefix
123
- :proc1: val_as_str
123
+ :procname: val_as_str
124
124
  - :arg_name: BOOL
125
125
  :default: false
126
126
  :description: Display document name in block selection menu
127
127
  :env_var: MDE_MENU_BLOCKS_WITH_DOCNAME
128
128
  :opt_name: menu_blocks_with_docname
129
- :proc1: val_as_bool
129
+ :procname: val_as_bool
130
130
  - :arg_name: BOOL
131
131
  :default: false
132
132
  :description: Display headings (levels 1,2,3) in block selection menu
133
133
  :env_var: MDE_MENU_BLOCKS_WITH_HEADINGS
134
134
  :opt_name: menu_blocks_with_headings
135
- :proc1: val_as_bool
135
+ :procname: val_as_bool
136
136
  - :arg_name: BOOL
137
137
  :default: false
138
138
  :description: Display summary for execution
139
139
  :env_var: MDE_OUTPUT_EXECUTION_SUMMARY
140
140
  :long_name: output-execution-summary
141
141
  :opt_name: output_execution_summary
142
- :proc1: val_as_bool
142
+ :procname: val_as_bool
143
143
  - :arg_name: BOOL
144
144
  :default: false
145
145
  :description: Display script prior to execution
146
146
  :env_var: MDE_OUTPUT_SCRIPT
147
147
  :long_name: output-script
148
148
  :opt_name: output_script
149
- :proc1: val_as_bool
149
+ :procname: val_as_bool
150
150
  - :arg_name: BOOL
151
151
  :default: true
152
152
  :description: Display standard output from execution
153
153
  :env_var: MDE_OUTPUT_STDOUT
154
154
  :long_name: output-stdout
155
155
  :opt_name: output_stdout
156
- :proc1: val_as_bool
156
+ :procname: val_as_bool
157
157
  - :arg_name: BOOL
158
158
  :default: false
159
159
  :description: Save executed script
160
160
  :env_var: MDE_SAVE_EXECUTED_SCRIPT
161
161
  :long_name: save-executed-script
162
162
  :opt_name: save_executed_script
163
- :proc1: val_as_bool
163
+ :procname: val_as_bool
164
164
  - :arg_name: BOOL
165
165
  :default: false
166
166
  :description: Save standard output of the executed script
167
167
  :env_var: MDE_SAVE_EXECUTION_OUTPUT
168
168
  :long_name: save-execution-output
169
169
  :opt_name: save_execution_output
170
- :proc1: val_as_bool
170
+ :procname: val_as_bool
171
171
  - :arg_name: INT
172
172
  :default: 493
173
173
  :description: chmod for saved scripts
174
174
  :env_var: MDE_SAVED_SCRIPT_CHMOD
175
175
  :opt_name: saved_script_chmod
176
- :proc1: val_as_int
176
+ :procname: val_as_int
177
177
  - :arg_name: PREFIX
178
178
  :default: mde
179
179
  :description: Name prefix for saved scripts
180
180
  :env_var: MDE_SAVED_SCRIPT_FILENAME_PREFIX
181
181
  :opt_name: saved_script_filename_prefix
182
- :proc1: val_as_str
182
+ :procname: val_as_str
183
183
  - :arg_name: RELATIVE_PATH
184
184
  :default: logs
185
185
  :description: Saved script folder
186
186
  :env_var: MDE_SAVED_SCRIPT_FOLDER
187
187
  :long_name: saved-script-folder
188
188
  :opt_name: saved_script_folder
189
- :proc1: val_as_str
189
+ :procname: val_as_str
190
190
  - :arg_name: GLOB
191
191
  :default: mde_*.sh
192
192
  :description: Glob matching saved scripts
193
193
  :env_var: MDE_SAVED_SCRIPT_GLOB
194
194
  :opt_name: saved_script_glob
195
- :proc1: val_as_str
195
+ :procname: val_as_str
196
196
  - :arg_name: RELATIVE_PATH
197
197
  :default: logs
198
198
  :description: Saved stdout folder
199
199
  :env_var: MDE_SAVED_STDOUT_FOLDER
200
200
  :long_name: saved-stdout-folder
201
201
  :opt_name: saved_stdout_folder
202
- :proc1: val_as_str
202
+ :procname: val_as_str
203
203
  - :arg_name: GLOB
204
204
  :default: mde_*.out.txt
205
205
  :description: Glob matching saved outputs
206
206
  :env_var: MDE_SAVED_STDOUT_GLOB
207
207
  :opt_name: saved_stdout_glob
208
- :proc1: val_as_str
208
+ :procname: val_as_str
209
209
  - :default: "^[\\(\\[].*[\\)\\]]$"
210
210
  :description: Pattern for blocks to hide from user-selection
211
- :env_var: MDE_BLOCK_NAME_EXCLUDED_MATCH
212
- :opt_name: block_name_excluded_match
213
- :proc1: val_as_str
211
+ :env_var: MDE_BLOCK_NAME_HIDDEN_MATCH
212
+ :opt_name: block_name_hidden_match
213
+ :procname: val_as_str
214
214
  - :default: ":(?<title>\\S+)( |$)"
215
215
  :env_var: MDE_BLOCK_NAME_MATCH
216
216
  :opt_name: block_name_match
217
- :proc1: val_as_str
217
+ :procname: val_as_str
218
218
  - :default: "%\\([^\\)]+\\)"
219
219
  :env_var: MDE_BLOCK_CALLS_SCAN
220
220
  :opt_name: block_calls_scan
221
- :proc1: val_as_str
221
+ :procname: val_as_str
222
222
  - :default: "\\+\\S+"
223
223
  :env_var: MDE_BLOCK_REQUIRED_SCAN
224
224
  :opt_name: block_required_scan
225
- :proc1: val_as_str
225
+ :procname: val_as_str
226
226
  - :default: "<(?<full>(?<type>\\$)?(?<name>[A-Za-z]\\S*))"
227
227
  :env_var: MDE_BLOCK_STDIN_SCAN
228
228
  :opt_name: block_stdin_scan
229
- :proc1: val_as_str
229
+ :procname: val_as_str
230
230
  - :default: ">(?<full>(?<type>\\$)?(?<name>[A-Za-z]\\S*))"
231
231
  :env_var: MDE_BLOCK_STDOUT_SCAN
232
232
  :opt_name: block_stdout_scan
233
- :proc1: val_as_str
233
+ :procname: val_as_str
234
234
  - :default: "> "
235
235
  :env_var: MDE_DISPLAY_LEVEL_XBASE_PREFIX
236
236
  :opt_name: display_level_xbase_prefix
237
- :proc1: val_as_str
237
+ :procname: val_as_str
238
238
  - :default: "^`{3,}"
239
239
  :env_var: MDE_FENCED_START_AND_END_MATCH
240
240
  :opt_name: fenced_start_and_end_match
241
- :proc1: val_as_str
241
+ :procname: val_as_str
242
242
  - :default: "^`{3,}(?<shell>[^`\\s]*) *(?<name>.*)$"
243
243
  :env_var: MDE_FENCED_START_EX_MATCH
244
244
  :opt_name: fenced_start_ex_match
245
- :proc1: val_as_str
245
+ :procname: val_as_str
246
246
  - :default: "^# *(?<name>[^#]*?) *$"
247
247
  :env_var: MDE_HEADING1_MATCH
248
248
  :opt_name: heading1_match
249
- :proc1: val_as_str
249
+ :procname: val_as_str
250
250
  - :default: "^## *(?<name>[^#]*?) *$"
251
251
  :env_var: MDE_HEADING2_MATCH
252
252
  :opt_name: heading2_match
253
- :proc1: val_as_str
253
+ :procname: val_as_str
254
254
  - :default: "^### *(?<name>.+?) *$"
255
255
  :env_var: MDE_HEADING3_MATCH
256
256
  :opt_name: heading3_match
257
- :proc1: val_as_str
257
+ :procname: val_as_str
258
258
  - :default: "*.[Mm][Dd]"
259
259
  :env_var: MDE_MD_FILENAME_GLOB
260
260
  :opt_name: md_filename_glob
261
- :proc1: val_as_str
261
+ :procname: val_as_str
262
262
  - :default: ".+\\.md"
263
263
  :env_var: MDE_MD_FILENAME_MATCH
264
264
  :opt_name: md_filename_match
265
- :proc1: val_as_str
265
+ :procname: val_as_str
266
+ - :default: "-:= %s =:-"
267
+ :description: format for menu dividers and demarcations
268
+ :env_var: MDE_MENU_DIVIDER_FORMAT
269
+ :opt_name: menu_divider_format
270
+ :procname: val_as_str
271
+ - :default: magenta
272
+ :description: Color of menu divider
273
+ :env_var: MDE_MENU_DIVIDER_COLOR
274
+ :opt_name: menu_divider_color
275
+ :procname: val_as_str
266
276
  - :default: "^::: +(?<name>.+?)$"
267
277
  :description: Pattern for topics/dividers in block selection menu
268
278
  :env_var: MDE_MENU_DIVIDER_MATCH
269
279
  :opt_name: menu_divider_match
270
- :proc1: val_as_str
280
+ :procname: val_as_str
281
+ - :default: ">"
282
+ :description: Symbol before each divider
283
+ :env_var: MDE_MENU_DIVIDER_SYMBOL
284
+ :opt_name: menu_divider_symbol
285
+ :procname: val_as_str
286
+ - :default: "~~~"
287
+ :description: closing demarcations for menu
288
+ :env_var: MDE_MENU_FINAL_DIVIDER
289
+ :opt_name: menu_final_divider
290
+ :procname: val_as_str
291
+ - :default: ''
292
+ :description: opening demarcation for menu
293
+ :env_var: MDE_MENU_INITIAL_DIVIDER
294
+ :opt_name: menu_initial_divider
295
+ :procname: val_as_str
271
296
  - :description: Options for viewing saved output file
272
297
  :env_var: MDE_OUTPUT_VIEWER_OPTIONS
273
298
  :opt_name: output_viewer_options
274
- :proc1: val_as_str
275
- - :default: 24
299
+ :procname: val_as_str
300
+ - :default: 36
276
301
  :description: 'Maximum # of rows in select list'
277
302
  :env_var: MDE_SELECT_PAGE_HEIGHT
278
303
  :opt_name: select_page_height
279
- :proc1: val_as_int
304
+ :procname: val_as_int
280
305
  - :default: "#!/usr/bin/env"
281
306
  :description: Shebang for saved scripts
282
307
  :env_var: MDE_SHEBANG
283
308
  :opt_name: shebang
284
- :proc1: val_as_str
309
+ :procname: val_as_str
285
310
  - :default: bash
286
311
  :description: Shell for launched scripts
287
312
  :env_var: MDE_SHELL
288
313
  :opt_name: shell
289
- :proc1: val_as_str
290
- - :default: "- - %s - -"
291
- :env_var: MDE_MENU_DIVIDER_FORMAT
292
- :opt_name: menu_divider_format
293
- :proc1: val_as_str
314
+ :procname: val_as_str
315
+ - :default: Process?
316
+ :description: Prompt to approve a block
317
+ :env_var: MDE_PROMPT_APPROVE_BLOCK
318
+ :opt_name: prompt_approve_block
319
+ :procname: val_as_str
320
+ - :default: 'Choose a block:'
321
+ :description: Prompt to select a block
322
+ :env_var: MDE_PROMPT_SELECT_BLOCK
323
+ :opt_name: prompt_select_block
324
+ :procname: val_as_str
325
+ - :default: 'Choose a file:'
326
+ :description: Prompt to select a markdown document
327
+ :env_var: MDE_PROMPT_SELECT_MD
328
+ :opt_name: prompt_select_md
329
+ :procname: val_as_str
330
+ - :default: 'Choose a file:'
331
+ :description: Prompt to select a saved file
332
+ :env_var: MDE_PROMPT_SELECT_OUTPUT
333
+ :opt_name: prompt_select_output
334
+ :procname: val_as_str
335
+ - :default: Copy script to clipboard
336
+ :description: Prompt to copy script to clipboard
337
+ :env_var: MDE_PROMPT_SCRIPT_TO_CLIPBOARD
338
+ :opt_name: prompt_script_to_clipboard
339
+ :procname: val_as_str
340
+ - :default: Save script
341
+ :description: Prompt to save script
342
+ :env_var: MDE_PROMPT_SAVE_SCRIPT
343
+ :opt_name: prompt_save_script
344
+ :procname: val_as_str
345
+ - :default: 'No'
346
+ :description: Prompt for no
347
+ :env_var: MDE_PROMPT_NO
348
+ :opt_name: prompt_no
349
+ :procname: val_as_str
350
+ - :default: 'Yes'
351
+ :description: Prompt for yes
352
+ :env_var: MDE_PROMPT_YES
353
+ :opt_name: prompt_yes
354
+ :procname: val_as_str
355
+ - :default: " #=#=#"
356
+ :description: Output divider
357
+ :env_var: MDE_OUTPUT_DIVIDER
358
+ :opt_name: output_divider
359
+ :procname: val_as_str
360
+ - :default: yellow
361
+ :description: Color of output divider
362
+ :env_var: MDE_OUTPUT_DIVIDER_COLOR
363
+ :opt_name: output_divider_color
364
+ :procname: val_as_str
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ # encoding=utf-8
4
+
5
+ # is the value empty?
6
+ #
7
+ class String
8
+ unless defined?(blank?)
9
+ def blank?
10
+ empty? || /\A[[:space:]]*\z/.freeze.match?(self)
11
+ end
12
+ end
13
+ end
14
+
15
+ # is the value non-empty?
16
+ #
17
+ class String
18
+ unless defined?(present?)
19
+ def present?
20
+ !empty?
21
+ end
22
+ end
23
+ end
24
+
25
+ # is the value a non-empty string or a binary?
26
+ #
27
+ # :reek:ManualDispatch ### temp
28
+ class Object
29
+ unless defined?(present?)
30
+ def present?
31
+ case self.class.to_s
32
+ when 'FalseClass', 'TrueClass'
33
+ true
34
+ else
35
+ self && (!respond_to?(:blank?) || !blank?)
36
+ end
37
+ end
38
+ end
39
+ end
data/lib/shared.rb CHANGED
@@ -10,10 +10,11 @@ BF = 'bin'
10
10
 
11
11
  # display_level values
12
12
  DISPLAY_LEVEL_BASE = 0 # required output
13
- DISPLAY_LEVEL_ADMIN = 1
13
+ DISPLAY_LEVEL_ADMIN = 1 # monit
14
14
  DISPLAY_LEVEL_DEBUG = 2
15
+ DISPLAY_LEVEL_DUMP = 3
15
16
  DISPLAY_LEVEL_DEFAULT = DISPLAY_LEVEL_ADMIN
16
- DISPLAY_LEVEL_MAX = DISPLAY_LEVEL_DEBUG
17
+ DISPLAY_LEVEL_MAX = DISPLAY_LEVEL_DUMP
17
18
 
18
19
  # @execute_files[ind] = @execute_files[ind] + [block]
19
20
  EF_STDOUT = 0
@@ -26,15 +27,3 @@ MENU_YML = "lib/#{LOCAL_YML}"
26
27
  def menu_from_yaml
27
28
  YAML.load File.open(File.join(File.expand_path(__dir__), LOCAL_YML))
28
29
  end
29
-
30
- # skip :reek:UtilityFunction
31
- def value_for_cli(value)
32
- case value.class.to_s
33
- when 'String'
34
- Shellwords.escape value
35
- when 'FalseClass', 'TrueClass'
36
- value ? '1' : '0'
37
- else
38
- Shellwords.escape value.to_s
39
- end
40
- end
data/lib/tap.rb CHANGED
@@ -6,37 +6,112 @@ require 'json'
6
6
  require 'yaml'
7
7
 
8
8
  require_relative 'env'
9
+ require_relative 'object_present'
10
+
9
11
  include Env
10
12
 
13
+ # rubocop:disable Metrics/ParameterLists
14
+
11
15
  ## application-level debug control
12
16
  #
13
17
  module Tap
14
- $tap_enable = env_bool 'TAP_DEBUG'
15
-
16
- def tap_config(enable: nil, envvar: nil, value: nil)
17
- $tap_enable = if envvar
18
- env_bool envvar
19
- elsif value
20
- value.to_i != 0
21
- elsif enable
22
- enable
23
- end
18
+ DN = 'return'
19
+ NONE = 0x0
20
+ T1 = 1 # RESULT
21
+ T2 = 2 # CONTEXT
22
+ T3 = 4 # MONITOR
23
+ T4 = 8 # DUMP
24
+ ALL2 = 0x77
25
+ ALL = 0xFF
26
+ TDD = 0x11
27
+ TB1 = 0x22
28
+ TB2 = 0x44
29
+ TB3 = 0x88
30
+ TD = 0x0F
31
+ TD0 = 0x01
32
+ TD1 = 0x02
33
+ TD2 = 0x04
34
+ TP = 0xF0
35
+ TP0 = 0x10
36
+ TP1 = 0x20
37
+ TP2 = 0x40
38
+
39
+ # cast with message per tap_inspect type
40
+ # type: message
41
+ #
42
+ CVT = {
43
+ json: :to_json,
44
+ string: :to_s,
45
+ yaml: :to_yaml,
46
+ else: :inspect
47
+ }.freeze
48
+
49
+ $tap_enable = false
50
+ $tap_mask = ALL2
51
+
52
+ def tap_config(enable: true, envvar: nil, value: nil)
53
+ $tap_enable = false
54
+ if envvar
55
+ $tap_enable = (env_int envvar).positive?
56
+ $tap_mask = ALL2 if $tap_enable
57
+ elsif value
58
+ $tap_mask = value.to_i
59
+ $tap_enable = $tap_mask.positive?
60
+ elsif enable
61
+ $tap_mask = ALL2
62
+ $tap_enable = true
63
+ end
64
+ # puts "$tap_enable: #{$tap_enable}"
65
+ # puts "$tap_mask: #{$tap_mask.to_s(2)}"
66
+ self
24
67
  end
25
68
 
26
- def tap_inspect(format: nil, name: 'return')
69
+ def tap_inspect(name_ = nil, caller0: nil, mask: TDD, name: DN, source: nil, type: nil)
27
70
  return self unless $tap_enable
71
+ return self unless (mask & $tap_mask).positive?
28
72
 
29
- cvt = {
30
- json: :to_json,
31
- string: :to_s,
32
- yaml: :to_yaml,
33
- else: :inspect
34
- }
35
- fn = cvt.fetch(format, cvt[:else])
73
+ fn = CVT.fetch(type, CVT[:else])
74
+ outs = []
75
+ outs.push(source.to_s) if source.present?
36
76
 
37
- puts "-> #{caller[0].scan(/in `?(\S+)'$/)[0][0]}()" \
38
- " #{name}: #{method(fn).call}"
77
+ vs = (caller0 || caller[0]).scan(/in `?(\S+)'$/).fetch(0, []).fetch(0, '')
78
+ outs.push("#{vs}()") if vs.present?
79
+
80
+ outs.push(tap_named_value(name_ || name, method(fn).call))
81
+
82
+ $stdout.puts(outs.join(' ')) if outs.length.positive?
83
+ self
84
+ end
85
+
86
+ def tap_print(mask: TDD)
87
+ return self unless $tap_enable
88
+ return self unless (mask & $tap_mask).positive?
39
89
 
90
+ $stdout.print self
40
91
  self
41
92
  end
93
+
94
+ def tap_puts(name_ = nil, mask: TDD, name: nil)
95
+ return self unless $tap_enable
96
+ return self unless (mask & $tap_mask).positive?
97
+
98
+ $stdout.puts tap_named_value(name_ || name, self)
99
+ self
100
+ end
101
+
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
104
+ end
105
+
106
+ private
107
+
108
+ def tap_named_value(name, value)
109
+ if name.present?
110
+ "#{name}: #{value}"
111
+ else
112
+ value.to_s
113
+ end
114
+ end
42
115
  end
116
+
117
+ # rubocop:enable Metrics/ParameterLists
@@ -0,0 +1,60 @@
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