module Sinatra::UrlForHelper
Public Instance Methods
url_for(url_fragment, mode=nil, options = nil)
click to toggle source
Construct a link to url_fragment
, which should be given relative to the base of this Sinatra
app. The mode should be either :path_only
, which will generate an absolute path within the current domain (the default), or :full
, which will include the site name and port number. (The latter is typically necessary for links in RSS feeds.) Example usage:
url_for "/" # Returns "/myapp/" url_for "/foo" # Returns "/myapp/foo" url_for "/foo", :full # Returns "http://example.com/myapp/foo"
You can also pass in a hash of options, which will be appended to the URL as escaped parameters, like so:
url_for "/", :x => "y" # Returns "/myapp/?x=y" url_for "/foo", :x => "M&Ms" # Returns "/myapp/foo?x=M%26Ms"
You can also specify the mode:
url_for "/foo", :full, :x => "y" # Returns "http://example.com/myapp/foo?x=y"
# File lib/sinatra/url_for.rb, line 27 def url_for url_fragment, mode=nil, options = nil if mode.is_a? Hash options = mode mode = nil end if mode.nil? mode = :path_only end mode = mode.to_sym unless mode.is_a? Symbol optstring = nil if options.is_a? Hash optstring = '?' + options.map { |k,v| "#{k}=#{URI.escape(v.to_s, /[^#{URI::PATTERN::UNRESERVED}]/)}" }.join('&') end case mode when :path_only base = request.script_name when :full scheme = request.scheme if (scheme == 'http' && request.port == 80 || scheme == 'https' && request.port == 443) port = "" else port = ":#{request.port}" end base = "#{scheme}://#{request.host}#{port}#{request.script_name}" else raise TypeError, "Unknown url_for mode #{mode.inspect}" end "#{base}#{url_fragment}#{optstring}" end