Class Rack::Request
In: lib/rack/request.rb
Parent: Object

Rack::Request provides a convenient interface to a Rack environment. It is stateless, the environment env passed to the constructor will be directly modified.

  req = Rack::Request.new(env)
  req.post?
  req.params["data"]

Methods

GET   POST   []   []=   body   cookies   delete?   fullpath   get?   host   new   params   path_info   path_info=   port   post?   put?   query_string   referer   referrer   request_method   scheme   script_name   script_name=   url   values_at   xhr?  

Attributes

env  [R]  The environment of the request.

Public Class methods

[Source]

    # File lib/rack/request.rb, line 16
16:     def initialize(env)
17:       @env = env
18:     end

Public Instance methods

Returns the data recieved in the query string.

[Source]

    # File lib/rack/request.rb, line 42
42:     def GET
43:       if @env["rack.request.query_string"] == query_string
44:         @env["rack.request.query_hash"]
45:       else
46:         @env["rack.request.query_string"] = query_string
47:         @env["rack.request.query_hash"]   =
48:           Utils.parse_query(query_string)
49:       end
50:     end

Returns the data recieved in the request body.

This method support both application/x-www-form-urlencoded and multipart/form-data.

[Source]

    # File lib/rack/request.rb, line 56
56:     def POST
57:       if @env["rack.request.form_input"] == @env["rack.input"]
58:         @env["rack.request.form_hash"]
59:       else
60:         @env["rack.request.form_input"] = @env["rack.input"]
61:         unless @env["rack.request.form_hash"] =
62:             Utils::Multipart.parse_multipart(env)
63:           @env["rack.request.form_vars"] = @env["rack.input"].read
64:           @env["rack.request.form_hash"] = Utils.parse_query(@env["rack.request.form_vars"])
65:         end
66:         @env["rack.request.form_hash"]
67:       end
68:     end

shortcut for request.params[key]

[Source]

    # File lib/rack/request.rb, line 76
76:     def [](key)
77:       params[key.to_s]
78:     end

shortcut for request.params[key] = value

[Source]

    # File lib/rack/request.rb, line 81
81:     def []=(key, value)
82:       params[key.to_s] = value
83:     end

[Source]

    # File lib/rack/request.rb, line 20
20:     def body;            @env["rack.input"]                       end

[Source]

     # File lib/rack/request.rb, line 97
 97:     def cookies
 98:       return {}  unless @env["HTTP_COOKIE"]
 99: 
100:       if @env["rack.request.cookie_string"] == @env["HTTP_COOKIE"]
101:         @env["rack.request.cookie_hash"]
102:       else
103:         @env["rack.request.cookie_string"] = @env["HTTP_COOKIE"]
104:         # According to RFC 2109:
105:         #   If multiple cookies satisfy the criteria above, they are ordered in
106:         #   the Cookie header such that those with more specific Path attributes
107:         #   precede those with less specific.  Ordering with respect to other
108:         #   attributes (e.g., Domain) is unspecified.
109:         @env["rack.request.cookie_hash"] =
110:           Utils.parse_query(@env["rack.request.cookie_string"], ';,').inject({}) {|h,(k,v)|
111:             h[k] = Array === v ? v.first : v
112:             h
113:           }
114:       end
115:     end

[Source]

    # File lib/rack/request.rb, line 39
39:     def delete?;         request_method == "DELETE"               end

[Source]

     # File lib/rack/request.rb, line 136
136:     def fullpath
137:       path = script_name + path_info
138:       path << "?" << query_string  unless query_string.empty?
139:       path
140:     end

[Source]

    # File lib/rack/request.rb, line 36
36:     def get?;            request_method == "GET"                  end

[Source]

    # File lib/rack/request.rb, line 28
28:     def host
29:       # Remove port number.
30:       (@env["HTTP_HOST"] || @env["SERVER_NAME"]).gsub(/:\d+\z/, '')
31:     end

The union of GET and POST data.

[Source]

    # File lib/rack/request.rb, line 71
71:     def params
72:       self.GET.update(self.POST)
73:     end

[Source]

    # File lib/rack/request.rb, line 23
23:     def path_info;       @env["PATH_INFO"].to_s                   end

[Source]

    # File lib/rack/request.rb, line 34
34:     def path_info=(s);   @env["PATH_INFO"] = s.to_s               end

[Source]

    # File lib/rack/request.rb, line 24
24:     def port;            @env["SERVER_PORT"].to_i                 end

[Source]

    # File lib/rack/request.rb, line 37
37:     def post?;           request_method == "POST"                 end

[Source]

    # File lib/rack/request.rb, line 38
38:     def put?;            request_method == "PUT"                  end

[Source]

    # File lib/rack/request.rb, line 26
26:     def query_string;    @env["QUERY_STRING"].to_s                end

the referer of the client or ’/’

[Source]

    # File lib/rack/request.rb, line 91
91:     def referer
92:       @env['HTTP_REFERER'] || '/'
93:     end
referrer()

Alias for referer

[Source]

    # File lib/rack/request.rb, line 25
25:     def request_method;  @env["REQUEST_METHOD"]                   end

[Source]

    # File lib/rack/request.rb, line 21
21:     def scheme;          @env["rack.url_scheme"]                  end

[Source]

    # File lib/rack/request.rb, line 22
22:     def script_name;     @env["SCRIPT_NAME"].to_s                 end

[Source]

    # File lib/rack/request.rb, line 33
33:     def script_name=(s); @env["SCRIPT_NAME"] = s.to_s             end

Tries to return a remake of the original request URL as a string.

[Source]

     # File lib/rack/request.rb, line 122
122:     def url
123:       url = scheme + "://"
124:       url << host
125: 
126:       if scheme == "https" && port != 443 ||
127:           scheme == "http" && port != 80
128:         url << ":#{port}"
129:       end
130: 
131:       url << fullpath
132: 
133:       url
134:     end

like Hash#values_at

[Source]

    # File lib/rack/request.rb, line 86
86:     def values_at(*keys)
87:       keys.map{|key| params[key] }
88:     end

[Source]

     # File lib/rack/request.rb, line 117
117:     def xhr?
118:       @env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
119:     end

[Validate]