class ActionDispatch::Journey::Scanner

def scan

def scan
  case
    # /
  when @ss.skip(/\//)
    [:SLASH, "/"]
  when @ss.skip(/\(/)
    [:LPAREN, "("]
  when @ss.skip(/\)/)
    [:RPAREN, ")"]
  when @ss.skip(/\|/)
    [:OR, "|"]
  when @ss.skip(/\./)
    [:DOT, "."]
  when text = dedup_scan(/:\w+/)
    [:SYMBOL, text]
  when text = dedup_scan(/\*\w+/)
    [:STAR, text]
  when text = @ss.scan(/(?:[\w%\-~!$&'*+,;=@]|\\[:()])+/)
    text.tr! "\\", ""
    [:LITERAL, -text]
    # any char
  when text = dedup_scan(/./)
    [:LITERAL, text]
  end
end