FIX: Forgot to move result_info into Irb only area
[sinatra.git] / lib / sinatra / pretty_url.rb
blobf20dfd91f4b683945385f3f881e3b57381407e78
1 module Sinatra
3   class PrettyUrl
4     attr_reader :path, :vars
5     
6     VALID_FORMATS = %w( xml html )
7     
8     def initialize(path)
9       @path = path
10       @param_keys = []
11       @vars = {}
12       @regex = create_regex_from_path(@path)
13     end
14     
15     def matches?(path)
16       !(path =~ @regex).nil?
17     end
18     
19     def extract_params(path)
20       if matches = path.to_s.scan(@regex).flatten
21         @param_keys.each_with_index do |v, i|
22           @vars[v] = matches[i]
23         end
24       end
25       vars[:format] = extract_format(path)
26       vars
27     end
28     
29     private
30     
31       def extract_format(path)
32         format = File.extname(path)[1..-1]
33         VALID_FORMATS.include?(format) ? format : 'html'
34       end
35     
36       def create_regex_from_path(path)
37         path = path.dup
38         path.gsub!(/:(\w+)/) { @param_keys << $1.intern; '([\w\d-]+)' }
39         path.gsub!(/(\/\.)/) { "\#{$1}" }
40         /^#{path}$/
41       end
42   end
43   
44 end