module Lorentz::Glob

Public Class Methods

compile(source, case_sensitive=false) click to toggle source

jacked from github.com/karottenreibe/joker & specifically karottenreibe.github.com/2009/12/03/inside-the-joker/

# File lib/lorentz/glob.rb, line 4
def compile(source, case_sensitive=false)
  ptr = 0
  compiled = '^'
  while ptr < source.length
    snip = source[ptr..ptr]
    case snip
    when '\\'
      lookahead = source[ptr+1..ptr+1]
      case snip
      when '\\\\', '\\?', '\\*'
        compiled << snip << lookahead
      else
        compiled << Regexp.quote(lookahead)
      end
      ptr += 1
    when '?' then compiled << '.'
    when '*' then compiled << '.*'
    when '[' then compiled << '['
    when ']' then compiled << ']'
    else          compiled << Regexp.quote(snip)
    end
    ptr += 1
  end
  compiled << '$'
  Regexp.compile(compiled, case_sensitive)
end

Private Instance Methods

compile(source, case_sensitive=false) click to toggle source

jacked from github.com/karottenreibe/joker & specifically karottenreibe.github.com/2009/12/03/inside-the-joker/

# File lib/lorentz/glob.rb, line 4
def compile(source, case_sensitive=false)
  ptr = 0
  compiled = '^'
  while ptr < source.length
    snip = source[ptr..ptr]
    case snip
    when '\\'
      lookahead = source[ptr+1..ptr+1]
      case snip
      when '\\\\', '\\?', '\\*'
        compiled << snip << lookahead
      else
        compiled << Regexp.quote(lookahead)
      end
      ptr += 1
    when '?' then compiled << '.'
    when '*' then compiled << '.*'
    when '[' then compiled << '['
    when ']' then compiled << ']'
    else          compiled << Regexp.quote(snip)
    end
    ptr += 1
  end
  compiled << '$'
  Regexp.compile(compiled, case_sensitive)
end