Permalink
Browse files

Merge pull request #191 from moonshinedevco/master

maintain blocks passed to 'perform' in redirects
  • Loading branch information...
2 parents e7bff58 + 3f4a2db commit b1656617a0ef39adae20cb344c6d289b9976f8da @jnunemaker committed Apr 10, 2013
Showing with 13 additions and 4 deletions.
  1. +3 −3 lib/httparty/request.rb
  2. +1 −1 lib/httparty/response.rb
  3. +9 −0 spec/httparty/request_spec.rb
View
@@ -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
@@ -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
@@ -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'

0 comments on commit b165661

Please sign in to comment.