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