Class: ActionController::AbstractRequest
- Defined in:
- lib/action_controller/request.rb
Overview
These methods are available in both the production and test Request objects.
Direct Known Subclasses
Instance Method Summary collapse
-
#cookies ⇒ Object
:nodoc:.
-
#delete? ⇒ Boolean
Is this a DELETE request? Equivalent to request.method == :delete.
-
#domain(tld_length = 1) ⇒ Object
Returns the domain part of a host, such as rubyonrails.org in “www.rubyonrails.org”.
-
#env ⇒ Object
:nodoc:.
-
#formatted_post? ⇒ Boolean
Is this a POST request formatted as XML or YAML?.
-
#get? ⇒ Boolean
Is this a GET request? Equivalent to request.method == :get.
-
#head? ⇒ Boolean
Is this a HEAD request? Equivalent to request.method == :head.
-
#host ⇒ Object
:nodoc:.
-
#host_with_port ⇒ Object
Returns a host:port string for this request, such as example.com or example.com:8080.
-
#method ⇒ Object
Returns the HTTP request method as a lowercase symbol (:get, for example).
-
#parameters ⇒ Object
Returns both GET and POST parameters in a single hash.
-
#path ⇒ Object
Returns the interpreted path to requested resource after all the installation directory of this application was taken into account.
- #path_parameters ⇒ Object
- #path_parameters=(parameters) ⇒ Object
-
#port ⇒ Object
Returns the port number of this request as an integer.
-
#port_string ⇒ Object
Returns a port suffix like “:8080” if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
-
#post? ⇒ Boolean
Is this a POST request? Equivalent to request.method == :post.
-
#post_format ⇒ Object
Determine whether the body of a POST request is URL-encoded (default), XML, or YAML by checking the Content-Type HTTP header:.
-
#protocol ⇒ Object
Return ‘https://’ if this is an SSL request and ‘http://’ otherwise.
-
#put? ⇒ Boolean
Is this a PUT request? Equivalent to request.method == :put.
-
#query_parameters ⇒ Object
– Must be implemented in the concrete request ++.
-
#raw_post ⇒ Object
Receive the raw post data.
-
#relative_url_root ⇒ Object
Returns the path minus the web server relative installation directory.
-
#remote_ip ⇒ Object
Determine originating IP address.
-
#request_parameters ⇒ Object
:nodoc:.
-
#request_uri ⇒ Object
Returns the request URI correctly, taking into account the idiosyncracies of the various servers.
-
#reset_session ⇒ Object
:nodoc:.
-
#server_software ⇒ Object
Returns the lowercase name of the HTTP server software.
-
#session ⇒ Object
:nodoc:.
-
#ssl? ⇒ Boolean
Is this an SSL request?.
-
#standard_port ⇒ Object
Returns the standard port number for this request’s protocol.
-
#subdomains(tld_length = 1) ⇒ Object
Returns all the subdomains as an array, so [“dev”, “www”] would be returned for “dev.www.rubyonrails.org”.
- #symbolized_path_parameters ⇒ Object
-
#xml_http_request? ⇒ Boolean
(also: #xhr?)
Returns true if the request’s “X-Requested-With” header contains “XMLHttpRequest”.
-
#xml_post? ⇒ Boolean
Is this a POST request formatted as XML?.
-
#yaml_post? ⇒ Boolean
Is this a POST request formatted as YAML?.
Instance Method Details
#cookies ⇒ Object
:nodoc:
233 234 |
# File 'lib/action_controller/request.rb', line 233 def #:nodoc: end |
#delete? ⇒ Boolean
Is this a DELETE request? Equivalent to request.method == :delete
32 33 34 |
# File 'lib/action_controller/request.rb', line 32 def delete? method == :delete end |
#domain(tld_length = 1) ⇒ Object
Returns the domain part of a host, such as rubyonrails.org in “www.rubyonrails.org”. You can specify a different tld_length
, such as 2 to catch rubyonrails.co.uk in “www.rubyonrails.co.uk”.
111 112 113 114 115 |
# File 'lib/action_controller/request.rb', line 111 def domain(tld_length = 1) return nil if !/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.match(host).nil? or host.nil? host.split('.').last(1 + tld_length).join('.') end |
#env ⇒ Object
:nodoc:
227 228 |
# File 'lib/action_controller/request.rb', line 227 def env #:nodoc: end |
#formatted_post? ⇒ Boolean
Is this a POST request formatted as XML or YAML?
67 68 69 |
# File 'lib/action_controller/request.rb', line 67 def formatted_post? post? && (post_format == :xml || post_format == :yaml) end |
#get? ⇒ Boolean
Is this a GET request? Equivalent to request.method == :get
17 18 19 |
# File 'lib/action_controller/request.rb', line 17 def get? method == :get end |
#head? ⇒ Boolean
Is this a HEAD request? Equivalent to request.method == :head
37 38 39 |
# File 'lib/action_controller/request.rb', line 37 def head? method == :head end |
#host ⇒ Object
:nodoc:
230 231 |
# File 'lib/action_controller/request.rb', line 230 def host #:nodoc: end |
#host_with_port ⇒ Object
Returns a host:port string for this request, such as example.com or example.com:8080.
196 197 198 |
# File 'lib/action_controller/request.rb', line 196 def host_with_port host + port_string end |
#method ⇒ Object
Returns the HTTP request method as a lowercase symbol (:get, for example)
12 13 14 |
# File 'lib/action_controller/request.rb', line 12 def method env['REQUEST_METHOD'].downcase.to_sym end |
#parameters ⇒ Object
Returns both GET and POST parameters in a single hash.
7 8 9 |
# File 'lib/action_controller/request.rb', line 7 def parameters @parameters ||= request_parameters.merge(query_parameters).merge(path_parameters).with_indifferent_access end |
#path ⇒ Object
Returns the interpreted path to requested resource after all the installation directory of this application was taken into account
160 161 162 163 164 165 166 167 |
# File 'lib/action_controller/request.rb', line 160 def path path = (uri = request_uri) ? uri.split('?').first : '' # Cut off the path to the installation directory if given root = relative_url_root path[0, root.length] = '' if root path || '' end |
#path_parameters ⇒ Object
209 210 211 |
# File 'lib/action_controller/request.rb', line 209 def path_parameters @path_parameters ||= {} end |
#path_parameters=(parameters) ⇒ Object
200 201 202 203 |
# File 'lib/action_controller/request.rb', line 200 def path_parameters=(parameters) @path_parameters = parameters @symbolized_path_parameters = @parameters = nil end |
#port ⇒ Object
Returns the port number of this request as an integer.
176 177 178 |
# File 'lib/action_controller/request.rb', line 176 def port @port_as_int ||= env['SERVER_PORT'].to_i end |
#port_string ⇒ Object
Returns a port suffix like “:8080” if the port number of this request is not the default HTTP port 80 or HTTPS port 443.
190 191 192 |
# File 'lib/action_controller/request.rb', line 190 def port_string (port == standard_port) ? '' : ":#{port}" end |
#post? ⇒ Boolean
Is this a POST request? Equivalent to request.method == :post
22 23 24 |
# File 'lib/action_controller/request.rb', line 22 def post? method == :post end |
#post_format ⇒ Object
Determine whether the body of a POST request is URL-encoded (default), XML, or YAML by checking the Content-Type HTTP header:
Content-Type Post Format
application/xml :xml
text/xml :xml
application/x-yaml :yaml
text/x-yaml :yaml
* :url_encoded
For backward compatibility, the post format is extracted from the X-Post-Data-Format HTTP header if present.
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/action_controller/request.rb', line 53 def post_format @post_format ||= if env['HTTP_X_POST_DATA_FORMAT'] env['HTTP_X_POST_DATA_FORMAT'].downcase.to_sym else case env['CONTENT_TYPE'].to_s.downcase when 'application/xml', 'text/xml' then :xml when 'application/x-yaml', 'text/x-yaml' then :yaml else :url_encoded end end end |
#protocol ⇒ Object
Return ‘https://’ if this is an SSL request and ‘http://’ otherwise.
150 151 152 |
# File 'lib/action_controller/request.rb', line 150 def protocol ssl? ? 'https://' : 'http://' end |
#put? ⇒ Boolean
Is this a PUT request? Equivalent to request.method == :put
27 28 29 |
# File 'lib/action_controller/request.rb', line 27 def put? method == :put end |
#query_parameters ⇒ Object
– Must be implemented in the concrete request ++
221 222 |
# File 'lib/action_controller/request.rb', line 221 def query_parameters #:nodoc: end |
#raw_post ⇒ Object
Receive the raw post data. This is useful for services such as REST, XMLRPC and SOAP which communicate over HTTP POST but don’t use the traditional parameter format.
129 130 131 |
# File 'lib/action_controller/request.rb', line 129 def raw_post env['RAW_POST_DATA'] end |
#relative_url_root ⇒ Object
Returns the path minus the web server relative installation directory. This method returns nil unless the web server is apache.
171 172 173 |
# File 'lib/action_controller/request.rb', line 171 def relative_url_root @@relative_url_root ||= server_software == 'apache' ? File.dirname(env["SCRIPT_NAME"].to_s).gsub(/(^\.$|^\/$)/, '') : '' end |
#remote_ip ⇒ Object
Determine originating IP address. REMOTE_ADDR is the standard but will fail if the user is behind a proxy. HTTP_CLIENT_IP and/or HTTP_X_FORWARDED_FOR are set by proxies so check for these before falling back to REMOTE_ADDR. HTTP_X_FORWARDED_FOR may be a comma- delimited list in the case of multiple chained proxies; the first is the originating IP.
95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/action_controller/request.rb', line 95 def remote_ip return env['HTTP_CLIENT_IP'] if env.include? 'HTTP_CLIENT_IP' if env.include? 'HTTP_X_FORWARDED_FOR' then remote_ips = env['HTTP_X_FORWARDED_FOR'].split(',').reject do |ip| ip =~ /^unknown$|^(10|172\.(1[6-9]|2[0-9]|30|31)|192\.168)\./i end return remote_ips.first.strip unless remote_ips.empty? end env['REMOTE_ADDR'] end |
#request_parameters ⇒ Object
:nodoc:
224 225 |
# File 'lib/action_controller/request.rb', line 224 def request_parameters #:nodoc: end |
#request_uri ⇒ Object
Returns the request URI correctly, taking into account the idiosyncracies of the various servers.
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/action_controller/request.rb', line 135 def request_uri if uri = env['REQUEST_URI'] (%r{^\w+\://[^/]+(/.*|$)$} =~ uri) ? $1 : uri # Remove domain, which webrick puts into the request_uri. else # REQUEST_URI is blank under IIS - get this from PATH_INFO and SCRIPT_NAME script_filename = env['SCRIPT_NAME'].to_s.match(%r{[^/]+$}) uri = env['PATH_INFO'] uri = uri.sub(/#{script_filename}\//, '') unless script_filename.nil? unless (env_qs = env['QUERY_STRING']).nil? || env_qs.empty? uri << '?' << env_qs end uri end end |
#reset_session ⇒ Object
:nodoc:
239 240 |
# File 'lib/action_controller/request.rb', line 239 def reset_session #:nodoc: end |
#server_software ⇒ Object
Returns the lowercase name of the HTTP server software.
214 215 216 |
# File 'lib/action_controller/request.rb', line 214 def server_software (env['SERVER_SOFTWARE'] && /^([a-zA-Z]+)/ =~ env['SERVER_SOFTWARE']) ? $1.downcase : nil end |
#session ⇒ Object
:nodoc:
236 237 |
# File 'lib/action_controller/request.rb', line 236 def session #:nodoc: end |
#ssl? ⇒ Boolean
Is this an SSL request?
155 156 157 |
# File 'lib/action_controller/request.rb', line 155 def ssl? env['HTTPS'] == 'on' end |
#standard_port ⇒ Object
Returns the standard port number for this request’s protocol
181 182 183 184 185 186 |
# File 'lib/action_controller/request.rb', line 181 def standard_port case protocol when 'https://' then 443 else 80 end end |
#subdomains(tld_length = 1) ⇒ Object
Returns all the subdomains as an array, so [“dev”, “www”] would be returned for “dev.www.rubyonrails.org”. You can specify a different tld_length
, such as 2 to catch [“www”] instead of [“www”, “rubyonrails”] in “www.rubyonrails.co.uk”.
120 121 122 123 124 |
# File 'lib/action_controller/request.rb', line 120 def subdomains(tld_length = 1) return [] unless host parts = host.split('.') parts[0..-(tld_length+2)] end |
#symbolized_path_parameters ⇒ Object
205 206 207 |
# File 'lib/action_controller/request.rb', line 205 def symbolized_path_parameters @symbolized_path_parameters ||= path_parameters.symbolize_keys end |
#xml_http_request? ⇒ Boolean Also known as: xhr?
Returns true if the request’s “X-Requested-With” header contains “XMLHttpRequest”. (The Prototype Javascript library sends this header with every Ajax request.)
84 85 86 |
# File 'lib/action_controller/request.rb', line 84 def xml_http_request? not /XMLHttpRequest/i.match(env['HTTP_X_REQUESTED_WITH']).nil? end |
#xml_post? ⇒ Boolean
Is this a POST request formatted as XML?
72 73 74 |
# File 'lib/action_controller/request.rb', line 72 def xml_post? post? && post_format == :xml end |
#yaml_post? ⇒ Boolean
Is this a POST request formatted as YAML?
77 78 79 |
# File 'lib/action_controller/request.rb', line 77 def yaml_post? post? && post_format == :yaml end |