Class: Rack::Request
Overview
Direct Known Subclasses
Constant Summary collapse
- FORM_DATA_MEDIA_TYPES =
The set of form-data media-types. Requests that do not indicate one of the media types presents in this list will not be eligible for form-data / param parsing.
[ nil, 'application/x-www-form-urlencoded', 'multipart/form-data' ]
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
The environment of the request.
Instance Method Summary collapse
-
#[](key) ⇒ Object
shortcut for request.params.
-
#[]=(key, value) ⇒ Object
shortcut for request.params = value.
- #accept_encoding ⇒ Object
- #body ⇒ Object
-
#content_charset ⇒ Object
The character set of the request body if a “charset” media type parameter was given, or nil if no “charset” was specified.
- #content_length ⇒ Object
- #content_type ⇒ Object
- #cookies ⇒ Object
- #delete? ⇒ Boolean
-
#form_data? ⇒ Boolean
Determine whether the request body contains form-data by checking the request media_type against registered form-data media-types: “application/x-www-form-urlencoded” and “multipart/form-data”.
- #fullpath ⇒ Object
-
#GET ⇒ Object
Returns the data recieved in the query string.
- #get? ⇒ Boolean
- #head? ⇒ Boolean
- #host ⇒ Object
-
#initialize(env) ⇒ Request
constructor
A new instance of Request.
- #ip ⇒ Object
-
#media_type ⇒ Object
The media type (type/subtype) portion of the CONTENT_TYPE header without any media type parameters.
-
#media_type_params ⇒ Object
The media type parameters provided in CONTENT_TYPE as a Hash, or an empty Hash if no CONTENT_TYPE or media-type parameters were provided.
-
#params ⇒ Object
The union of GET and POST data.
- #path_info ⇒ Object
- #path_info=(s) ⇒ Object
- #port ⇒ Object
-
#POST ⇒ Object
Returns the data recieved in the request body.
- #post? ⇒ Boolean
- #put? ⇒ Boolean
- #query_string ⇒ Object
-
#referer ⇒ Object
(also: #referrer)
the referer of the client or ‘/’.
- #request_method ⇒ Object
- #scheme ⇒ Object
- #script_name ⇒ Object
- #script_name=(s) ⇒ Object
-
#url ⇒ Object
Tries to return a remake of the original request URL as a string.
-
#values_at(*keys) ⇒ Object
like Hash#values_at.
- #xhr? ⇒ Boolean
Constructor Details
#initialize(env) ⇒ Request
Returns a new instance of Request.
16 17 18 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 16 def initialize(env) @env = env end |
Instance Attribute Details
#env ⇒ Object (readonly)
The environment of the request.
14 15 16 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 14 def env @env end |
Instance Method Details
#[](key) ⇒ Object
shortcut for request.params
132 133 134 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 132 def [](key) params[key.to_s] end |
#[]=(key, value) ⇒ Object
shortcut for request.params = value
137 138 139 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 137 def []=(key, value) params[key.to_s] = value end |
#accept_encoding ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 198 def accept_encoding @env["HTTP_ACCEPT_ENCODING"].to_s.split(/,\s*/).map do |part| m = /^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$/.match(part) # From WEBrick if m [m[1], (m[2] || 1.0).to_f] else raise "Invalid value for Accept-Encoding: #{part.inspect}" end end end |
#body ⇒ Object
20 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 20 def body; @env["rack.input"] end |
#content_charset ⇒ Object
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.
56 57 58 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 56 def content_charset media_type_params['charset'] end |
#content_length ⇒ Object
27 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 27 def content_length; @env['CONTENT_LENGTH'] end |
#content_type ⇒ Object
28 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 28 def content_type; @env['CONTENT_TYPE'] end |
#cookies ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 153 def return {} unless @env["HTTP_COOKIE"] if @env["rack.request.cookie_string"] == @env["HTTP_COOKIE"] @env["rack.request.cookie_hash"] else @env["rack.request.cookie_string"] = @env["HTTP_COOKIE"] # According to RFC 2109: # If multiple cookies satisfy the criteria above, they are ordered in # the Cookie header such that those with more specific Path attributes # precede those with less specific. Ordering with respect to other # attributes (e.g., Domain) is unspecified. @env["rack.request.cookie_hash"] = Utils.parse_query(@env["rack.request.cookie_string"], ';,').inject({}) {|h,(k,v)| h[k] = Array === v ? v.first : v h } end end |
#delete? ⇒ Boolean
71 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 71 def delete?; request_method == "DELETE" end |
#form_data? ⇒ Boolean
Determine whether the request body contains form-data by checking the request media_type against registered form-data media-types: “application/x-www-form-urlencoded” and “multipart/form-data”. The list of form-data media types can be modified through the FORM_DATA_MEDIA_TYPES
array.
88 89 90 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 88 def form_data? FORM_DATA_MEDIA_TYPES.include?(media_type) end |
#fullpath ⇒ Object
192 193 194 195 196 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 192 def fullpath path = script_name + path_info path << "?" << query_string unless query_string.empty? path end |
#GET ⇒ Object
Returns the data recieved in the query string.
93 94 95 96 97 98 99 100 101 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 93 def GET if @env["rack.request.query_string"] == query_string @env["rack.request.query_hash"] else @env["rack.request.query_string"] = query_string @env["rack.request.query_hash"] = Utils.parse_query(query_string) end end |
#get? ⇒ Boolean
68 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 68 def get?; request_method == "GET" end |
#head? ⇒ Boolean
72 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 72 def head?; request_method == "HEAD" end |
#host ⇒ Object
60 61 62 63 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 60 def host # Remove port number. (@env["HTTP_HOST"] || @env["SERVER_NAME"]).gsub(/:\d+\z/, '') end |
#ip ⇒ Object
210 211 212 213 214 215 216 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 210 def ip if addr = @env['HTTP_X_FORWARDED_FOR'] addr.split(',').last.strip else @env['REMOTE_ADDR'] end end |
#media_type ⇒ Object
The media type (type/subtype) portion of the CONTENT_TYPE header without any media type parameters. e.g., when CONTENT_TYPE is “text/plain;charset=utf-8”, the media-type is “text/plain”.
For more information on the use of media types in HTTP, see: www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
36 37 38 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 36 def media_type content_type && content_type.split(/\s*[;,]\s*/, 2)[0].downcase end |
#media_type_params ⇒ Object
The media type parameters provided in CONTENT_TYPE as a Hash, or an empty Hash if no CONTENT_TYPE or media-type parameters were provided. e.g., when the CONTENT_TYPE is “text/plain;charset=utf-8”, this method responds with the following Hash:
{ 'charset' => 'utf-8' }
45 46 47 48 49 50 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 45 def media_type_params return {} if content_type.nil? content_type.split(/\s*[;,]\s*/)[1..-1]. collect { |s| s.split('=', 2) }. inject({}) { |hash,(k,v)| hash[k.downcase] = v ; hash } end |
#params ⇒ Object
The union of GET and POST data.
125 126 127 128 129 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 125 def params self.GET.merge(self.POST) rescue EOFError => e self.GET end |
#path_info ⇒ Object
23 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 23 def path_info; @env["PATH_INFO"].to_s end |
#path_info=(s) ⇒ Object
66 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 66 def path_info=(s); @env["PATH_INFO"] = s.to_s end |
#port ⇒ Object
24 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 24 def port; @env["SERVER_PORT"].to_i end |
#POST ⇒ Object
Returns the data recieved in the request body.
This method support both application/x-www-form-urlencoded and multipart/form-data.
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 107 def POST if @env["rack.request.form_input"].eql? @env["rack.input"] @env["rack.request.form_hash"] elsif form_data? @env["rack.request.form_input"] = @env["rack.input"] unless @env["rack.request.form_hash"] = Utils::Multipart.parse_multipart(env) @env["rack.request.form_vars"] = @env["rack.input"].read @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"]) @env["rack.input"].rewind if @env["rack.input"].respond_to?(:rewind) end @env["rack.request.form_hash"] else {} end end |
#post? ⇒ Boolean
69 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 69 def post?; request_method == "POST" end |
#put? ⇒ Boolean
70 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 70 def put?; request_method == "PUT" end |
#query_string ⇒ Object
26 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 26 def query_string; @env["QUERY_STRING"].to_s end |
#referer ⇒ Object Also known as: referrer
the referer of the client or ‘/’
147 148 149 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 147 def referer @env['HTTP_REFERER'] || '/' end |
#request_method ⇒ Object
25 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 25 def request_method; @env["REQUEST_METHOD"] end |
#scheme ⇒ Object
21 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 21 def scheme; @env["rack.url_scheme"] end |
#script_name ⇒ Object
22 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 22 def script_name; @env["SCRIPT_NAME"].to_s end |
#script_name=(s) ⇒ Object
65 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 65 def script_name=(s); @env["SCRIPT_NAME"] = s.to_s end |
#url ⇒ Object
Tries to return a remake of the original request URL as a string.
178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 178 def url url = scheme + "://" url << host if scheme == "https" && port != 443 || scheme == "http" && port != 80 url << ":#{port}" end url << fullpath url end |
#values_at(*keys) ⇒ Object
like Hash#values_at
142 143 144 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 142 def values_at(*keys) keys.map{|key| params[key] } end |
#xhr? ⇒ Boolean
173 174 175 |
# File 'lib/gems/rack-0.9.1/lib/rack/request.rb', line 173 def xhr? @env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest" end |