Module: FakeFS::Globber
Overview
Handles globbing for FakeFS.
Instance Method Summary collapse
Instance Method Details
#expand(pattern) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/fakefs/globber.rb', line 6 def (pattern) pattern = pattern.to_s return [pattern] if pattern[0] != '{' || pattern[-1] != '}' part = '' result = [] each_char_with_levels pattern, '{', '}' do |chr, level| case level when 0 case chr when '{' # noop else part << chr end when 1 case chr when ',' result << part part = '' when '}' # noop else part << chr end else part << chr end end result << part result end |
#path_components(pattern) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/fakefs/globber.rb', line 43 def path_components(pattern) pattern = pattern.to_s part = '' result = [] each_char_with_levels pattern, '{', '}' do |chr, level| if level == 0 && chr == File::SEPARATOR result << part part = '' else part << chr end end result << part drop_root(result).reject(&:empty?) end |
#regexp(pattern) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/fakefs/globber.rb', line 63 def regexp(pattern) pattern = pattern.to_s regex_body = pattern.gsub('.', '\.') .gsub('+') { '\+' } .gsub('?', '.') .gsub('*', '.*') .gsub('(', '\(') .gsub(')', '\)') .gsub('$', '\$') # This matches nested braces and attempts to do something correct most of the time # There are known issues (i.e. {,*,*/*}) that cannot be resolved with out a total # refactoring loop do break unless regex_body.gsub!(/(?<re>\{(?:(?>[^{}]+)|\g<re>)*\})/) do "(#{Regexp.last_match[1][1..-2].gsub(',', '|')})" end end regex_body = regex_body.gsub(/\A\./, '(?!\.).') /\A#{regex_body}\Z/ end |