lib/url_canonicalize/request.rb in url_canonicalize-0.1.0 vs lib/url_canonicalize/request.rb in url_canonicalize-0.1.1

- old
+ new

@@ -21,10 +21,12 @@ def request @request ||= request_for_method end def handle_response + log_response + case response when Net::HTTPSuccess handle_success when Net::HTTPRedirection handle_redirection @@ -50,21 +52,25 @@ case response when Net::HTTPFound, Net::HTTPMovedTemporarily, Net::HTTPTemporaryRedirect self.http_method = :get handle_success else - location = relative_to_absolute(response['location']) - URLCanonicalize::Response::Redirect.new(location) + if location + URLCanonicalize::Response::Redirect.new(location) + else + URLCanonicalize::Response::Failure.new(::URI::InvalidURIError, response['location']) + end end end def handle_failure(klass = response.class, message = response.message) URLCanonicalize::Response::Failure.new(klass, message) end def enhanced_response if canonical_url + puts " * canonical_url:\t#{canonical_url}" if ENV['DEBUG'] response_plus = URLCanonicalize::Response::Success.new(canonical_url, response, html) URLCanonicalize::Response::CanonicalFound.new(canonical_url, response_plus) else URLCanonicalize::Response::Success.new(url, response, html) end @@ -96,10 +102,14 @@ def host @host ||= uri.host end + def location + @location ||= relative_to_absolute(response['location']) + end + def request_for_method r = base_request headers.each { |header_key, header_value| r[header_key] = header_value } r end @@ -145,16 +155,22 @@ partial_uri = ::URI.parse(partial_url) if partial_uri.host partial_url # It's already absolute else - base_uri = uri.dup || ::URI.parse(url) - base_uri.path = partial_url - base_uri.to_s + ::URI.join((uri || url), partial_url).to_s end + rescue ::URI::InvalidURIError + nil end + def log_response + puts "#{http_method.upcase} #{url} #{response.code} #{response.message}" if ENV['DEBUG'] + return unless ENV['DEBUG'].casecmp('headers') + response.each { |k, v| puts " #{k}:\t#{v}"} + end + NETWORK_EXCEPTIONS = [ EOFError, Errno::ECONNREFUSED, Errno::ECONNRESET, Errno::EHOSTUNREACH, @@ -163,9 +179,11 @@ Errno::ETIMEDOUT, Net::OpenTimeout, Net::ReadTimeout, OpenSSL::SSL::SSLError, SocketError, - Timeout::Error + Timeout::Error, + Zlib::BufError, + Zlib::DataError ].freeze end end