rest-client 1.6.1 → 1.6.14

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rest-client might be problematic. Click here for more details.

Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +3 -0
  5. data/AUTHORS +75 -0
  6. data/Gemfile +7 -0
  7. data/README.rdoc +52 -21
  8. data/Rakefile +15 -35
  9. data/bin/restclient +45 -39
  10. data/history.md +67 -1
  11. data/lib/restclient.rb +11 -6
  12. data/lib/restclient/abstract_response.rb +6 -2
  13. data/lib/restclient/exceptions.rb +22 -5
  14. data/lib/restclient/net_http_ext.rb +41 -7
  15. data/lib/restclient/payload.rb +28 -8
  16. data/lib/restclient/platform.rb +29 -0
  17. data/lib/restclient/request.rb +96 -36
  18. data/lib/restclient/resource.rb +17 -0
  19. data/lib/restclient/response.rb +3 -1
  20. data/lib/restclient/version.rb +7 -0
  21. data/rest-client.gemspec +26 -0
  22. data/spec/abstract_response_spec.rb +28 -10
  23. data/spec/base.rb +1 -4
  24. data/spec/exceptions_spec.rb +31 -12
  25. data/spec/integration/capath_digicert/244b5494.0 +19 -0
  26. data/spec/integration/capath_digicert/81b9768f.0 +19 -0
  27. data/spec/integration/capath_digicert/README +8 -0
  28. data/spec/integration/capath_digicert/digicert.crt +19 -0
  29. data/spec/integration/certs/digicert.crt +19 -0
  30. data/spec/integration/certs/verisign.crt +14 -14
  31. data/spec/integration/request_spec.rb +54 -4
  32. data/spec/integration_spec.rb +9 -9
  33. data/spec/master_shake.jpg +0 -0
  34. data/spec/payload_spec.rb +60 -35
  35. data/spec/raw_response_spec.rb +4 -4
  36. data/spec/request2_spec.rb +22 -4
  37. data/spec/request_spec.rb +129 -130
  38. data/spec/resource_spec.rb +30 -18
  39. data/spec/response_spec.rb +48 -36
  40. data/spec/restclient_spec.rb +6 -1
  41. metadata +142 -74
  42. data/VERSION +0 -1
  43. data/spec/integration/certs/equifax.crt +0 -19
@@ -1,7 +1,7 @@
1
1
  require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
2
 
3
3
  require 'webmock/rspec'
4
- include WebMock
4
+ include WebMock::API
5
5
 
6
6
  describe RestClient do
7
7
 
@@ -9,15 +9,15 @@ describe RestClient do
9
9
  body = 'abc'
10
10
  stub_request(:get, "www.example.com").to_return(:body => body, :status => 200)
11
11
  response = RestClient.get "www.example.com"
12
- response.code.should == 200
13
- response.body.should == body
12
+ response.code.should eq 200
13
+ response.body.should eq body
14
14
  end
15
15
 
16
16
  it "a simple request with gzipped content" do
17
17
  stub_request(:get, "www.example.com").with(:headers => { 'Accept-Encoding' => 'gzip, deflate' }).to_return(:body => "\037\213\b\b\006'\252H\000\003t\000\313T\317UH\257\312,HM\341\002\000G\242(\r\v\000\000\000", :status => 200, :headers => { 'Content-Encoding' => 'gzip' } )
18
18
  response = RestClient.get "www.example.com"
19
- response.code.should == 200
20
- response.body.should == "i'm gziped\n"
19
+ response.code.should eq 200
20
+ response.body.should eq "i'm gziped\n"
21
21
  end
22
22
 
23
23
  it "a 404" do
@@ -27,10 +27,10 @@ describe RestClient do
27
27
  RestClient.get "www.example.com"
28
28
  raise
29
29
  rescue RestClient::ResourceNotFound => e
30
- e.http_code.should == 404
31
- e.response.code.should == 404
32
- e.response.body.should == body
33
- e.http_body.should == body
30
+ e.http_code.should eq 404
31
+ e.response.code.should eq 404
32
+ e.response.body.should eq body
33
+ e.http_body.should eq body
34
34
  end
35
35
  end
36
36
 
Binary file
@@ -1,29 +1,30 @@
1
- require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
1
+ # encoding: binary
2
+ require File.join(File.dirname(File.expand_path(__FILE__)), 'base')
2
3
 
3
4
  describe RestClient::Payload do
4
5
  context "A regular Payload" do
5
6
  it "should use standard enctype as default content-type" do
6
7
  RestClient::Payload::UrlEncoded.new({}).headers['Content-Type'].
7
- should == 'application/x-www-form-urlencoded'
8
+ should eq 'application/x-www-form-urlencoded'
8
9
  end
9
10
 
10
11
  it "should form properly encoded params" do
11
12
  RestClient::Payload::UrlEncoded.new({:foo => 'bar'}).to_s.
12
- should == "foo=bar"
13
+ should eq "foo=bar"
13
14
  ["foo=bar&baz=qux", "baz=qux&foo=bar"].should include(
14
- RestClient::Payload::UrlEncoded.new({:foo => 'bar', :baz => 'qux'}).to_s)
15
+ RestClient::Payload::UrlEncoded.new({:foo => 'bar', :baz => 'qux'}).to_s)
15
16
  end
16
17
 
17
18
  it "should escape parameters" do
18
19
  RestClient::Payload::UrlEncoded.new({'foo ' => 'bar'}).to_s.
19
- should == "foo%20=bar"
20
+ should eq "foo%20=bar"
20
21
  end
21
22
 
22
23
  it "should properly handle hashes as parameter" do
23
- RestClient::Payload::UrlEncoded.new({:foo => {:bar => 'baz' }}).to_s.
24
- should == "foo[bar]=baz"
25
- RestClient::Payload::UrlEncoded.new({:foo => {:bar => {:baz => 'qux' }}}).to_s.
26
- should == "foo[bar][baz]=qux"
24
+ RestClient::Payload::UrlEncoded.new({:foo => {:bar => 'baz'}}).to_s.
25
+ should eq "foo[bar]=baz"
26
+ RestClient::Payload::UrlEncoded.new({:foo => {:bar => {:baz => 'qux'}}}).to_s.
27
+ should eq "foo[bar][baz]=qux"
27
28
  end
28
29
 
29
30
  it "should handle many attributes inside a hash" do
@@ -37,22 +38,27 @@ describe RestClient::Payload do
37
38
  end
38
39
 
39
40
  it "should handle attributes inside a an array inside an array inside an hash" do
40
- parameters = RestClient::Payload::UrlEncoded.new({"foo" => [ [{"bar" => 'baz'}, {"bar" => 'qux'}]]}).to_s
41
+ parameters = RestClient::Payload::UrlEncoded.new({"foo" => [[{"bar" => 'baz'}, {"bar" => 'qux'}]]}).to_s
41
42
  parameters.should include("foo[bar]=baz", "foo[bar]=qux")
42
43
  end
43
44
 
44
45
  it "should form properly use symbols as parameters" do
45
46
  RestClient::Payload::UrlEncoded.new({:foo => :bar}).to_s.
46
- should == "foo=bar"
47
- RestClient::Payload::UrlEncoded.new({:foo => {:bar => :baz }}).to_s.
48
- should == "foo[bar]=baz"
47
+ should eq "foo=bar"
48
+ RestClient::Payload::UrlEncoded.new({:foo => {:bar => :baz}}).to_s.
49
+ should eq "foo[bar]=baz"
49
50
  end
50
51
 
51
52
  it "should properly handle arrays as repeated parameters" do
52
53
  RestClient::Payload::UrlEncoded.new({:foo => ['bar']}).to_s.
53
- should == "foo[]=bar"
54
+ should eq "foo[]=bar"
54
55
  RestClient::Payload::UrlEncoded.new({:foo => ['bar', 'baz']}).to_s.
55
- should == "foo[]=bar&foo[]=baz"
56
+ should eq "foo[]=bar&foo[]=baz"
57
+ end
58
+
59
+ it 'should not close if stream already closed' do
60
+ p = RestClient::Payload::UrlEncoded.new({'foo ' => 'bar'})
61
+ 3.times {p.close}
56
62
  end
57
63
 
58
64
  end
@@ -60,13 +66,18 @@ describe RestClient::Payload do
60
66
  context "A multipart Payload" do
61
67
  it "should use standard enctype as default content-type" do
62
68
  m = RestClient::Payload::Multipart.new({})
63
- m.stub!(:boundary).and_return(123)
64
- m.headers['Content-Type'].should == 'multipart/form-data; boundary=123'
69
+ m.stub(:boundary).and_return(123)
70
+ m.headers['Content-Type'].should eq 'multipart/form-data; boundary=123'
71
+ end
72
+
73
+ it 'should not error on close if stream already closed' do
74
+ m = RestClient::Payload::Multipart.new(:file => File.new(File.join(File.dirname(File.expand_path(__FILE__)), 'master_shake.jpg')))
75
+ 3.times {m.close}
65
76
  end
66
77
 
67
78
  it "should form properly separated multipart data" do
68
79
  m = RestClient::Payload::Multipart.new([[:bar, "baz"], [:foo, "bar"]])
69
- m.to_s.should == <<-EOS
80
+ m.to_s.should eq <<-EOS
70
81
  --#{m.boundary}\r
71
82
  Content-Disposition: form-data; name="bar"\r
72
83
  \r
@@ -81,7 +92,7 @@ bar\r
81
92
 
82
93
  it "should not escape parameters names" do
83
94
  m = RestClient::Payload::Multipart.new([["bar ", "baz"]])
84
- m.to_s.should == <<-EOS
95
+ m.to_s.should eq <<-EOS
85
96
  --#{m.boundary}\r
86
97
  Content-Disposition: form-data; name="bar "\r
87
98
  \r
@@ -93,12 +104,12 @@ baz\r
93
104
  it "should form properly separated multipart data" do
94
105
  f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
95
106
  m = RestClient::Payload::Multipart.new({:foo => f})
96
- m.to_s.should == <<-EOS
107
+ m.to_s.should eq <<-EOS
97
108
  --#{m.boundary}\r
98
109
  Content-Disposition: form-data; name="foo"; filename="master_shake.jpg"\r
99
110
  Content-Type: image/jpeg\r
100
111
  \r
101
- #{IO.read(f.path)}\r
112
+ #{File.open(f.path, 'rb'){|bin| bin.read}}\r
102
113
  --#{m.boundary}--\r
103
114
  EOS
104
115
  end
@@ -106,12 +117,12 @@ Content-Type: image/jpeg\r
106
117
  it "should ignore the name attribute when it's not set" do
107
118
  f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
108
119
  m = RestClient::Payload::Multipart.new({nil => f})
109
- m.to_s.should == <<-EOS
120
+ m.to_s.should eq <<-EOS
110
121
  --#{m.boundary}\r
111
122
  Content-Disposition: form-data; filename="master_shake.jpg"\r
112
123
  Content-Type: image/jpeg\r
113
124
  \r
114
- #{IO.read(f.path)}\r
125
+ #{File.open(f.path, 'rb'){|bin| bin.read}}\r
115
126
  --#{m.boundary}--\r
116
127
  EOS
117
128
  end
@@ -121,19 +132,19 @@ Content-Type: image/jpeg\r
121
132
  f.instance_eval "def content_type; 'text/plain'; end"
122
133
  f.instance_eval "def original_filename; 'foo.txt'; end"
123
134
  m = RestClient::Payload::Multipart.new({:foo => f})
124
- m.to_s.should == <<-EOS
135
+ m.to_s.should eq <<-EOS
125
136
  --#{m.boundary}\r
126
137
  Content-Disposition: form-data; name="foo"; filename="foo.txt"\r
127
138
  Content-Type: text/plain\r
128
139
  \r
129
- #{IO.read(f.path)}\r
140
+ #{File.open(f.path, 'rb'){|bin| bin.read}}\r
130
141
  --#{m.boundary}--\r
131
142
  EOS
132
143
  end
133
144
 
134
145
  it "should handle hash in hash parameters" do
135
146
  m = RestClient::Payload::Multipart.new({:bar => {:baz => "foo"}})
136
- m.to_s.should == <<-EOS
147
+ m.to_s.should eq <<-EOS
137
148
  --#{m.boundary}\r
138
149
  Content-Disposition: form-data; name="bar[baz]"\r
139
150
  \r
@@ -145,12 +156,12 @@ foo\r
145
156
  f.instance_eval "def content_type; 'text/plain'; end"
146
157
  f.instance_eval "def original_filename; 'foo.txt'; end"
147
158
  m = RestClient::Payload::Multipart.new({:foo => {:bar => f}})
148
- m.to_s.should == <<-EOS
159
+ m.to_s.should eq <<-EOS
149
160
  --#{m.boundary}\r
150
161
  Content-Disposition: form-data; name="foo[bar]"; filename="foo.txt"\r
151
162
  Content-Type: text/plain\r
152
163
  \r
153
- #{IO.read(f.path)}\r
164
+ #{File.open(f.path, 'rb'){|bin| bin.read}}\r
154
165
  --#{m.boundary}--\r
155
166
  EOS
156
167
  end
@@ -161,23 +172,23 @@ Content-Type: text/plain\r
161
172
  it "should properly determine the size of file payloads" do
162
173
  f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
163
174
  payload = RestClient::Payload.generate(f)
164
- payload.size.should == 22_545
165
- payload.length.should == 22_545
175
+ payload.size.should eq 76_988
176
+ payload.length.should eq 76_988
166
177
  end
167
178
 
168
179
  it "should properly determine the size of other kinds of streaming payloads" do
169
180
  s = StringIO.new 'foo'
170
181
  payload = RestClient::Payload.generate(s)
171
- payload.size.should == 3
172
- payload.length.should == 3
182
+ payload.size.should eq 3
183
+ payload.length.should eq 3
173
184
 
174
185
  begin
175
186
  f = Tempfile.new "rest-client"
176
187
  f.write 'foo bar'
177
188
 
178
189
  payload = RestClient::Payload.generate(f)
179
- payload.size.should == 7
180
- payload.length.should == 7
190
+ payload.size.should eq 7
191
+ payload.length.should eq 7
181
192
  ensure
182
193
  f.close
183
194
  end
@@ -202,11 +213,16 @@ Content-Type: text/plain\r
202
213
  RestClient::Payload.generate("data").should be_kind_of(RestClient::Payload::Base)
203
214
  end
204
215
 
205
- it "should recognize nested multipart payloads" do
216
+ it "should recognize nested multipart payloads in hashes" do
206
217
  f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
207
218
  RestClient::Payload.generate({"foo" => {"file" => f}}).should be_kind_of(RestClient::Payload::Multipart)
208
219
  end
209
220
 
221
+ it "should recognize nested multipart payloads in arrays" do
222
+ f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
223
+ RestClient::Payload.generate({"foo" => [f]}).should be_kind_of(RestClient::Payload::Multipart)
224
+ end
225
+
210
226
  it "should recognize file payloads that can be streamed" do
211
227
  f = File.new(File.dirname(__FILE__) + "/master_shake.jpg")
212
228
  RestClient::Payload.generate(f).should be_kind_of(RestClient::Payload::Streamed)
@@ -215,5 +231,14 @@ Content-Type: text/plain\r
215
231
  it "should recognize other payloads that can be streamed" do
216
232
  RestClient::Payload.generate(StringIO.new('foo')).should be_kind_of(RestClient::Payload::Streamed)
217
233
  end
234
+
235
+ # hashery gem introduces Hash#read convenience method. Existence of #read method used to determine of content is streameable :/
236
+ it "shouldn't treat hashes as streameable" do
237
+ RestClient::Payload.generate({"foo" => 'bar'}).should be_kind_of(RestClient::Payload::UrlEncoded)
238
+ end
239
+ end
240
+
241
+ class HashMapForTesting < Hash
242
+ alias :read :[]
218
243
  end
219
244
  end
@@ -2,16 +2,16 @@ require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
2
 
3
3
  describe RestClient::RawResponse do
4
4
  before do
5
- @tf = mock("Tempfile", :read => "the answer is 42", :open => true)
6
- @net_http_res = mock('net http response')
5
+ @tf = double("Tempfile", :read => "the answer is 42", :open => true)
6
+ @net_http_res = double('net http response')
7
7
  @response = RestClient::RawResponse.new(@tf, @net_http_res, {})
8
8
  end
9
9
 
10
10
  it "behaves like string" do
11
- @response.to_s.should == 'the answer is 42'
11
+ @response.to_s.should eq 'the answer is 42'
12
12
  end
13
13
 
14
14
  it "exposes a Tempfile" do
15
- @response.file.should == @tf
15
+ @response.file.should eq @tf
16
16
  end
17
17
  end
@@ -1,17 +1,35 @@
1
1
  require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
2
 
3
3
  require 'webmock/rspec'
4
- include WebMock
4
+ include WebMock::API
5
5
 
6
6
  describe RestClient::Request do
7
7
 
8
8
  it "manage params for get requests" do
9
9
  stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
10
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}).body.should == 'foo'
10
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}).body.should eq 'foo'
11
11
 
12
12
  stub_request(:get, 'http://some/resource').with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar', 'params' => 'a'}).to_return(:body => 'foo', :status => 200)
13
- RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => :a}).body.should == 'foo'
13
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => :a}).body.should eq 'foo'
14
14
  end
15
15
 
16
- end
16
+ it "can use a block to process response" do
17
+ response_value = nil
18
+ block = Proc.new do |http_response|
19
+ response_value = http_response.body
20
+ end
21
+ stub_request(:get, 'http://some/resource?a=b&c=d').with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'Foo'=>'bar'}).to_return(:body => 'foo', :status => 200)
22
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :get, :headers => {:foo => :bar, :params => {:a => :b, 'c' => 'd'}}, :block_response => block)
23
+ response_value.should eq "foo"
24
+ end
25
+
26
+ it 'closes payload if not nil' do
27
+ test_file = File.new(File.join( File.dirname(File.expand_path(__FILE__)), 'master_shake.jpg'))
17
28
 
29
+ stub_request(:post, 'http://some/resource').with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate'}).to_return(:body => 'foo', :status => 200)
30
+ RestClient::Request.execute(:url => 'http://some/resource', :method => :post, :payload => {:file => test_file})
31
+
32
+ test_file.closed?.should be_true
33
+ end
34
+
35
+ end
@@ -1,34 +1,34 @@
1
1
  require File.join( File.dirname(File.expand_path(__FILE__)), 'base')
2
2
 
3
3
  require 'webmock/rspec'
4
- include WebMock
4
+ include WebMock::API
5
5
 
6
6
  describe RestClient::Request do
7
7
  before do
8
8
  @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload')
9
9
 
10
- @uri = mock("uri")
11
- @uri.stub!(:request_uri).and_return('/resource')
12
- @uri.stub!(:host).and_return('some')
13
- @uri.stub!(:port).and_return(80)
14
-
15
- @net = mock("net::http base")
16
- @http = mock("net::http connection")
17
- Net::HTTP.stub!(:new).and_return(@net)
18
- @net.stub!(:start).and_yield(@http)
19
- @net.stub!(:use_ssl=)
20
- @net.stub!(:verify_mode=)
10
+ @uri = double("uri")
11
+ @uri.stub(:request_uri).and_return('/resource')
12
+ @uri.stub(:host).and_return('some')
13
+ @uri.stub(:port).and_return(80)
14
+
15
+ @net = double("net::http base")
16
+ @http = double("net::http connection")
17
+ Net::HTTP.stub(:new).and_return(@net)
18
+ @net.stub(:start).and_yield(@http)
19
+ @net.stub(:use_ssl=)
20
+ @net.stub(:verify_mode=)
21
21
  RestClient.log = nil
22
22
  end
23
23
 
24
24
  it "accept */* mimetype, preferring xml" do
25
- @request.default_headers[:accept].should == '*/*; q=0.5, application/xml'
25
+ @request.default_headers[:accept].should eq '*/*; q=0.5, application/xml'
26
26
  end
27
27
 
28
28
  describe "compression" do
29
29
 
30
30
  it "decodes an uncompressed result body by passing it straight through" do
31
- RestClient::Request.decode(nil, 'xyz').should == 'xyz'
31
+ RestClient::Request.decode(nil, 'xyz').should eq 'xyz'
32
32
  end
33
33
 
34
34
  it "doesn't fail for nil bodies" do
@@ -37,7 +37,7 @@ describe RestClient::Request do
37
37
 
38
38
 
39
39
  it "decodes a gzip body" do
40
- 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"
40
+ 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 eq "i'm gziped\n"
41
41
  end
42
42
 
43
43
  it "ingores gzip for empty bodies" do
@@ -45,25 +45,25 @@ describe RestClient::Request do
45
45
  end
46
46
 
47
47
  it "decodes a deflated body" do
48
- RestClient::Request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363").should == "some deflated text"
48
+ RestClient::Request.decode('deflate', "x\234+\316\317MUHIM\313I,IMQ(I\255(\001\000A\223\006\363").should eq "some deflated text"
49
49
  end
50
50
  end
51
51
 
52
52
  it "processes a successful result" do
53
- res = mock("result")
54
- res.stub!(:code).and_return("200")
55
- res.stub!(:body).and_return('body')
56
- res.stub!(:[]).with('content-encoding').and_return(nil)
57
- @request.process_result(res).body.should == 'body'
58
- @request.process_result(res).to_s.should == 'body'
53
+ res = double("result")
54
+ res.stub(:code).and_return("200")
55
+ res.stub(:body).and_return('body')
56
+ res.stub(:[]).with('content-encoding').and_return(nil)
57
+ @request.process_result(res).body.should eq 'body'
58
+ @request.process_result(res).to_s.should eq 'body'
59
59
  end
60
60
 
61
61
  it "doesn't classify successful requests as failed" do
62
62
  203.upto(207) do |code|
63
- res = mock("result")
64
- res.stub!(:code).and_return(code.to_s)
65
- res.stub!(:body).and_return("")
66
- res.stub!(:[]).with('content-encoding').and_return(nil)
63
+ res = double("result")
64
+ res.stub(:code).and_return(code.to_s)
65
+ res.stub(:body).and_return("")
66
+ res.stub(:[]).with('content-encoding').and_return(nil)
67
67
  @request.process_result(res).should be_empty
68
68
  end
69
69
  end
@@ -80,37 +80,37 @@ describe RestClient::Request do
80
80
 
81
81
  describe "user - password" do
82
82
  it "extracts the username and password when parsing http://user:password@example.com/" do
83
- URI.stub!(:parse).and_return(mock('uri', :user => 'joe', :password => 'pass1'))
83
+ URI.stub(:parse).and_return(double('uri', :user => 'joe', :password => 'pass1'))
84
84
  @request.parse_url_with_auth('http://joe:pass1@example.com/resource')
85
- @request.user.should == 'joe'
86
- @request.password.should == 'pass1'
85
+ @request.user.should eq 'joe'
86
+ @request.password.should eq 'pass1'
87
87
  end
88
88
 
89
89
  it "extracts with escaping the username and password when parsing http://user:password@example.com/" do
90
- URI.stub!(:parse).and_return(mock('uri', :user => 'joe%20', :password => 'pass1'))
90
+ URI.stub(:parse).and_return(double('uri', :user => 'joe%20', :password => 'pass1'))
91
91
  @request.parse_url_with_auth('http://joe%20:pass1@example.com/resource')
92
- @request.user.should == 'joe '
93
- @request.password.should == 'pass1'
92
+ @request.user.should eq 'joe '
93
+ @request.password.should eq 'pass1'
94
94
  end
95
95
 
96
96
  it "doesn't overwrite user and password (which may have already been set by the Resource constructor) if there is no user/password in the url" do
97
- URI.stub!(:parse).and_return(mock('uri', :user => nil, :password => nil))
97
+ URI.stub(:parse).and_return(double('uri', :user => nil, :password => nil))
98
98
  @request = RestClient::Request.new(:method => 'get', :url => 'example.com', :user => 'beth', :password => 'pass2')
99
99
  @request.parse_url_with_auth('http://example.com/resource')
100
- @request.user.should == 'beth'
101
- @request.password.should == 'pass2'
100
+ @request.user.should eq 'beth'
101
+ @request.password.should eq 'pass2'
102
102
  end
103
103
  end
104
104
 
105
105
  it "correctly formats cookies provided to the constructor" do
106
- URI.stub!(:parse).and_return(mock('uri', :user => nil, :password => nil))
106
+ URI.stub(:parse).and_return(double('uri', :user => nil, :password => nil))
107
107
  @request = RestClient::Request.new(:method => 'get', :url => 'example.com', :cookies => {:session_id => '1', :user_id => "someone" })
108
108
  @request.should_receive(:default_headers).and_return({'Foo' => 'bar'})
109
- @request.make_headers({}).should == { 'Foo' => 'bar', 'Cookie' => 'session_id=1;user_id=someone'}
109
+ @request.make_headers({}).should eq({ 'Foo' => 'bar', 'Cookie' => 'session_id=1; user_id=someone'})
110
110
  end
111
111
 
112
112
  it "determines the Net::HTTP class to instantiate by the method name" do
113
- @request.net_http_request_class(:put).should == Net::HTTP::Put
113
+ @request.net_http_request_class(:put).should eq Net::HTTP::Put
114
114
  end
115
115
 
116
116
  describe "user headers" do
@@ -118,16 +118,16 @@ describe RestClient::Request do
118
118
  @request.should_receive(:default_headers).and_return({ :accept => '*/*; q=0.5, application/xml', :accept_encoding => 'gzip, deflate' })
119
119
  headers = @request.make_headers("Accept" => "application/json", :accept_encoding => 'gzip')
120
120
  headers.should have_key "Accept-Encoding"
121
- headers["Accept-Encoding"].should == "gzip"
121
+ headers["Accept-Encoding"].should eq "gzip"
122
122
  headers.should have_key "Accept"
123
- headers["Accept"].should == "application/json"
123
+ headers["Accept"].should eq "application/json"
124
124
  end
125
125
 
126
126
  it "prefers the user header when the same header exists in the defaults" do
127
127
  @request.should_receive(:default_headers).and_return({ '1' => '2' })
128
128
  headers = @request.make_headers('1' => '3')
129
129
  headers.should have_key('1')
130
- headers['1'].should == '3'
130
+ headers['1'].should eq '3'
131
131
  end
132
132
  end
133
133
 
@@ -137,43 +137,43 @@ describe RestClient::Request do
137
137
  @request.should_receive(:default_headers).and_return({})
138
138
  headers = @request.make_headers(:content_type => 'abc')
139
139
  headers.should have_key('Content-Type')
140
- headers['Content-Type'].should == 'abc'
140
+ headers['Content-Type'].should eq 'abc'
141
141
  end
142
142
 
143
143
  it "converts content-type from extension to real content-type" do
144
144
  @request.should_receive(:default_headers).and_return({})
145
145
  headers = @request.make_headers(:content_type => 'json')
146
146
  headers.should have_key('Content-Type')
147
- headers['Content-Type'].should == 'application/json'
147
+ headers['Content-Type'].should eq 'application/json'
148
148
  end
149
149
 
150
150
  it "converts accept from extension(s) to real content-type(s)" do
151
151
  @request.should_receive(:default_headers).and_return({})
152
152
  headers = @request.make_headers(:accept => 'json, mp3')
153
153
  headers.should have_key('Accept')
154
- headers['Accept'].should == 'application/json, audio/mpeg'
154
+ headers['Accept'].should eq 'application/json, audio/mpeg'
155
155
 
156
156
  @request.should_receive(:default_headers).and_return({})
157
157
  headers = @request.make_headers(:accept => :json)
158
158
  headers.should have_key('Accept')
159
- headers['Accept'].should == 'application/json'
159
+ headers['Accept'].should eq 'application/json'
160
160
  end
161
161
 
162
162
  it "only convert symbols in header" do
163
163
  @request.should_receive(:default_headers).and_return({})
164
164
  headers = @request.make_headers({:foo_bar => 'value', "bar_bar" => 'value'})
165
- headers['Foo-Bar'].should == 'value'
166
- headers['bar_bar'].should == 'value'
165
+ headers['Foo-Bar'].should eq 'value'
166
+ headers['bar_bar'].should eq 'value'
167
167
  end
168
168
 
169
169
  it "converts header values to strings" do
170
- @request.make_headers('A' => 1)['A'].should == '1'
170
+ @request.make_headers('A' => 1)['A'].should eq '1'
171
171
  end
172
172
  end
173
173
 
174
174
  it "executes by constructing the Net::HTTP object, headers, and payload and calling transmit" do
175
175
  @request.should_receive(:parse_url_with_auth).with('http://some/resource').and_return(@uri)
176
- klass = mock("net:http class")
176
+ klass = double("net:http class")
177
177
  @request.should_receive(:net_http_request_class).with(:put).and_return(klass)
178
178
  klass.should_receive(:new).and_return('result')
179
179
  @request.should_receive(:transmit).with(@uri, 'result', kind_of(RestClient::Payload::Base))
@@ -190,16 +190,16 @@ describe RestClient::Request do
190
190
  it "sends nil payloads" do
191
191
  @http.should_receive(:request).with('req', nil)
192
192
  @request.should_receive(:process_result)
193
- @request.stub!(:response_log)
193
+ @request.stub(:response_log)
194
194
  @request.transmit(@uri, 'req', nil)
195
195
  end
196
196
 
197
197
  it "passes non-hash payloads straight through" do
198
- @request.process_payload("x").should == "x"
198
+ @request.process_payload("x").should eq "x"
199
199
  end
200
200
 
201
201
  it "converts a hash payload to urlencoded data" do
202
- @request.process_payload(:a => 'b c+d').should == "a=b%20c%2Bd"
202
+ @request.process_payload(:a => 'b c+d').should eq "a=b%20c%2Bd"
203
203
  end
204
204
 
205
205
  it "accepts nested hashes in payload" do
@@ -212,45 +212,45 @@ describe RestClient::Request do
212
212
 
213
213
  it "set urlencoded content_type header on hash payloads" do
214
214
  @request.process_payload(:a => 1)
215
- @request.headers[:content_type].should == 'application/x-www-form-urlencoded'
215
+ @request.headers[:content_type].should eq 'application/x-www-form-urlencoded'
216
216
  end
217
217
 
218
218
  describe "credentials" do
219
219
  it "sets up the credentials prior to the request" do
220
- @http.stub!(:request)
221
- @request.stub!(:process_result)
222
- @request.stub!(:response_log)
220
+ @http.stub(:request)
221
+ @request.stub(:process_result)
222
+ @request.stub(:response_log)
223
223
 
224
- @request.stub!(:user).and_return('joe')
225
- @request.stub!(:password).and_return('mypass')
224
+ @request.stub(:user).and_return('joe')
225
+ @request.stub(:password).and_return('mypass')
226
226
  @request.should_receive(:setup_credentials).with('req')
227
227
 
228
228
  @request.transmit(@uri, 'req', nil)
229
229
  end
230
230
 
231
231
  it "does not attempt to send any credentials if user is nil" do
232
- @request.stub!(:user).and_return(nil)
233
- req = mock("request")
232
+ @request.stub(:user).and_return(nil)
233
+ req = double("request")
234
234
  req.should_not_receive(:basic_auth)
235
235
  @request.setup_credentials(req)
236
236
  end
237
237
 
238
238
  it "setup credentials when there's a user" do
239
- @request.stub!(:user).and_return('joe')
240
- @request.stub!(:password).and_return('mypass')
241
- req = mock("request")
239
+ @request.stub(:user).and_return('joe')
240
+ @request.stub(:password).and_return('mypass')
241
+ req = double("request")
242
242
  req.should_receive(:basic_auth).with('joe', 'mypass')
243
243
  @request.setup_credentials(req)
244
244
  end
245
245
  end
246
246
 
247
247
  it "catches EOFError and shows the more informative ServerBrokeConnection" do
248
- @http.stub!(:request).and_raise(EOFError)
248
+ @http.stub(:request).and_raise(EOFError)
249
249
  lambda { @request.transmit(@uri, 'req', nil) }.should raise_error(RestClient::ServerBrokeConnection)
250
250
  end
251
251
 
252
252
  it "class method execute wraps constructor" do
253
- req = mock("rest request")
253
+ req = double("rest request")
254
254
  RestClient::Request.should_receive(:new).with(1 => 2).and_return(req)
255
255
  req.should_receive(:execute)
256
256
  RestClient::Request.execute(1 => 2)
@@ -258,36 +258,36 @@ describe RestClient::Request do
258
258
 
259
259
  describe "exception" do
260
260
  it "raises Unauthorized when the response is 401" do
261
- res = mock('response', :code => '401', :[] => ['content-encoding' => ''], :body => '' )
261
+ res = double('response', :code => '401', :[] => ['content-encoding' => ''], :body => '' )
262
262
  lambda { @request.process_result(res) }.should raise_error(RestClient::Unauthorized)
263
263
  end
264
264
 
265
265
  it "raises ResourceNotFound when the response is 404" do
266
- res = mock('response', :code => '404', :[] => ['content-encoding' => ''], :body => '' )
266
+ res = double('response', :code => '404', :[] => ['content-encoding' => ''], :body => '' )
267
267
  lambda { @request.process_result(res) }.should raise_error(RestClient::ResourceNotFound)
268
268
  end
269
269
 
270
270
  it "raises RequestFailed otherwise" do
271
- res = mock('response', :code => '500', :[] => ['content-encoding' => ''], :body => '' )
271
+ res = double('response', :code => '500', :[] => ['content-encoding' => ''], :body => '' )
272
272
  lambda { @request.process_result(res) }.should raise_error(RestClient::InternalServerError)
273
273
  end
274
274
  end
275
275
 
276
276
  describe "block usage" do
277
277
  it "returns what asked to" do
278
- res = mock('response', :code => '401', :[] => ['content-encoding' => ''], :body => '' )
279
- @request.process_result(res){|response, request| "foo"}.should == "foo"
278
+ res = double('response', :code => '401', :[] => ['content-encoding' => ''], :body => '' )
279
+ @request.process_result(res){|response, request| "foo"}.should eq "foo"
280
280
  end
281
281
  end
282
282
 
283
283
  describe "proxy" do
284
284
  it "creates a proxy class if a proxy url is given" do
285
- RestClient.stub!(:proxy).and_return("http://example.com/")
286
- @request.net_http_class.should include(Net::HTTP::ProxyDelta)
285
+ RestClient.stub(:proxy).and_return("http://example.com/")
286
+ @request.net_http_class.proxy_class?.should be_true
287
287
  end
288
288
 
289
289
  it "creates a non-proxy class if a proxy url is not given" do
290
- @request.net_http_class.should_not include(Net::HTTP::ProxyDelta)
290
+ @request.net_http_class.proxy_class?.should be_false
291
291
  end
292
292
  end
293
293
 
@@ -296,66 +296,66 @@ describe RestClient::Request do
296
296
  it "logs a get request" do
297
297
  log = RestClient.log = []
298
298
  RestClient::Request.new(:method => :get, :url => 'http://url').log_request
299
- log[0].should == %Q{RestClient.get "http://url", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate"\n}
299
+ log[0].should eq %Q{RestClient.get "http://url", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate"\n}
300
300
  end
301
301
 
302
302
  it "logs a post request with a small payload" do
303
303
  log = RestClient.log = []
304
304
  RestClient::Request.new(:method => :post, :url => 'http://url', :payload => 'foo').log_request
305
- log[0].should == %Q{RestClient.post "http://url", "foo", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"3"\n}
305
+ log[0].should eq %Q{RestClient.post "http://url", "foo", "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"3"\n}
306
306
  end
307
307
 
308
308
  it "logs a post request with a large payload" do
309
309
  log = RestClient.log = []
310
310
  RestClient::Request.new(:method => :post, :url => 'http://url', :payload => ('x' * 1000)).log_request
311
- log[0].should == %Q{RestClient.post "http://url", 1000 byte(s) length, "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"1000"\n}
311
+ log[0].should eq %Q{RestClient.post "http://url", 1000 byte(s) length, "Accept"=>"*/*; q=0.5, application/xml", "Accept-Encoding"=>"gzip, deflate", "Content-Length"=>"1000"\n}
312
312
  end
313
313
 
314
314
  it "logs input headers as a hash" do
315
315
  log = RestClient.log = []
316
316
  RestClient::Request.new(:method => :get, :url => 'http://url', :headers => { :accept => 'text/plain' }).log_request
317
- log[0].should == %Q{RestClient.get "http://url", "Accept"=>"text/plain", "Accept-Encoding"=>"gzip, deflate"\n}
317
+ log[0].should eq %Q{RestClient.get "http://url", "Accept"=>"text/plain", "Accept-Encoding"=>"gzip, deflate"\n}
318
318
  end
319
319
 
320
320
  it "logs a response including the status code, content type, and result body size in bytes" do
321
321
  log = RestClient.log = []
322
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
323
- res.stub!(:[]).with('Content-type').and_return('text/html')
322
+ res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
323
+ res.stub(:[]).with('Content-type').and_return('text/html')
324
324
  @request.log_response res
325
- log[0].should == "# => 200 OK | text/html 4 bytes\n"
325
+ log[0].should eq "# => 200 OK | text/html 4 bytes\n"
326
326
  end
327
327
 
328
328
  it "logs a response with a nil Content-type" do
329
329
  log = RestClient.log = []
330
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
331
- res.stub!(:[]).with('Content-type').and_return(nil)
330
+ res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
331
+ res.stub(:[]).with('Content-type').and_return(nil)
332
332
  @request.log_response res
333
- log[0].should == "# => 200 OK | 4 bytes\n"
333
+ log[0].should eq "# => 200 OK | 4 bytes\n"
334
334
  end
335
335
 
336
336
  it "logs a response with a nil body" do
337
337
  log = RestClient.log = []
338
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => nil)
339
- res.stub!(:[]).with('Content-type').and_return('text/html; charset=utf-8')
338
+ res = double('result', :code => '200', :class => Net::HTTPOK, :body => nil)
339
+ res.stub(:[]).with('Content-type').and_return('text/html; charset=utf-8')
340
340
  @request.log_response res
341
- log[0].should == "# => 200 OK | text/html 0 bytes\n"
341
+ log[0].should eq "# => 200 OK | text/html 0 bytes\n"
342
342
  end
343
343
  end
344
344
 
345
345
  it "strips the charset from the response content type" do
346
346
  log = RestClient.log = []
347
- res = mock('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
348
- res.stub!(:[]).with('Content-type').and_return('text/html; charset=utf-8')
347
+ res = double('result', :code => '200', :class => Net::HTTPOK, :body => 'abcd')
348
+ res.stub(:[]).with('Content-type').and_return('text/html; charset=utf-8')
349
349
  @request.log_response res
350
- log[0].should == "# => 200 OK | text/html 4 bytes\n"
350
+ log[0].should eq "# => 200 OK | text/html 4 bytes\n"
351
351
  end
352
352
 
353
353
  describe "timeout" do
354
354
  it "set read_timeout" do
355
355
  @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload', :timeout => 123)
356
- @http.stub!(:request)
357
- @request.stub!(:process_result)
358
- @request.stub!(:response_log)
356
+ @http.stub(:request)
357
+ @request.stub(:process_result)
358
+ @request.stub(:response_log)
359
359
 
360
360
  @net.should_receive(:read_timeout=).with(123)
361
361
 
@@ -364,9 +364,9 @@ describe RestClient::Request do
364
364
 
365
365
  it "set open_timeout" do
366
366
  @request = RestClient::Request.new(:method => :put, :url => 'http://some/resource', :payload => 'payload', :open_timeout => 123)
367
- @http.stub!(:request)
368
- @request.stub!(:process_result)
369
- @request.stub!(:response_log)
367
+ @http.stub(:request)
368
+ @request.stub(:process_result)
369
+ @request.stub(:response_log)
370
370
 
371
371
  @net.should_receive(:open_timeout=).with(123)
372
372
 
@@ -376,32 +376,32 @@ describe RestClient::Request do
376
376
 
377
377
  describe "ssl" do
378
378
  it "uses SSL when the URI refers to a https address" do
379
- @uri.stub!(:is_a?).with(URI::HTTPS).and_return(true)
379
+ @uri.stub(:is_a?).with(URI::HTTPS).and_return(true)
380
380
  @net.should_receive(:use_ssl=).with(true)
381
- @http.stub!(:request)
382
- @request.stub!(:process_result)
383
- @request.stub!(:response_log)
381
+ @http.stub(:request)
382
+ @request.stub(:process_result)
383
+ @request.stub(:response_log)
384
384
  @request.transmit(@uri, 'req', 'payload')
385
385
  end
386
386
 
387
387
  it "should default to not verifying ssl certificates" do
388
- @request.verify_ssl.should == false
388
+ @request.verify_ssl.should eq false
389
389
  end
390
390
 
391
391
  it "should set net.verify_mode to OpenSSL::SSL::VERIFY_NONE if verify_ssl is false" do
392
392
  @net.should_receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
393
- @http.stub!(:request)
394
- @request.stub!(:process_result)
395
- @request.stub!(:response_log)
393
+ @http.stub(:request)
394
+ @request.stub(:process_result)
395
+ @request.stub(:response_log)
396
396
  @request.transmit(@uri, 'req', 'payload')
397
397
  end
398
398
 
399
399
  it "should not set net.verify_mode to OpenSSL::SSL::VERIFY_NONE if verify_ssl is true" do
400
400
  @request = RestClient::Request.new(:method => :put, :url => 'https://some/resource', :payload => 'payload', :verify_ssl => true)
401
401
  @net.should_not_receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_NONE)
402
- @http.stub!(:request)
403
- @request.stub!(:process_result)
404
- @request.stub!(:response_log)
402
+ @http.stub(:request)
403
+ @request.stub(:process_result)
404
+ @request.stub(:response_log)
405
405
  @request.transmit(@uri, 'req', 'payload')
406
406
  end
407
407
 
@@ -412,10 +412,9 @@ describe RestClient::Request do
412
412
  :payload => 'payload',
413
413
  :verify_ssl => mode )
414
414
  @net.should_receive(:verify_mode=).with(mode)
415
- @net.should_receive(:verify_callback=)
416
- @http.stub!(:request)
417
- @request.stub!(:process_result)
418
- @request.stub!(:response_log)
415
+ @http.stub(:request)
416
+ @request.stub(:process_result)
417
+ @request.stub(:response_log)
419
418
  @request.transmit(@uri, 'req', 'payload')
420
419
  end
421
420
 
@@ -431,9 +430,9 @@ describe RestClient::Request do
431
430
  :ssl_client_cert => "whatsupdoc!"
432
431
  )
433
432
  @net.should_receive(:cert=).with("whatsupdoc!")
434
- @http.stub!(:request)
435
- @request.stub!(:process_result)
436
- @request.stub!(:response_log)
433
+ @http.stub(:request)
434
+ @request.stub(:process_result)
435
+ @request.stub(:response_log)
437
436
  @request.transmit(@uri, 'req', 'payload')
438
437
  end
439
438
 
@@ -444,9 +443,9 @@ describe RestClient::Request do
444
443
  :payload => 'payload'
445
444
  )
446
445
  @net.should_not_receive(:cert=).with("whatsupdoc!")
447
- @http.stub!(:request)
448
- @request.stub!(:process_result)
449
- @request.stub!(:response_log)
446
+ @http.stub(:request)
447
+ @request.stub(:process_result)
448
+ @request.stub(:response_log)
450
449
  @request.transmit(@uri, 'req', 'payload')
451
450
  end
452
451
 
@@ -462,9 +461,9 @@ describe RestClient::Request do
462
461
  :ssl_client_key => "whatsupdoc!"
463
462
  )
464
463
  @net.should_receive(:key=).with("whatsupdoc!")
465
- @http.stub!(:request)
466
- @request.stub!(:process_result)
467
- @request.stub!(:response_log)
464
+ @http.stub(:request)
465
+ @request.stub(:process_result)
466
+ @request.stub(:response_log)
468
467
  @request.transmit(@uri, 'req', 'payload')
469
468
  end
470
469
 
@@ -475,9 +474,9 @@ describe RestClient::Request do
475
474
  :payload => 'payload'
476
475
  )
477
476
  @net.should_not_receive(:key=).with("whatsupdoc!")
478
- @http.stub!(:request)
479
- @request.stub!(:process_result)
480
- @request.stub!(:response_log)
477
+ @http.stub(:request)
478
+ @request.stub(:process_result)
479
+ @request.stub(:response_log)
481
480
  @request.transmit(@uri, 'req', 'payload')
482
481
  end
483
482
 
@@ -493,9 +492,9 @@ describe RestClient::Request do
493
492
  :ssl_ca_file => "Certificate Authority File"
494
493
  )
495
494
  @net.should_receive(:ca_file=).with("Certificate Authority File")
496
- @http.stub!(:request)
497
- @request.stub!(:process_result)
498
- @request.stub!(:response_log)
495
+ @http.stub(:request)
496
+ @request.stub(:process_result)
497
+ @request.stub(:response_log)
499
498
  @request.transmit(@uri, 'req', 'payload')
500
499
  end
501
500
 
@@ -506,9 +505,9 @@ describe RestClient::Request do
506
505
  :payload => 'payload'
507
506
  )
508
507
  @net.should_not_receive(:ca_file=).with("Certificate Authority File")
509
- @http.stub!(:request)
510
- @request.stub!(:process_result)
511
- @request.stub!(:response_log)
508
+ @http.stub(:request)
509
+ @request.stub(:process_result)
510
+ @request.stub(:response_log)
512
511
  @request.transmit(@uri, 'req', 'payload')
513
512
  end
514
513
  end
@@ -520,10 +519,10 @@ describe RestClient::Request do
520
519
  :payload => 'payload'
521
520
  )
522
521
  net_http_res = Net::HTTPNoContent.new("", "204", "No Content")
523
- net_http_res.stub!(:read_body).and_return(nil)
522
+ net_http_res.stub(:read_body).and_return(nil)
524
523
  @http.should_receive(:request).and_return(@request.fetch_body(net_http_res))
525
524
  response = @request.transmit(@uri, 'req', 'payload')
526
525
  response.should_not be_nil
527
- response.code.should == 204
526
+ response.code.should eq 204
528
527
  end
529
528
  end