adamwiggins-rest-client 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -141,7 +141,7 @@ Patches contributed by: Chris Anderson, Greg Borenstein, Ardekantur, Pedro
141
141
  Belo, Rafael Souza, Rick Olson, Aman Gupta, Blake Mizerany, Brian Donovan, Ivan
142
142
  Makfinsky, Marc-André Cournoyer, Coda Hale, Tetsuo Watanabe, Dusty Doris,
143
143
  Lennon Day-Reynolds, James Edward Gray II, Cyril Rohr, Juan Alvarez, and Adam
144
- Jacob, and Paul Dlug
144
+ Jacob, Paul Dlug, and Brad Ediger
145
145
 
146
146
  Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
147
147
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
data/lib/restclient.rb CHANGED
@@ -1,8 +1,14 @@
1
1
  require 'uri'
2
- require 'net/https'
3
2
  require 'zlib'
4
3
  require 'stringio'
5
4
 
5
+ begin
6
+ require 'net/https'
7
+ rescue LoadError => e
8
+ raise e unless RUBY_PLATFORM =~ /linux/
9
+ raise LoadError, "no such file to load -- net/https. Try running apt-get install libopenssl-ruby"
10
+ end
11
+
6
12
  require File.dirname(__FILE__) + '/restclient/request'
7
13
  require File.dirname(__FILE__) + '/restclient/mixin/response'
8
14
  require File.dirname(__FILE__) + '/restclient/response'
@@ -18,6 +18,10 @@ module RestClient
18
18
  def http_code
19
19
  @response.code.to_i if @response
20
20
  end
21
+
22
+ def http_body
23
+ RestClient::Request.decode(@response['content-encoding'], @response.body) if @response
24
+ end
21
25
  end
22
26
 
23
27
  # A redirect was encountered; caught by execute to retry with the new url.
@@ -39,6 +39,8 @@ module RestClient
39
39
  execute_inner
40
40
  rescue Redirect => e
41
41
  @url = e.url
42
+ @method = :get
43
+ @payload = nil
42
44
  execute
43
45
  end
44
46
 
@@ -171,7 +173,7 @@ module RestClient
171
173
  if res.code =~ /\A2\d{2}\z/
172
174
  # We don't decode raw requests
173
175
  unless @raw_response
174
- decode res['content-encoding'], res.body if res.body
176
+ self.class.decode res['content-encoding'], res.body if res.body
175
177
  end
176
178
  elsif %w(301 302 303).include? res.code
177
179
  url = res.header['Location']
@@ -194,7 +196,7 @@ module RestClient
194
196
  end
195
197
  end
196
198
 
197
- def decode(content_encoding, body)
199
+ def self.decode(content_encoding, body)
198
200
  if content_encoding == 'gzip' and not body.empty?
199
201
  Zlib::GzipReader.new(StringIO.new(body)).read
200
202
  elsif content_encoding == 'deflate'
@@ -12,6 +12,10 @@ describe RestClient::Exception do
12
12
  end
13
13
 
14
14
  describe RestClient::RequestFailed do
15
+ before do
16
+ @response = mock('HTTP Response', :code => '502')
17
+ end
18
+
15
19
  it "stores the http response on the exception" do
16
20
  begin
17
21
  raise RestClient::RequestFailed, :response
@@ -21,11 +25,18 @@ describe RestClient::RequestFailed do
21
25
  end
22
26
 
23
27
  it "http_code convenience method for fetching the code as an integer" do
24
- RestClient::RequestFailed.new(mock('res', :code => '502')).http_code.should == 502
28
+ RestClient::RequestFailed.new(@response).http_code.should == 502
29
+ end
30
+
31
+ it "http_body convenience method for fetching the body (decoding when necessary)" do
32
+ @response.stub!(:[]).with('content-encoding').and_return('gzip')
33
+ @response.stub!(:body).and_return('compressed body')
34
+ RestClient::Request.should_receive(:decode).with('gzip', 'compressed body').and_return('plain body')
35
+ RestClient::RequestFailed.new(@response).http_body.should == 'plain body'
25
36
  end
26
37
 
27
38
  it "shows the status code in the message" do
28
- RestClient::RequestFailed.new(mock('res', :code => '502')).to_s.should match(/502/)
39
+ RestClient::RequestFailed.new(@response).to_s.should match(/502/)
29
40
  end
30
41
  end
31
42
 
data/spec/request_spec.rb CHANGED
@@ -22,19 +22,19 @@ describe RestClient::Request do
22
22
  end
23
23
 
24
24
  it "decodes an uncompressed result body by passing it straight through" do
25
- @request.decode(nil, 'xyz').should == 'xyz'
25
+ RestClient::Request.decode(nil, 'xyz').should == 'xyz'
26
26
  end
27
27
 
28
28
  it "decodes a gzip body" do
29
- @request.decode('gzip', "\037\213\b\b\006'\252H\000\003t\000\313T\317UH\257\312,HM\341\002\000G\242(\r\v\000\000\000").should == "i'm gziped\n"
29
+ RestClient::Request.decode('gzip', "\037\213\b\b\006'\252H\000\003t\000\313T\317UH\257\312,HM\341\002\000G\242(\r\v\000\000\000").should == "i'm gziped\n"
30
30
  end
31
31
 
32
32
  it "ingores gzip for empty bodies" do
33
- @request.decode('gzip', '').should be_empty
33
+ RestClient::Request.decode('gzip', '').should be_empty
34
34
  end
35
35
 
36
36
  it "decodes a deflated body" do
37
- @request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363").should == "some deflated text"
37
+ RestClient::Request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363").should == "some deflated text"
38
38
  end
39
39
 
40
40
  it "processes a successful result" do
@@ -222,6 +222,20 @@ describe RestClient::Request do
222
222
  lambda { @request.process_result(res) }.should raise_error(RestClient::Redirect) { |e| e.url.should == 'http://some/index' }
223
223
  end
224
224
 
225
+ it "uses GET and clears payload when following 30x redirects" do
226
+ url = "http://example.com/redirected"
227
+
228
+ @request.should_receive(:execute_inner).once.ordered.and_raise(RestClient::Redirect.new(url))
229
+
230
+ @request.should_receive(:execute_inner).once.ordered do
231
+ @request.url.should == url
232
+ @request.method.should == :get
233
+ @request.payload.should be_nil
234
+ end
235
+
236
+ @request.execute
237
+ end
238
+
225
239
  it "raises Unauthorized when the response is 401" do
226
240
  res = mock('response', :code => '401')
227
241
  lambda { @request.process_result(res) }.should raise_error(RestClient::Unauthorized)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adamwiggins-rest-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Wiggins
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-20 00:00:00 -07:00
12
+ date: 2009-06-29 00:00:00 -07:00
13
13
  default_executable: restclient
14
14
  dependencies: []
15
15