def return! request = nil, result = nil, & block
if (200..207).include? code
self
elsif [301, 302, 307].include? code
unless [:get, :head].include? args[:method]
raise Exceptions::EXCEPTIONS_MAP[code].new(self, code)
else
follow_redirection(request, result, & block)
end
elsif code == 303
args[:method] = :get
args.delete :payload
follow_redirection(request, result, & block)
elsif Exceptions::EXCEPTIONS_MAP[code]
raise Exceptions::EXCEPTIONS_MAP[code].new(self, code)
else
raise RequestFailed.new(self, code)
end
end