server/lib/sinatra/url_for.rb
# Construct a link to +url_fragment+, which should be given relative to
# the base of this Sinatra app.  The mode should be either
# <code>:path_only</code>, which will generate an absolute path within
# the current domain (the default), or <code>:full</code>, 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"
#--
# See README.rdoc for a list of some of the people who helped me clean
# up earlier versions of this code.
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.



See README.rdoc for a list of some of the people who helped me clean
up earlier versions of this code.
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 . See README . rdoc for a list of some of the people who helped me clean up earlier versions of this code .
def url_for url_fragment, mode=:path_only
      case mode
      when :path_only
        base = request.script_name
      when :full
        scheme = request.scheme
        port = request.port
        request_host = request.host
        if request.env['HTTP_X_FORWARDED_FOR']
          scheme = request.env['HTTP_X_FORWARDED_SCHEME'] || scheme
          port = request.env['HTTP_X_FORWARDED_PORT']
          request_host = request.env['HTTP_X_FORWARDED_HOST']
        end
        if (port.nil? || port == "" ||
            (scheme == 'http' && port.to_s == '80') ||
            (scheme == 'https' && port.to_s == '443'))
          port = ""
        else
          port = ":#{port}"
        end
        base = "#{scheme}://#{request_host}#{port}#{request.script_name}"
      else
        raise TypeError, "Unknown url_for mode #{mode}"
      end
      url_escape = URI.escape(url_fragment)
      if url_escape.match(/^#{base}/) or url_escape.match(/^http/)
        url_escape
      else
        "#{base}#{url_escape}"
      end
    end
def url_for url_fragment , mode = :path_only case mode when :path_only base = request . script_name when :full scheme = request . scheme port = request . port request_host = request . host if request . env [ 'HTTP_X_FORWARDED_FOR' ] scheme = request . env [ 'HTTP_X_FORWARDED_SCHEME' ] || scheme port = request . env [ 'HTTP_X_FORWARDED_PORT' ] request_host = request . env [ 'HTTP_X_FORWARDED_HOST' ] end if ( port . nil? || port == "" || ( scheme == 'http' && port . to_s == '80' ) || ( scheme == 'https' && port . to_s == '443' ) ) port = "" else port = ":#{port}" end base = "#{scheme}://#{request_host}#{port}#{request.script_name}" else raise TypeError , "Unknown url_for mode #{mode}" end url_escape = URI . escape ( url_fragment ) if url_escape . match ( / ^ #{ base } / ) or url_escape . match ( / ^http / ) url_escape else "#{base}#{url_escape}" end end
Construct a link to +url_fragment+, which should be given relative to
the base of this Sinatra app.
Construct a link to + url_fragment + which should be given relative to the base of this Sinatra app .
# Don't add the base fragment if url_for gets called more than once # per url or the url_fragment passed in is an absolute url
url_fragment
mode