markdown_exec 1.7 → 1.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 97045160c53b7dca3998f6d700bf136f500826141d226f9f2cc650d15e6d1ba7
4
- data.tar.gz: c69c23b07fcb3304d0209f79596619fbe54d0c2bb9a03f94c8598e3358c25ed7
3
+ metadata.gz: c4fdb41b414911d16030ffbfb8c4b07ca8c09e3684f21e123d0d99cd738dba3d
4
+ data.tar.gz: 70c1ec9fb9b795d0cbdcc87ceb03809a57af5901a70dc2b1d319c9451592d687
5
5
  SHA512:
6
- metadata.gz: a525dc3c727c38aba2d52382871650b6d2636891028a6def27f8958fcd78ae46afcb8fbbeb0f1bfdb0d550beb22c7cc90c67744c52143490f0a27c75c9158442
7
- data.tar.gz: ae304dc41d17d2763a17b518da50956f0271ca401a4bc78929200eeb17ab3d19dfd148db76f104aed8216120c38673d19c9e56af018d3c9d83534c8901cc0915
6
+ metadata.gz: abea63db83a4d785bce7c2ec1c9babebe6d78637872a068c4d6b2169832de8ea707a2c3ae426f6cd5ea548269194a797d95abdd7fceb286c4efa49da9d591bfe
7
+ data.tar.gz: 1b102cb3e898789d6ddf2a401f90cfee04403ea135a14a5067673b250855aef569ca3b39a171570930ef5946d52874d022fb19fd9cf7c1561737144aefc5ef3c
data/.rubocop.yml CHANGED
@@ -14,9 +14,9 @@ Layout/LineContinuationLeadingSpace:
14
14
  Enabled: false
15
15
 
16
16
  Layout/LineLength:
17
- Max: 78
17
+ # Max: 78
18
18
  # Max: 80
19
- # Max: 96
19
+ Max: 96
20
20
 
21
21
  Lint/Debugger:
22
22
  Enabled: false
@@ -72,6 +72,9 @@ Style/FormatStringToken:
72
72
  Style/GlobalVars:
73
73
  Enabled: false
74
74
 
75
+ Style/Lambda:
76
+ Enabled: false
77
+
75
78
  Style/MixinUsage:
76
79
  Enabled: false
77
80
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- markdown_exec (1.7)
4
+ markdown_exec (1.8)
5
5
  clipboard (~> 1.3.6)
6
6
  open3 (~> 0.1.1)
7
7
  optparse (~> 0.1.1)
data/Rakefile CHANGED
@@ -79,6 +79,7 @@ task :minitest do
79
79
  commands = [
80
80
  './lib/block_label.rb',
81
81
  './lib/cached_nested_file_reader.rb',
82
+ './lib/directory_searcher.rb',
82
83
  './lib/fcb.rb',
83
84
  './lib/filter.rb',
84
85
  './lib/hash_delegator.rb',
@@ -13,7 +13,7 @@ __filedirs_all()
13
13
  }
14
14
 
15
15
  _mde_echo_version() {
16
- echo "1.7"
16
+ echo "1.8"
17
17
  }
18
18
 
19
19
  _mde() {
@@ -40,6 +40,14 @@ _mde() {
40
40
 
41
41
  -f) COMPREPLY="."; return 0 ;;
42
42
 
43
+ --find) COMPREPLY="''"; return 0 ;;
44
+
45
+ -?) COMPREPLY="''"; return 0 ;;
46
+
47
+ --how) COMPREPLY="''"; return 0 ;;
48
+
49
+ -?) COMPREPLY="''"; return 0 ;;
50
+
43
51
  --list-count) COMPREPLY="32"; return 0 ;;
44
52
 
45
53
  --output-execution-summary) COMPREPLY="0"; return 0 ;;
@@ -74,7 +82,7 @@ _mde() {
74
82
  # present matching option names
75
83
  #
76
84
  if [[ ${cur} == -* ]] ; then
77
- opts=("--block-name" "--config" "--debug" "--exit" "--filename" "--help" "--list-blocks" "--list-count" "--list-default-env" "--list-default-yaml" "--list-docs" "--list-recent-output" "--list-recent-scripts" "--output-execution-summary" "--output-script" "--output-stdout" "--path" "--pwd" "--run-last-script" "--save-executed-script" "--save-execution-output" "--saved-script-folder" "--saved-stdout-folder" "--select-recent-output" "--select-recent-script" "--tab-completions" "--user-must-approve" "--version" "--display-level")
85
+ opts=("--block-name" "--config" "--debug" "--exit" "--filename" "--find" "--help" "--how" "--list-blocks" "--list-count" "--list-default-env" "--list-default-yaml" "--list-docs" "--list-recent-output" "--list-recent-scripts" "--output-execution-summary" "--output-script" "--output-stdout" "--path" "--pwd" "--run-last-script" "--save-executed-script" "--save-execution-output" "--saved-script-folder" "--saved-stdout-folder" "--select-recent-output" "--select-recent-script" "--tab-completions" "--user-must-approve" "--version" "--display-level")
78
86
  COMPREPLY=( $(compgen -W "$(printf "'%s' " "${opts[@]}")" -- "${cur}") )
79
87
 
80
88
  return 0
@@ -101,6 +109,14 @@ _mde() {
101
109
 
102
110
  -f) COMPREPLY=".RELATIVE_PATH."; return 0 ;;
103
111
 
112
+ --find) COMPREPLY=".FIND."; return 0 ;;
113
+
114
+ -?) COMPREPLY=".FIND."; return 0 ;;
115
+
116
+ --how) COMPREPLY=".HOW."; return 0 ;;
117
+
118
+ -?) COMPREPLY=".HOW."; return 0 ;;
119
+
104
120
  --list-count) COMPREPLY=".INT.1-."; return 0 ;;
105
121
 
106
122
  --output-execution-summary) COMPREPLY=".BOOL."; return 0 ;;
@@ -138,4 +154,4 @@ _mde() {
138
154
 
139
155
  complete -o filenames -o nospace -F _mde mde
140
156
  # _mde_echo_version
141
- # echo "Updated: 2023-12-01 18:34:38 UTC"
157
+ # echo "Updated: 2023-12-11 19:58:50 UTC"
@@ -0,0 +1,48 @@
1
+ # Demo configuring options
2
+
3
+ ::: These Opts blocks set the color for all elements.
4
+
5
+ ```opts :(document_options)
6
+ ```
7
+ ```opts :(default)
8
+ exception_color_detail: fg_rgbh_E0_E0_20 # Color of exception detail
9
+ exception_color_name: fg_rgbh_E0_20_20 # Color of exception name
10
+ execution_report_preview_frame_color: fg_rgbh_20_80_80 # execution_report_preview_frame_color
11
+ menu_bash_color: fg_rgbh_40_C0_F0 # Color of menu bash
12
+ menu_chrome_color: fg_rgbh_80_80_20 # Color of menu chrome
13
+ menu_divider_color: fg_rgbh_20_98_80 # Color of menu divider
14
+ menu_link_color: fg_rgbh_20_E0_20 # Color of menu link
15
+ menu_note_color: fg_rgbh_40_A0_A0 # Color of menu note
16
+ menu_opts_color: fg_rgbh_E0_60_E0 # Color of menu opts
17
+ menu_opts_set_color: fg_rgbh_E0_20_20 # Color of menu opts
18
+ menu_task_color: fg_rgbh_A0_20_D0 # Color of menu task
19
+ menu_vars_color: fg_rgbh_E0_80_20 # Color of menu vars
20
+ menu_vars_set_color: fg_rgbh_E0_80_20 # Color of menu vars
21
+ output_execution_label_name_color: fg_rgbh_20_D8_80 # Color of output_execution_label_name
22
+ output_execution_label_value_color: fg_rgbh_20_E0_80 # Color of output_execution_label_value
23
+ prompt_color_after_script_execution: fg_rgbh_20_E8_80 # Color of prompt after script execution
24
+ script_execution_frame_color: fg_rgbh_20_80_80 # script_execution_frame_color
25
+ script_preview_frame_color: fg_rgbh_20_80_80 # Color of output divider
26
+ warning_color: fg_rgbh_E0_E0_20 # Color of warning message
27
+ ```
28
+
29
+ ::: Example blocks
30
+
31
+ ```bash :Bash1
32
+ ```
33
+ ```link :Link1
34
+ ```
35
+ ```opts :Opts1
36
+ ```
37
+ ```port :Port1
38
+ ```
39
+ ```vars :Vars1
40
+ ```
41
+ [ ] Task1
42
+ blue; fg_rgbh_00_00_FF
43
+ green; fg_rgbh_00_FF_00
44
+ indigo; fg_rgbh_4B_00_82
45
+ orange; fg_rgbh_FF_7F_00
46
+ red; fg_rgbh_FF_00_00
47
+ violet; fg_rgbh_94_00_D3
48
+ yellow; fg_rgbh_FF_FF_00
data/examples/include.md CHANGED
@@ -1,12 +1,19 @@
1
1
  ```bash :(one)
2
- a
2
+ echo block "one"
3
3
  ```
4
+
4
5
  ```bash :two +(one)
5
- b
6
+ echo block "two" requires one
6
7
  ```
8
+
7
9
  ```bash :(three) +two +(one)
8
- c
10
+ echo block "three" requires two and one
9
11
  ```
12
+
10
13
  ```bash :four +(three)
11
- d
14
+ echo block "four" requires three
15
+ ```
16
+
17
+ ```bash :trigger_unmet_dependency +(unmet)
18
+ echo block "five" requires an unmet dependency
12
19
  ```
data/examples/opts.md CHANGED
@@ -19,4 +19,11 @@ menu_task_color: fg_rgb_127_127_255
19
19
  menu_divider_color: green
20
20
  menu_link_color: fg_rgbh_88_cc_66
21
21
  menu_note_color: yellow
22
+
23
+ menu_note_match: "^\\s*(?<line>[^\\s/].*)\\s*$" # Pattern for notes in block selection menu; start with any char except '/'
22
24
  ```
25
+
26
+ note 1
27
+ note 2 ends with /
28
+ / note 3 starts with /
29
+ note 4
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # encoding=utf-8
5
+
6
+ class AnsiFormatter
7
+ def initialize(options = {})
8
+ @options = options
9
+ end
10
+
11
+ def format_and_highlight_array(
12
+ data,
13
+ highlight_color_sym: :exception_color_detail,
14
+ plain_color_sym: :menu_chrome_color,
15
+ label: 'Data:',
16
+ highlight: [],
17
+ line_prefix: ' ',
18
+ line_postfix: '',
19
+ detail_sep: ''
20
+ )
21
+ (data&.map do |item|
22
+ scan_and_process_multiple_substrings(item, highlight, plain_color_sym,
23
+ highlight_color_sym).join
24
+ # color_sym = highlight.include?(item) ? highlight_color_sym : c
25
+ # string_send_color(item, color_sym)
26
+ end || []) #.join
27
+ # formatted_deps
28
+ # "#{line_prefix}#{string_send_color(label, highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
29
+ end
30
+
31
+ # Formats and highlights a list of data. data are presented with indentation,
32
+ # and specific items can be highlighted in a specified color, while others are shown in a plain color.
33
+ #
34
+ # @param data [Hash] A hash of data, where each key is a dependency name,
35
+ # and its value is an array of sub-items.
36
+ # @param highlight_color_sym [Symbol] The color method to apply to highlighted items.
37
+ # Default is :exception_color_detail.
38
+ # @param plain_color_sym [Symbol] The color method for non-highlighted items.
39
+ # Default is :menu_chrome_color.
40
+ # @param label [String] The label to prefix the list of data with.
41
+ # Default is 'data:'.
42
+ # @param highlight [Array] An array of items to highlight. Each item in this array will be
43
+ # formatted with the specified highlight color.
44
+ # @param line_prefix [String] Prefix for each line. Default is ' '.
45
+ # @param line_postfix [String] Postfix for each line. Default is ''.
46
+ # @param detail_sep [String] Separator for items in the sub-list. Default is ' '.
47
+ # @return [String] A formatted string representation of the data with highlighted items.
48
+ def format_and_highlight_hash(
49
+ data,
50
+ highlight_color_sym: :exception_color_detail,
51
+ plain_color_sym: :menu_chrome_color,
52
+ label: 'Data:',
53
+ highlight: [],
54
+ line_prefix: ' ',
55
+ line_postfix: '',
56
+ detail_sep: ' '
57
+ )
58
+ formatted_deps = data&.map do |dep_name, sub_items|
59
+ formatted_sub_items = sub_items.map do |item|
60
+ color_sym = highlight.include?(item) ? highlight_color_sym : plain_color_sym
61
+ string_send_color(item, color_sym)
62
+ end.join(detail_sep)
63
+
64
+ "#{line_prefix}- #{string_send_color(dep_name,
65
+ highlight.include?(dep_name) ? highlight_color_sym : plain_color_sym)}: #{formatted_sub_items}#{line_postfix}"
66
+ end || []
67
+
68
+ "#{line_prefix}#{string_send_color(label,
69
+ highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
70
+ end
71
+
72
+ # Function to scan a string and process its segments based on multiple substrings
73
+ # @param str [String] The string to scan.
74
+ # @param substrings [Array<String>] The substrings to match in the string.
75
+ # @param plain_sym [Symbol] The symbol for non-matching segments.
76
+ # @param color_sym [Symbol] The symbol for matching segments.
77
+ # @return [Array<String>] The processed segments.
78
+ def scan_and_process_multiple_substrings(str, substrings, plain_sym, color_sym)
79
+ return string_send_color(str, plain_sym) if substrings.empty? || substrings.any?(&:empty?)
80
+
81
+ results = []
82
+ remaining_str = str.dup
83
+
84
+ while remaining_str.length.positive?
85
+ match_indices = substrings.map { |substring| remaining_str.index(substring) }.compact
86
+ earliest_match = match_indices.min
87
+
88
+ if earliest_match
89
+ # Process non-matching segment before the earliest match, if any
90
+ unless earliest_match.zero?
91
+ non_matching_segment = remaining_str.slice!(0...earliest_match)
92
+ results << string_send_color(non_matching_segment, plain_sym)
93
+ end
94
+
95
+ # Find which substring has this earliest match
96
+ matching_substring = substrings.find do |substring|
97
+ remaining_str.index(substring) == earliest_match
98
+ end
99
+
100
+ if matching_substring
101
+ matching_segment = remaining_str.slice!(0...matching_substring.length)
102
+ results << string_send_color(matching_segment, color_sym)
103
+ end
104
+ else
105
+ # Process the remaining non-matching segment
106
+ results << string_send_color(remaining_str, plain_sym)
107
+ break
108
+ end
109
+ end
110
+
111
+ results
112
+ end
113
+
114
+ # Function to scan a string and process its segments
115
+ # @param str [String] The string to scan.
116
+ # @param substring [String] The substring to match in the string.
117
+ # @param plain_sym [Symbol] The symbol for non-matching segments.
118
+ # @param color_sym [Symbol] The symbol for matching segments.
119
+ # @return [Array<String>] The processed segments.
120
+ def scan_and_process_string(str, substring, plain_sym, color_sym)
121
+ return string_send_color(str, plain_sym) unless substring.present?
122
+
123
+ results = []
124
+ remaining_str = str.dup
125
+
126
+ while remaining_str.length.positive?
127
+ match_index = remaining_str.index(substring)
128
+ if match_index
129
+ # Process non-matching segment before the match, if any
130
+ unless match_index.zero?
131
+ non_matching_segment = remaining_str.slice!(0...match_index)
132
+ results << string_send_color(non_matching_segment, plain_sym)
133
+ end
134
+
135
+ # Process the matching segment
136
+ matching_segment = remaining_str.slice!(0...substring.length)
137
+ results << string_send_color(matching_segment, color_sym)
138
+ else
139
+ # Process the remaining non-matching segment
140
+ results << string_send_color(remaining_str, plain_sym)
141
+ break
142
+ end
143
+ end
144
+
145
+ results
146
+ end
147
+
148
+ # # Example usage
149
+ # scan_and_process_string("Hello world, hello universe", "hello", :plain, :color)
150
+
151
+ # Applies a color method to a string based on the provided color symbol.
152
+ # The color method is fetched from @options and applied to the string.
153
+ # @param string [String] The string to which the color will be applied.
154
+ # @param color_sym [Symbol] The symbol representing the color method.
155
+ # @param default [String] Default color method to use if color_sym is not found in @options.
156
+ # @return [String] The string with the applied color method.
157
+ def string_send_color(string, color_sym, default: 'plain')
158
+ color_method = @options.fetch(color_sym, default).to_sym
159
+ string.to_s.send(color_method)
160
+ end
161
+ end
@@ -0,0 +1,239 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # encoding=utf-8
5
+
6
+ require 'find'
7
+
8
+ # Formats and highlights a list of dependencies. Dependencies are presented with indentation,
9
+ # and specific items can be highlighted in a specified color, while others are shown in a plain color.
10
+ #
11
+ # @param dependencies [Hash] A hash of dependencies, where each key is a dependency name,
12
+ # and its value is an array of sub-items.
13
+ # @param highlight_color_sym [Symbol] The color method to apply to highlighted items.
14
+ # Default is :exception_color_detail.
15
+ # @param plain_color_sym [Symbol] The color method for non-highlighted items.
16
+ # Default is :menu_chrome_color.
17
+ # @param label [String] The label to prefix the list of dependencies with.
18
+ # Default is 'Dependencies:'.
19
+ # @param highlight [Array] An array of items to highlight. Each item in this array will be
20
+ # formatted with the specified highlight color.
21
+ # @param line_prefix [String] Prefix for each line. Default is ' '.
22
+ # @param line_postfix [String] Postfix for each line. Default is ''.
23
+ # @param detail_sep [String] Separator for items in the sub-list. Default is ' '.
24
+ # @return [String] A formatted string representation of the dependencies with highlighted items.
25
+ def format_and_highlight_dependencies(
26
+ dependencies,
27
+ highlight_color_sym: :exception_color_detail,
28
+ plain_color_sym: :menu_chrome_color,
29
+ label: 'Dependencies:',
30
+ highlight: [],
31
+ line_prefix: ' ',
32
+ line_postfix: '',
33
+ detail_sep: ' '
34
+ )
35
+ formatted_deps = dependencies&.map do |dep_name, sub_items|
36
+ formatted_sub_items = sub_items.map do |item|
37
+ color_sym = highlight.include?(item) ? highlight_color_sym : plain_color_sym
38
+ string_send_color(item, color_sym)
39
+ end.join(detail_sep)
40
+
41
+ "#{line_prefix}- #{string_send_color(dep_name,
42
+ highlight.include?(dep_name) ? highlight_color_sym : plain_color_sym)}: #{formatted_sub_items}#{line_postfix}"
43
+ end || []
44
+
45
+ "#{line_prefix}#{string_send_color(label,
46
+ highlight_color_sym)}#{line_postfix}\n" + formatted_deps.join("\n")
47
+ end
48
+ # warn menu_blocks.to_yaml.sub(/^(?:---\n)?/, "MenuBlocks:\n")
49
+
50
+ IndexedLine = Struct.new(:index, :line) do
51
+ def to_s
52
+ line
53
+ end
54
+ end
55
+
56
+ # Class DirectorySearcher
57
+ # This class provides methods to search for a specified pattern
58
+ # in directory names, file names, and contents of files within given paths.
59
+ class DirectorySearcher
60
+ attr_reader :pattern, :paths, :include_subdirectories, :filename_glob
61
+
62
+ # Constructor
63
+ # @param pattern [Regexp] The regular expression pattern to search for.
64
+ # @param paths [Array<String>] List of directories to search in.
65
+ # @param include_subdirectories [Boolean] Whether to search in subdirectories.
66
+ # @param filename_glob [String, nil] Glob pattern for file names.
67
+ def initialize(pattern, paths, include_subdirectories: true, filename_glob: '*.[Mm][Dd]') #'*.md'
68
+ @pattern = pattern
69
+ @paths = paths
70
+ @include_subdirectories = include_subdirectories
71
+ @filename_glob = filename_glob
72
+ end
73
+
74
+ # Searches for the pattern in directory names.
75
+ # @return [Array<String>] List of matching directory names.
76
+ def search_in_directory_names
77
+ match_dirs = []
78
+ @paths.each do |path|
79
+ Find.find(path) do |p|
80
+ # p 'search_in_directory_names', p
81
+ # Find.prune unless @include_subdirectories || path == p
82
+ match_dirs << p if File.directory?(p) && p.match?(@pattern)
83
+ end
84
+ end
85
+ match_dirs
86
+ end
87
+
88
+ # Searches for the pattern in file names.
89
+ # @return [Array<String>] List of matching file names.
90
+ def search_in_file_names
91
+ match_files = []
92
+ @paths.each do |path|
93
+ Find.find(path) do |p|
94
+ # Find.prune unless @include_subdirectories || path == p
95
+ next unless File.file?(p)
96
+
97
+ file_name = File.basename(p)
98
+ next if @filename_glob && !File.fnmatch(@filename_glob, file_name)
99
+
100
+ begin
101
+ match_files << p if file_name.encode('UTF-8', invalid: :replace, undef: :replace,
102
+ replace: '').match?(@pattern)
103
+ rescue EncodingError
104
+ # Optionally log the file with encoding issues
105
+ # puts "Encoding error in file: #{p}"
106
+ end
107
+ end
108
+ end
109
+ match_files
110
+ end
111
+
112
+ # Searches for the pattern in the contents of the files and returns matches along with their file paths and line numbers.
113
+ # @return [Hash] A hash where each key is a file path and each value is an array of hashes with :line_number and :line keys.
114
+ def search_in_file_contents
115
+ match_details = {}
116
+
117
+ @paths.each do |path|
118
+ Find.find(path) do |p|
119
+ Find.prune unless @include_subdirectories || path == p
120
+ next unless File.file?(p)
121
+
122
+ next if @filename_glob && !File.fnmatch(@filename_glob, File.basename(p))
123
+
124
+ begin
125
+ File.foreach(p).with_index(1) do |line, line_num| # Index starts from 1 for line numbers
126
+ line_utf8 = line.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')
127
+ if line_utf8.match?(@pattern)
128
+ match_details[p] ||= []
129
+ # match_details[p] << { number: line_num, line: line_utf8.chomp }
130
+ match_details[p] << IndexedLine.new(line_num, line_utf8.chomp)
131
+ end
132
+ end
133
+ rescue EncodingError
134
+ # Optionally log the file with encoding issues
135
+ # puts "Encoding error in file: #{p}"
136
+ end
137
+ end
138
+ end
139
+
140
+ match_details
141
+ end
142
+
143
+ # # Searches for the pattern in the contents of the files.
144
+ # # @return [Array<String>] List of matching lines from files.
145
+ # def search_in_file_contents
146
+ # match_lines = []
147
+ # @paths.each do |path|
148
+ # Find.find(path) do |p|
149
+ # Find.prune unless @include_subdirectories || path == p
150
+ # next unless File.file?(p)
151
+
152
+ # next if @filename_glob && !File.fnmatch(@filename_glob, File.basename(p))
153
+
154
+ # begin
155
+ # File.foreach(p).with_index do |line, _line_num|
156
+ # line_utf8 = line.encode('UTF-8', invalid: :replace, undef: :replace, replace: '')
157
+ # match_lines << line_utf8.chomp if line_utf8.match?(@pattern)
158
+ # end
159
+ # rescue EncodingError
160
+ # # Optionally log the file with encoding issues
161
+ # # puts "Encoding error in file: #{p}"
162
+ # end
163
+ # end
164
+ # end
165
+ # match_lines
166
+ # end
167
+ end
168
+
169
+ if $PROGRAM_NAME == __FILE__
170
+ require 'bundler/setup'
171
+ Bundler.require(:default)
172
+
173
+ require 'minitest/autorun'
174
+ # require 'mocha/minitest'
175
+ # require_relative 'directory_searcher'
176
+
177
+ # Test class for DirectorySearcher
178
+ class DirectorySearcherTest < Minitest::Test
179
+ # Setup method to initialize common test data
180
+ def setup
181
+ @pattern = /test_pattern/
182
+ @paths = ['./spec']
183
+ @searcher = DirectorySearcher.new(@pattern, @paths)
184
+ end
185
+
186
+ # Test search_in_directory_names method
187
+ def test_search_in_directory_names
188
+ # Add assertions based on your test directory structure and expected results
189
+ assert_equal [], @searcher.search_in_directory_names
190
+ end
191
+
192
+ # Test search_in_file_names method
193
+ def test_search_in_file_names
194
+ # Add assertions based on your test directory structure and expected results
195
+ assert_equal [], @searcher.search_in_file_names
196
+ end
197
+
198
+ # Test search_in_file_contents method
199
+ def test_search_in_file_contents
200
+ # Add assertions based on your test directory structure and expected results
201
+ assert_equal ({}), @searcher.search_in_file_contents
202
+ end
203
+ end
204
+
205
+ # Test class for DirectorySearcher
206
+ class DirectorySearcherTest2 < Minitest::Test
207
+ # Setup method to initialize common test data
208
+ def setup
209
+ @pattern_spec = /spec/
210
+ @paths = ['./spec']
211
+ @filename_glob = nil
212
+ @searcher_spec = DirectorySearcher.new(@pattern_spec, @paths,
213
+ filename_glob: @filename_glob)
214
+ end
215
+
216
+ # Test search_in_directory_names method for 'spec'
217
+ def test_search_in_directory_names_for_spec
218
+ # Replace with actual expected directory names containing 'spec'
219
+ expected_dirs = ['./spec']
220
+ assert_equal expected_dirs, @searcher_spec.search_in_directory_names
221
+ end
222
+
223
+ # Test search_in_file_names method for 'spec'
224
+ def test_search_in_file_names_for_spec
225
+ # Replace with actual expected file names containing 'spec'
226
+ expected_files = ['./spec/cli_spec.rb', './spec/env_spec.rb',
227
+ './spec/markdown_exec_spec.rb', './spec/tap_spec.rb']
228
+ assert_equal expected_files, @searcher_spec.search_in_file_names
229
+ end
230
+
231
+ # # Test search_in_file_contents method for 'spec'
232
+ # def test_search_in_file_contents_for_spec
233
+ # # Replace with actual expected lines containing 'spec'
234
+ # expected_lines = {['Line with spec 1', 'Line with spec 2']}
235
+ # assert_equal expected_lines, @searcher_spec.search_in_file_contents
236
+ # end
237
+ end
238
+
239
+ end
data/lib/env.rb CHANGED
@@ -18,8 +18,7 @@ module Env
18
18
 
19
19
  # :reek:UtilityFunction
20
20
  def env_bool_false(name)
21
- !(val = (name && ENV.fetch(name,
22
- nil))).nil? && !(val.empty? || val == '0')
21
+ !(val = (name && ENV.fetch(name, nil))).nil? && !(val.empty? || val == '0')
23
22
  end
24
23
 
25
24
  # skip :reek:DataClump