Class: Rack::Mount::Strexp

Inherits:
Object
  • Object
show all
Defined in:
lib/rack/mount/strexp.rb

Class Method Summary collapse

Class Method Details

.compile(str, requirements = {}, separators = [], anchor = true) ⇒ Object Also known as: new

Parses segmented string expression and converts it into a Regexp

Strexp.compile('foo')
  # => %r{\Afoo\Z}

Strexp.compile('foo/:bar', {}, ['/'])
  # => %r{\Afoo/(?<bar>[^/]+)\Z}

Strexp.compile(':foo.example.com')
  # => %r{\A(?<foo>.+)\.example\.com\Z}

Strexp.compile('foo/:bar', {:bar => /[a-z]+/}, ['/'])
  # => %r{\Afoo/(?<bar>[a-z]+)\Z}

Strexp.compile('foo(.:extension)')
  # => %r{\Afoo(\.(?<extension>.+))?\Z}

Strexp.compile('src/*files')
  # => %r{\Asrc/(?<files>.+)\Z}


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rack/mount/strexp.rb', line 25

def compile(str, requirements = {}, separators = [], anchor = true)
  return Regexp.compile(str) if str.is_a?(Regexp)

  requirements = requirements ? requirements.dup : {}
  normalize_requirements!(requirements, separators)

  parser = StrexpParser.new
  parser.anchor = anchor
  parser.requirements = requirements

  begin
    re = parser.scan_str(str)
  rescue Racc::ParseError => e
    raise RegexpError, e.message
  end

  Regexp.compile(re)
end