Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #191 from moonshinedevco/master

maintain blocks passed to 'perform' in redirects
  • Loading branch information...
commit b1656617a0ef39adae20cb344c6d289b9976f8da 2 parents e7bff58 + 3f4a2db
@jnunemaker authored
View
6 lib/httparty/request.rb
@@ -103,7 +103,7 @@ def perform(&block)
end
handle_deflation
- handle_response(chunked_body)
+ handle_response(chunked_body, &block)
end
private
@@ -172,14 +172,14 @@ def query_string(uri)
query_string_parts.size > 0 ? query_string_parts.join('&') : nil
end
- def handle_response(body)
+ def handle_response(body, &block)
if response_redirects?
options[:limit] -= 1
self.path = last_response['location']
self.redirect = true
self.http_method = Net::HTTP::Get unless options[:maintain_method_across_redirects]
capture_cookies(last_response)
- perform
+ perform(&block)
else
body = body || last_response.body
Response.new(self, last_response, lambda { parse_response(body) }, :body => body)
View
2  lib/httparty/response.rb
@@ -9,7 +9,7 @@ def self.underscore(string)
def initialize(request, response, parsed_block, options={})
@request = request
@response = response
- @body = response.body || options[:body]
+ @body = options[:body] || response.body
@parsed_block = parsed_block
@headers = Headers.new(response.to_hash)
end
View
9 spec/httparty/request_spec.rb
@@ -262,6 +262,15 @@
response.should == {"hash" => {"foo" => "bar"}}
end
+ it "calls block given to perform with each redirect" do
+ @request = HTTParty::Request.new(Net::HTTP::Get, 'http://test.com/redirect', :format => :xml)
+ FakeWeb.register_uri(:get, "http://test.com/redirect", :status => [300, "REDIRECT"], :location => "http://api.foo.com/v2")
+ FakeWeb.register_uri(:get, "http://api.foo.com/v2", :body => "<hash><foo>bar</foo></hash>")
+ body = ""
+ response = @request.perform { |chunk| body += chunk }
+ body.length.should == 27
+ end
+
it "redirects if a 300 contains a relative location header" do
redirect = stub_response '', 300
redirect['location'] = '/foo/bar'
Please sign in to comment.
Something went wrong with that request. Please try again.