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
Returns the hash of environment variables for this request, such as { ‘RAILS_ENV’ => ‘production’ }.
-
#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
Returns the host for this request, such as example.com.
-
#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:
237 238 |
# File 'lib/action_controller/request.rb', line 237 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
Returns the hash of environment variables for this request, such as { ‘RAILS_ENV’ => ‘production’ }.
230 231 |
# File 'lib/action_controller/request.rb', line 230 def env 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
Returns the host for this request, such as example.com.
234 235 |
# File 'lib/action_controller/request.rb', line 234 def host end |
#host_with_port ⇒ Object
Returns a host:port string for this request, such as example.com or example.com:8080.
197 198 199 |
# File 'lib/action_controller/request.rb', line 197 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
210 211 212 |
# File 'lib/action_controller/request.rb', line 210 def path_parameters @path_parameters ||= {} end |
#path_parameters=(parameters) ⇒ Object
201 202 203 204 |
# File 'lib/action_controller/request.rb', line 201 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.
177 178 179 |
# File 'lib/action_controller/request.rb', line 177 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.
191 192 193 |
# File 'lib/action_controller/request.rb', line 191 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 ++
222 223 |
# File 'lib/action_controller/request.rb', line 222 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 174 |
# File 'lib/action_controller/request.rb', line 171 def relative_url_root @@relative_url_root ||= server_software == 'apache' ? env["SCRIPT_NAME"].to_s.sub(/\/dispatch\.(fcgi|rb|cgi)$/, '') : '' 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:
225 226 |
# File 'lib/action_controller/request.rb', line 225 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:
243 244 |
# File 'lib/action_controller/request.rb', line 243 def reset_session #:nodoc: end |
#server_software ⇒ Object
Returns the lowercase name of the HTTP server software.
215 216 217 |
# File 'lib/action_controller/request.rb', line 215 def server_software (env['SERVER_SOFTWARE'] && /^([a-zA-Z]+)/ =~ env['SERVER_SOFTWARE']) ? $1.downcase : nil end |
#session ⇒ Object
:nodoc:
240 241 |
# File 'lib/action_controller/request.rb', line 240 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
182 183 184 185 186 187 |
# File 'lib/action_controller/request.rb', line 182 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
206 207 208 |
# File 'lib/action_controller/request.rb', line 206 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 |