Class: Rage::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/rage/request.rb

Instance Method Summary collapse

Instance Method Details

#delete?Boolean

Check the HTTP request method to see if it was of type DELETE.

Returns:

  • (Boolean)

    true if it was a DELETE request



108
109
110
# File 'lib/rage/request.rb', line 108

def delete?
  rack_request.delete?
end

#domain(tld_length = 1) ⇒ Object

Get the domain part of the request.

Examples:

Consider a URL like: example.foo.gov

request.domain => "foo.gov"
request.domain(0) => "gov"
request.domain(2) => "example.foo.gov"

Parameters:

  • tld_length (Integer) (defaults to: 1)

    top-level domain length



189
190
191
# File 'lib/rage/request.rb', line 189

def domain(tld_length = 1)
  extract_domain(host, tld_length)
end

#envHash

Get the Rack environment hash.

Returns:

  • (Hash)

    the Rack env



78
79
80
# File 'lib/rage/request.rb', line 78

def env
  @env
end

#formatString?

Get the content type of the request.

Returns:

  • (String, nil)

    the MIME type of the request body



150
151
152
# File 'lib/rage/request.rb', line 150

def format
  rack_request.content_type
end

#fresh?(etag:, last_modified:) ⇒ Boolean

Check if the request is fresh.

Examples:

request.fresh?(etag: "123", last_modified: Time.utc(2023, 12, 15))
request.fresh?(last_modified: Time.utc(2023, 12, 15))
request.fresh?(etag: "123")

Parameters:

  • etag (String)

    The etag of the requested resource.

  • last_modified (Time)

    The last modified time of the requested resource.

Returns:

  • (Boolean)

    True if the request is fresh, false otherwise.



170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/rage/request.rb', line 170

def fresh?(etag:, last_modified:)
  # Always render response when no freshness information
  # is provided in the request.
  return false unless if_none_match || if_not_modified_since

  etag_matches?(
    requested_etags: if_none_match, response_etag: etag
  ) && not_modified?(
    request_not_modified_since: if_not_modified_since,
    response_last_modified: last_modified
  )
end

#fullpathString

Get the request path including the query string.

Examples:

request.fullpath # => "/users?show_archived=true"

Returns:

  • (String)

    path with query string (if present)



136
137
138
# File 'lib/rage/request.rb', line 136

def fullpath
  rack_request.fullpath
end

#get?Boolean

Check the HTTP request method to see if it was of type GET.

Returns:

  • (Boolean)

    true if it was a GET request



84
85
86
# File 'lib/rage/request.rb', line 84

def get?
  rack_request.get?
end

#head?Boolean

Check the HTTP request method to see if it was of type HEAD.

Returns:

  • (Boolean)

    true if it was a HEAD request



114
115
116
# File 'lib/rage/request.rb', line 114

def head?
  rack_request.head?
end

#headersObject

Get the request headers.

Examples:

request.headers["Content-Type"] # => "application/json"
request.headers["Connection"] # => "keep-alive"


158
159
160
# File 'lib/rage/request.rb', line 158

def headers
  @headers ||= Headers.new(@env)
end

#hostString

Get the hostname from the request.

Returns:

  • (String)

    the hostname



60
61
62
# File 'lib/rage/request.rb', line 60

def host
  rack_request.host
end

#methodString

Get the HTTP method of the request. If the client is using the Rack::MethodOverride middleware, then the X-HTTP-Method-Override header is checked first.

Returns:

  • (String)

    The HTTP Method override header or the request method header



196
197
198
# File 'lib/rage/request.rb', line 196

def method
  check_method(@env["rack.methodoverride.original_method"] || @env["REQUEST_METHOD"])
end

#patch?Boolean

Check the HTTP request method to see if it was of type PATCH.

Returns:

  • (Boolean)

    true if it was a PATCH request



96
97
98
# File 'lib/rage/request.rb', line 96

def patch?
  rack_request.patch?
end

#pathString

Get the request path.

Examples:

request.path # => "/users"

Returns:

  • (String)

    the path component of the URL



128
129
130
# File 'lib/rage/request.rb', line 128

def path
  rack_request.path
end

#portInteger

Get the port number from the request.

Returns:

  • (Integer)

    the port number



66
67
68
# File 'lib/rage/request.rb', line 66

def port
  rack_request.port
end

#post?Boolean

Check the HTTP request method to see if it was of type POST.

Returns:

  • (Boolean)

    true if it was a POST request



90
91
92
# File 'lib/rage/request.rb', line 90

def post?
  rack_request.post?
end

#protocolString

Returns https:// if this was an HTTPS request and http:// otherwise.

Returns:

  • (String)

    https:// if this was an HTTP request over SSL/TLS or http:// if it was an HTTP request



54
55
56
# File 'lib/rage/request.rb', line 54

def protocol
  ssl? ? "https://" : "http://"
end

#put?Boolean

Check the HTTP request method to see if it was of type PUT.

Returns:

  • (Boolean)

    true if it was a PUT request



102
103
104
# File 'lib/rage/request.rb', line 102

def put?
  rack_request.put?
end

#query_stringString

Get the query string from the request.

Returns:

  • (String)

    the query string (empty string if no query)



72
73
74
# File 'lib/rage/request.rb', line 72

def query_string
  rack_request.query_string
end

#request_idString Also known as: uuid

Get the unique request ID. By default, this ID is internally generated, and all log entries created during the request are tagged with it. Alternatively, you can use the Rage::RequestId middleware to derive the ID from the X-Request-Id header.

Returns:

  • (String)

    the request ID



203
204
205
# File 'lib/rage/request.rb', line 203

def request_id
  @env["rage.request_id"]
end

#route_uri_patternString

Get the route URI pattern matched for this request.

Examples:

# For a route defined as:
#   get "/users/:id", to: "users#show"
request.route_uri_pattern # => "/users/:id"

Returns:

  • (String)

    the route URI pattern



215
216
217
218
219
220
221
# File 'lib/rage/request.rb', line 215

def route_uri_pattern
  if @controller
    Rage::Router::Util.route_uri_pattern(@controller.class, @controller.action_name)
  else
    path
  end
end

#ssl?Boolean

Check if the request was made using TLS/SSL which is if http or https protocol is used inside the URL.

Returns:

  • (Boolean)

    true if the request is TLS/SSL, false otherwise



48
49
50
# File 'lib/rage/request.rb', line 48

def ssl?
  rack_request.ssl?
end

#urlString

Get the full request URL.

Returns:

  • (String)

    complete URL including protocol, host, path, and query



120
121
122
# File 'lib/rage/request.rb', line 120

def url
  rack_request.url
end

#user_agentString?

Get the User-Agent header value.

Examples:

request.user_agent # => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"

Returns:

  • (String, nil)

    the user agent string or nil



144
145
146
# File 'lib/rage/request.rb', line 144

def user_agent
  rack_request.user_agent
end