GET()
click to toggle source
Returns the data received in the query string.
def GET
if @env["rack.request.query_string"] == query_string
@env["rack.request.query_hash"]
else
p = parse_query({ :query => query_string, :separator => '&;' })
@env["rack.request.query_string"] = query_string
@env["rack.request.query_hash"] = p
end
end
POST()
click to toggle source
Returns the data received in the request body.
This method support both application/x-www-form-urlencoded and
multipart/form-data.
def POST
if @env["rack.input"].nil?
raise "Missing rack.input"
elsif @env["rack.request.form_input"].equal? @env["rack.input"]
@env["rack.request.form_hash"]
elsif form_data? || parseable_data?
unless @env["rack.request.form_hash"] = parse_multipart(env)
form_vars = @env["rack.input"].read
form_vars.slice!(-1) if form_vars[-1] == \00
\
@env["rack.request.form_vars"] = form_vars
@env["rack.request.form_hash"] = parse_query({ :query => form_vars, :separator => '&' })
@env["rack.input"].rewind
end
@env["rack.request.form_input"] = @env["rack.input"]
@env["rack.request.form_hash"]
else
{}
end
end
[](key)
click to toggle source
[]=(key, value)
click to toggle source
shortcut for request.params = value
Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to
destructively modify params.
def []=(key, value)
params[key.to_s] = value
end
accept_encoding()
click to toggle source
def accept_encoding
parse_http_accept_header(@env["HTTP_ACCEPT_ENCODING"])
end
accept_language()
click to toggle source
def accept_language
parse_http_accept_header(@env["HTTP_ACCEPT_LANGUAGE"])
end
base_url()
click to toggle source
def base_url
url = "#{scheme}://#{host}"
url << ":#{port}" if port != DEFAULT_PORTS[scheme]
url
end
body()
click to toggle source
def body; @env["rack.input"] end
content_charset()
click to toggle source
The character set of the request body if a "charset" media type parameter
was given, or nil if no "charset" was specified. Note that, per RFC2616,
text/* media types that specify no explicit charset are to be considered
ISO-8859-1.
def content_charset
media_type_params['charset']
end
content_length()
click to toggle source
def content_length; @env['CONTENT_LENGTH'] end
content_type()
click to toggle source
def content_type
content_type = @env['CONTENT_TYPE']
content_type.nil? || content_type.empty? ? nil : content_type
end
cookies()
click to toggle source
def cookies
hash = @env["rack.request.cookie_hash"] ||= {}
string = @env["HTTP_COOKIE"]
return hash if string == @env["rack.request.cookie_string"]
hash.clear
cookies = Utils.parse_query(string, ';,') { |s| Rack::Utils.unescape(s) rescue s }
cookies.each { |k,v| hash[k] = Array === v ? v.first : v }
@env["rack.request.cookie_string"] = string
hash
end
delete?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type DELETE
def delete?; request_method == "DELETE" end
delete_param(k)
click to toggle source
Destructively delete a parameter, whether it's in GET or POST. Returns the value of the
deleted parameter.
If the parameter is in both GET and
POST, the POST value takes precedence since
that's how params works.
env is not touched.
def delete_param(k)
v = [ self.POST.delete(k), self.GET.delete(k) ].compact.first
@params = nil
v
end
fullpath()
click to toggle source
def fullpath
query_string.empty? ? path : "#{path}?#{query_string}"
end
get?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type GET
def get?; request_method == GET end
head?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type HEAD
def head?; request_method == HEAD end
host()
click to toggle source
def host
host_with_port.to_s.sub(/:\d+\z/, '')
end
host_with_port()
click to toggle source
def host_with_port
if forwarded = @env["HTTP_X_FORWARDED_HOST"]
forwarded.split(/,\s?/).last
else
@env['HTTP_HOST'] || "#{@env['SERVER_NAME'] || @env['SERVER_ADDR']}:#{@env['SERVER_PORT']}"
end
end
ip()
click to toggle source
def ip
remote_addrs = split_ip_addresses(@env['REMOTE_ADDR'])
remote_addrs = reject_trusted_ip_addresses(remote_addrs)
return remote_addrs.first if remote_addrs.any?
forwarded_ips = split_ip_addresses(@env['HTTP_X_FORWARDED_FOR'])
return reject_trusted_ip_addresses(forwarded_ips).last || @env["REMOTE_ADDR"]
end
link?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type LINK
def link?; request_method == "LINK" end
logger()
click to toggle source
def logger; @env['rack.logger'] end
options?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type OPTIONS
def options?; request_method == "OPTIONS" end
params()
click to toggle source
The union of GET and POST data.
Note that modifications will not be persisted in the env. Use update_param or delete_param if you want to
destructively modify params.
def params
@params ||= self.GET.merge(self.POST)
rescue EOFError
self.GET.dup
end
parseable_data?()
click to toggle source
Determine whether the request body contains data by checking the request media_type against registered
parse-data media-types
def parseable_data?
PARSEABLE_DATA_MEDIA_TYPES.include?(media_type)
end
patch?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type PATCH
def patch?; request_method == "PATCH" end
path()
click to toggle source
def path
script_name + path_info
end
path_info()
click to toggle source
def path_info; @env[PATH_INFO].to_s end
path_info=(s)
click to toggle source
def path_info=(s); @env["PATH_INFO"] = s.to_s end
port()
click to toggle source
def port
if port = host_with_port.split(/:/)[1]
port.to_i
elsif port = @env['HTTP_X_FORWARDED_PORT']
port.to_i
elsif @env.has_key?("HTTP_X_FORWARDED_HOST")
DEFAULT_PORTS[scheme]
elsif @env.has_key?("HTTP_X_FORWARDED_PROTO")
DEFAULT_PORTS[@env['HTTP_X_FORWARDED_PROTO'].split(',')[0]]
else
@env["SERVER_PORT"].to_i
end
end
post?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type POST
def post?; request_method == "POST" end
put?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type PUT
def put?; request_method == "PUT" end
query_string()
click to toggle source
def query_string; @env[QUERY_STRING].to_s end
referer()
click to toggle source
the referer of the client
def referer
@env['HTTP_REFERER']
end
referrer()
click to toggle source
request_method()
click to toggle source
def request_method; @env["REQUEST_METHOD"] end
scheme()
click to toggle source
def scheme
if @env['HTTPS'] == 'on'
'https'
elsif @env['HTTP_X_FORWARDED_SSL'] == 'on'
'https'
elsif @env['HTTP_X_FORWARDED_SCHEME']
@env['HTTP_X_FORWARDED_SCHEME']
elsif @env['HTTP_X_FORWARDED_PROTO']
@env['HTTP_X_FORWARDED_PROTO'].split(',')[0]
else
@env["rack.url_scheme"]
end
end
script_name()
click to toggle source
def script_name; @env[SCRIPT_NAME].to_s end
script_name=(s)
click to toggle source
def script_name=(s); @env["SCRIPT_NAME"] = s.to_s end
session()
click to toggle source
def session; @env['rack.session'] ||= {} end
session_options()
click to toggle source
def session_options; @env['rack.session.options'] ||= {} end
ssl?()
click to toggle source
def ssl?
scheme == 'https'
end
trace?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type TRACE
def trace?; request_method == "TRACE" end
trusted_proxy?(ip)
click to toggle source
def trusted_proxy?(ip)
ip =~ /\A127\.0\.0\.1\Z|\A(10|172\.(1[6-9]|2[0-9]|30|31)|192\.168)\.|\A::1\Z|\Afd[0-9a-f]{2}:.+|\Alocalhost\Z|\Aunix\Z|\Aunix:/
end
unlink?()
click to toggle source
Checks the HTTP request method (or verb) to see if it was of type UNLINK
def unlink?; request_method == "UNLINK" end
update_param(k, v)
click to toggle source
Destructively update a parameter, whether it's in GET and/or POST. Returns nil.
The parameter is updated wherever it was previous defined, so GET, POST, or both. If it wasn't
previously defined, it's inserted into GET.
env is not touched.
def update_param(k, v)
found = false
if self.GET.has_key?(k)
found = true
self.GET[k] = v
end
if self.POST.has_key?(k)
found = true
self.POST[k] = v
end
unless found
self.GET[k] = v
end
@params = nil
nil
end
url()
click to toggle source
Tries to return a remake of the original request URL as a string.
def url
base_url + fullpath
end
user_agent()
click to toggle source
def user_agent
@env['HTTP_USER_AGENT']
end
values_at(*keys)
click to toggle source
like Hash#values_at
def values_at(*keys)
keys.map{|key| params[key] }
end
xhr?()
click to toggle source
def xhr?
@env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
end