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
- #delete? ⇒ Boolean
-
#domain(tld_length = 1) ⇒ Object
Returns the domain part of a host, such as rubyonrails.org in “www.rubyonrails.org”.
- #env ⇒ Object
- #get? ⇒ Boolean
- #head? ⇒ Boolean
- #host ⇒ Object
- #host_with_port ⇒ Object
- #method ⇒ Object
-
#parameters ⇒ Object
Returns both GET and POST parameters in a single hash.
- #path ⇒ Object
- #path_parameters ⇒ Object
- #path_parameters=(parameters) ⇒ Object
- #port ⇒ Object
-
#port_string ⇒ Object
Returns a string like “:8080” if the port is not 80 or 443 while on https.
- #post? ⇒ Boolean
- #protocol ⇒ Object
- #put? ⇒ Boolean
-
#query_parameters ⇒ Object
– Must be implemented in the concrete request ++.
-
#raw_post ⇒ Object
Receive the raw post data.
-
#remote_ip ⇒ Object
Determine originating IP address.
- #request_parameters ⇒ Object
- #request_uri ⇒ Object
- #reset_session ⇒ Object
- #session ⇒ Object
- #ssl? ⇒ Boolean
-
#subdomains(tld_length = 1) ⇒ Object
Returns all the subdomains as an array, so [“dev”, “www”] would be returned for “dev.www.rubyonrails.org”.
Instance Method Details
#cookies ⇒ Object
129 130 |
# File 'lib/action_controller/request.rb', line 129 def end |
#delete? ⇒ Boolean
26 27 28 |
# File 'lib/action_controller/request.rb', line 26 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”.
57 58 59 |
# File 'lib/action_controller/request.rb', line 57 def domain(tld_length = 1) host.split('.').last(1 + tld_length).join('.') end |
#env ⇒ Object
123 124 |
# File 'lib/action_controller/request.rb', line 123 def env end |
#get? ⇒ Boolean
14 15 16 |
# File 'lib/action_controller/request.rb', line 14 def get? method == :get end |
#head? ⇒ Boolean
30 31 32 |
# File 'lib/action_controller/request.rb', line 30 def head? method == :head end |
#host ⇒ Object
126 127 |
# File 'lib/action_controller/request.rb', line 126 def host end |
#host_with_port ⇒ Object
101 102 103 |
# File 'lib/action_controller/request.rb', line 101 def host_with_port env['HTTP_HOST'] || host + port_string end |
#method ⇒ Object
10 11 12 |
# File 'lib/action_controller/request.rb', line 10 def method env['REQUEST_METHOD'].downcase.intern end |
#parameters ⇒ Object
Returns both GET and POST parameters in a single hash.
5 6 7 8 |
# File 'lib/action_controller/request.rb', line 5 def parameters # puts "#{request_parameters.inspect} | #{query_parameters.inspect} | #{path_parameters.inspect}" @parameters ||= request_parameters.merge(query_parameters).merge(path_parameters).with_indifferent_access end |
#path ⇒ Object
88 89 90 |
# File 'lib/action_controller/request.rb', line 88 def path path = request_uri ? request_uri.split('?').first : '' end |
#path_parameters ⇒ Object
110 111 112 |
# File 'lib/action_controller/request.rb', line 110 def path_parameters @path_parameters ||= {} end |
#path_parameters=(parameters) ⇒ Object
105 106 107 108 |
# File 'lib/action_controller/request.rb', line 105 def path_parameters=(parameters) @path_parameters = parameters @parameters = nil end |
#port ⇒ Object
92 93 94 |
# File 'lib/action_controller/request.rb', line 92 def port env['SERVER_PORT'].to_i end |
#port_string ⇒ Object
Returns a string like “:8080” if the port is not 80 or 443 while on https.
97 98 99 |
# File 'lib/action_controller/request.rb', line 97 def port_string (protocol == 'http://' && port == 80) || (protocol == 'https://' && port == 443) ? '' : ":#{port}" end |
#post? ⇒ Boolean
18 19 20 |
# File 'lib/action_controller/request.rb', line 18 def post? method == :post end |
#protocol ⇒ Object
80 81 82 |
# File 'lib/action_controller/request.rb', line 80 def protocol env["HTTPS"] == "on" ? 'https://' : 'http://' end |
#put? ⇒ Boolean
22 23 24 |
# File 'lib/action_controller/request.rb', line 22 def put? method == :put end |
#query_parameters ⇒ Object
– Must be implemented in the concrete request ++
117 118 |
# File 'lib/action_controller/request.rb', line 117 def query_parameters 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.
72 73 74 |
# File 'lib/action_controller/request.rb', line 72 def raw_post env['RAW_POST_DATA'] 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.
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/action_controller/request.rb', line 41 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 return env['REMOTE_ADDR'] end |
#request_parameters ⇒ Object
120 121 |
# File 'lib/action_controller/request.rb', line 120 def request_parameters end |
#request_uri ⇒ Object
76 77 78 |
# File 'lib/action_controller/request.rb', line 76 def request_uri (%r{^\w+\://[^/]+(/.*|$)$} =~ env['REQUEST_URI']) ? $1 : env['REQUEST_URI'] # Remove domain, which webrick puts into the request_uri. end |
#reset_session ⇒ Object
135 136 |
# File 'lib/action_controller/request.rb', line 135 def reset_session end |
#session ⇒ Object
132 133 |
# File 'lib/action_controller/request.rb', line 132 def session end |
#ssl? ⇒ Boolean
84 85 86 |
# File 'lib/action_controller/request.rb', line 84 def ssl? protocol == 'https://' 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”.
64 65 66 67 |
# File 'lib/action_controller/request.rb', line 64 def subdomains(tld_length = 1) parts = host.split('.') parts - parts.last(1 + tld_length) end |