Class: CodeQualia::PatternExpander

Inherits:
Object
  • Object
show all
Defined in:
lib/code_qualia/pattern_expander.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.expand_brace_patterns(pattern) ⇒ Object



8
9
10
# File 'lib/code_qualia/pattern_expander.rb', line 8

def self.expand_brace_patterns(pattern)
  new.expand_brace_patterns(pattern)
end

.extract_base_directories(patterns) ⇒ Object



35
36
37
# File 'lib/code_qualia/pattern_expander.rb', line 35

def self.extract_base_directories(patterns)
  new.extract_base_directories(patterns)
end

Instance Method Details

#expand_brace_patterns(pattern) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/code_qualia/pattern_expander.rb', line 12

def expand_brace_patterns(pattern)
  parts = pattern.split('{', 2)
  return [pattern] unless parts.length == 2

  prefix = parts[0]
  suffix_and_rest = parts[1].split('}', 2)
  return [pattern] unless suffix_and_rest.length == 2

  options = suffix_and_rest[0].split(',')
  suffix = suffix_and_rest[1]

  expanded = []
  options.each do |option|
    expanded_pattern = "#{prefix}#{option}#{suffix}"
    if expanded_pattern.include?('{') && expanded_pattern.include?('}')
      expanded.concat(expand_brace_patterns(expanded_pattern))
    else
      expanded << expanded_pattern
    end
  end
  expanded
end

#extract_base_directories(patterns) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/code_qualia/pattern_expander.rb', line 39

def extract_base_directories(patterns)
  directories = Set.new

  Array(patterns).each do |pattern|
    expanded_patterns = if pattern.include?('{') && pattern.include?('}')
                          expand_brace_patterns(pattern)
                        else
                          [pattern]
                        end

    expanded_patterns.each do |expanded_pattern|
      base_dirs = extract_base_directory_from_pattern(expanded_pattern)

      # Handle both single directory (string) and multiple directories (array)
      base_dirs = Array(base_dirs)
      base_dirs.each do |base_dir|
        directories.add("#{base_dir}/") if base_dir && !base_dir.empty?
      end
    end
  end

  directories.to_a
end