class Dragonfly::UrlMapper
Attributes
segments[R]
url_format[R]
url_regexp[R]
Public Class Methods
new(url_format, patterns={})
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 16 def initialize(url_format, patterns={}) @url_format = url_format raise BadUrlFormat, "bad url format #{url_format}" if url_format[/[\w_]:[\w_]/] init_segments(patterns) init_url_regexp end
Public Instance Methods
params_for(path, query=nil)
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 25 def params_for(path, query=nil) if path and md = path.match(url_regexp) params = Rack::Utils.parse_query(query) params_in_url.each_with_index do |var, i| value = md[i+1][1..-1] if md[i+1] params[var] = value && Utils.uri_unescape(value) end params end end
params_in_url()
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 36 def params_in_url @params_in_url ||= url_format.scan(/\:[\w_]+/).map{|f| f.tr(':','') } end
url_for(params)
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 40 def url_for(params) params = params.dup url = url_format.dup segments.each do |seg| value = params[seg.param] value ? url.sub!(/:[\w_]+/, Utils.uri_escape_segment(value.to_s)) : url.sub!(/.:[\w_]+/, '') params.delete(seg.param) end url << "?#{Rack::Utils.build_query(params)}" if params.any? url end
Private Instance Methods
init_segments(patterns)
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 54 def init_segments(patterns) @segments = [] url_format.scan(/([^\w_]):([\w_]+)/).each do |seperator, param| segments << Segment.new( param, seperator, patterns[param.to_sym] || '[^\/\-\.]' ) end end
init_url_regexp()
click to toggle source
# File lib/dragonfly/url_mapper.rb, line 65 def init_url_regexp i = -1 regexp_string = url_format.gsub(/[^\w_]:[\w_]+/) do i += 1 segments[i].regexp_string end @url_regexp = Regexp.new('\A' + regexp_string + '\z') end