class SeoReport::RequestChain

Attributes

initial_request[R]
request_chain[R]
terminal_request[R]

Public Class Methods

new(initial_url, headers = {}) click to toggle source
# File lib/seo_report/request_chain.rb, line 6
def initialize(initial_url, headers = {})
  @initial_request = Request.new(initial_url, headers)
  @request_chain = [@initial_request]
end

Public Instance Methods

perform() click to toggle source
# File lib/seo_report/request_chain.rb, line 11
def perform
  loop do
    last_request.perform
    if has_redirection_response?(last_request)
      break if request_chain.length >= 10
      request_chain << build_new_request
    else
      @terminal_request = request_chain.last
      break
    end
  end
end

Protected Instance Methods

build_new_request() click to toggle source
# File lib/seo_report/request_chain.rb, line 29
def build_new_request
  location = last_request.response["Location"]
  url = build_url(last_request.url, location).to_s
  Request.new(url)
end
build_url(base_url, url) click to toggle source
# File lib/seo_report/request_chain.rb, line 40
def build_url(base_url, url)
  new_url = URI(url)
  if new_url.relative?
    base = URI(base_url)
    new_url.scheme = base.scheme
    new_url.host = base.host
    new_url.port = base.port
  end
  new_url
end
has_redirection_response?(request) click to toggle source
# File lib/seo_report/request_chain.rb, line 35
def has_redirection_response?(request)
  code = request.response.code.to_i
  code >= 300 && code < 400
end
last_request() click to toggle source
# File lib/seo_report/request_chain.rb, line 25
def last_request
  request_chain.last
end