Class: FaradayMiddleware::FollowRedirects

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/faraday_middleware/response/follow_redirects.rb

Overview

Public: Follow HTTP 30x redirects.

Constant Summary collapse

REDIRECTS =

TODO: 307 & standards-compliant 302

[301, 302, 303]
FOLLOW_LIMIT =

Default value for max redirects followed

3

Instance Method Summary collapse

Constructor Details

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

Public: Initialize the middleware.

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

limit - A Numeric redirect limit (default: 3)


24
25
26
27
# File 'lib/faraday_middleware/response/follow_redirects.rb', line 24

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

Instance Method Details

#call(env) ⇒ Object



29
30
31
# File 'lib/faraday_middleware/response/follow_redirects.rb', line 29

def call(env)
  process_response(@app.call(env), follow_limit)
end

#follow_limitObject



49
50
51
# File 'lib/faraday_middleware/response/follow_redirects.rb', line 49

def follow_limit
  @options.fetch(:limit, FOLLOW_LIMIT)
end

#process_response(response, follows) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/faraday_middleware/response/follow_redirects.rb', line 33

def process_response(response, follows)
  response.on_complete do |env|
    if redirect? response
      raise RedirectLimitReached, response if follows.zero?
      env[:url] += response['location']
      env[:method] = :get
      response = process_response(@app.call(env), follows - 1)
    end
  end
  response
end

#redirect?(response) ⇒ Boolean

Returns:

  • (Boolean)


45
46
47
# File 'lib/faraday_middleware/response/follow_redirects.rb', line 45

def redirect?(response)
  REDIRECTS.include? response.status
end