Class: Hyperkit::Middleware::FollowRedirects

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/hyperkit/middleware/follow_redirects.rb

Overview

Public: Follow HTTP 301, 302, 303, and 307 redirects.

For HTTP 303, the original GET, POST, PUT, DELETE, or PATCH request gets converted into a GET. For HTTP 301, 302, and 307, the HTTP method remains unchanged.

This middleware currently only works with synchronous requests; i.e. it doesn't support parallelism.

Constant Summary collapse

ALLOWED_METHODS =

HTTP methods for which 30x redirects can be followed

Set.new [:head, :options, :get, :post, :put, :patch, :delete]
REDIRECT_CODES =

HTTP redirect status codes that this middleware implements

Set.new [301, 302, 303, 307]
ENV_TO_CLEAR =

Keys in env hash which will get cleared between requests

Set.new [:status, :response, :response_headers]
FOLLOW_LIMIT =

Default value for max redirects followed

3
URI_UNSAFE =

Regex that matches characters that need to be escaped in URLs, sans the “%” character which we assume already represents an escaped sequence.

/[^\-_.!~*'()a-zA-Z\d;\/?:@&=+$,\[\]%]/

Instance Method Summary collapse

Constructor Details

#initialize(app, options = {}) ⇒ FollowRedirects

Public: Initialize the middleware.

options - An options Hash (default: {}):

:limit               - A Fixnum redirect limit (default: 3).

52
53
54
55
56
57
# File 'lib/hyperkit/middleware/follow_redirects.rb', line 52

def initialize(app, options = {})
  super(app)
  @options = options

  @convert_to_get = Set.new [303]
end

Instance Method Details

#call(env) ⇒ Object


59
60
61
# File 'lib/hyperkit/middleware/follow_redirects.rb', line 59

def call(env)
  perform_with_redirection(env, follow_limit)
end