resourceful 0.3.1 → 0.5.0

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.
Files changed (38) hide show
  1. data/Manifest +24 -28
  2. data/Rakefile +44 -14
  3. data/lib/resourceful.rb +11 -21
  4. data/lib/resourceful/authentication_manager.rb +3 -2
  5. data/lib/resourceful/cache_manager.rb +58 -1
  6. data/lib/resourceful/exceptions.rb +34 -0
  7. data/lib/resourceful/header.rb +95 -0
  8. data/lib/resourceful/http_accessor.rb +0 -2
  9. data/lib/resourceful/memcache_cache_manager.rb +3 -13
  10. data/lib/resourceful/net_http_adapter.rb +15 -5
  11. data/lib/resourceful/request.rb +180 -18
  12. data/lib/resourceful/resource.rb +38 -141
  13. data/lib/resourceful/response.rb +142 -95
  14. data/resourceful.gemspec +9 -7
  15. data/spec/acceptance/authorization_spec.rb +16 -0
  16. data/spec/acceptance/caching_spec.rb +192 -0
  17. data/spec/acceptance/header_spec.rb +24 -0
  18. data/spec/acceptance/redirecting_spec.rb +12 -0
  19. data/spec/acceptance/resource_spec.rb +84 -0
  20. data/spec/acceptance_shared_specs.rb +12 -17
  21. data/spec/{acceptance_spec.rb → old_acceptance_specs.rb} +27 -57
  22. data/spec/simple_sinatra_server.rb +74 -0
  23. data/spec/simple_sinatra_server_spec.rb +98 -0
  24. data/spec/spec_helper.rb +21 -7
  25. metadata +50 -42
  26. data/spec/resourceful/authentication_manager_spec.rb +0 -249
  27. data/spec/resourceful/cache_manager_spec.rb +0 -223
  28. data/spec/resourceful/header_spec.rb +0 -38
  29. data/spec/resourceful/http_accessor_spec.rb +0 -164
  30. data/spec/resourceful/memcache_cache_manager_spec.rb +0 -111
  31. data/spec/resourceful/net_http_adapter_spec.rb +0 -96
  32. data/spec/resourceful/options_interpreter_spec.rb +0 -102
  33. data/spec/resourceful/request_spec.rb +0 -186
  34. data/spec/resourceful/resource_spec.rb +0 -600
  35. data/spec/resourceful/response_spec.rb +0 -238
  36. data/spec/resourceful/stubbed_resource_proxy_spec.rb +0 -58
  37. data/spec/simple_http_server_shared_spec.rb +0 -162
  38. data/spec/simple_http_server_shared_spec_spec.rb +0 -212
@@ -1,186 +0,0 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname + '../spec_helper'
3
- require 'rubygems'
4
- require 'addressable/uri'
5
-
6
- describe Resourceful::Request do
7
- before do
8
- @uri = Addressable::URI.parse('http://www.example.com')
9
- @resource = mock('resource', :logger => Resourceful::BitBucketLogger.new)
10
- @resource.stub!(:uri).and_return(@uri)
11
-
12
- @request = Resourceful::Request.new(:get, @resource)
13
-
14
- @cachemgr = mock('cache_mgr')
15
- @cachemgr.stub!(:lookup).and_return(nil)
16
- @cachemgr.stub!(:store)
17
- @resource.stub!(:accessor).and_return(mock('accessor', :cache_manager => @cachemgr, :logger => Resourceful::BitBucketLogger.new))
18
- end
19
-
20
- describe 'init' do
21
-
22
- it 'should be instantiatable' do
23
- @request.should be_instance_of(Resourceful::Request)
24
- end
25
-
26
- it 'should take an http method' do
27
- @request.method.should == :get
28
- end
29
-
30
- it 'should take a resource' do
31
- @request.resource.should == @resource
32
- end
33
-
34
- it 'should take an optional body' do
35
- req = Resourceful::Request.new(:get, @resource)
36
- req.body.should be_nil
37
-
38
- req = Resourceful::Request.new(:post, @resource, 'Hello from post!')
39
- req.body.should == 'Hello from post!'
40
- end
41
-
42
- it 'should have a request_time' do
43
- @request.should respond_to(:request_time)
44
- end
45
-
46
- end
47
-
48
- describe '#response' do
49
- before do
50
- @net_http_adapter_response = mock('net_http_adapter_response')
51
- Resourceful::NetHttpAdapter.stub!(:make_request).and_return(@net_http_adapter_response)
52
-
53
- @response = mock('response', :code => 200, :authoritative= => true, :was_unsuccessful? => false, :request_time= => nil)
54
- Resourceful::Response.stub!(:new).and_return(@response)
55
- end
56
-
57
- it 'should be a method' do
58
- @request.should respond_to(:response)
59
- end
60
-
61
- it 'should return the Response object' do
62
- @request.response.should == @response
63
- end
64
-
65
- it 'should set the request_time to now' do
66
- now = Time.now
67
- Time.stub!(:now).and_return(now)
68
-
69
- @request.response
70
- @request.request_time.should == now
71
- end
72
-
73
- it 'should set the response\'s request time' do
74
- now = Time.now
75
- Time.stub!(:now).and_return(now)
76
-
77
- @response.should_receive(:request_time=).with(now)
78
- @request.response
79
- end
80
- end
81
-
82
- describe '#should_be_redirected?' do
83
- before do
84
- @net_http_adapter_response = mock('net_http_adapter_response')
85
- Resourceful::NetHttpAdapter.stub!(:make_request).and_return(@net_http_adapter_response)
86
-
87
- @response = mock('response', :code => 200, :authoritative= => true, :was_unsuccessful? => false, :request_time= => nil)
88
- Resourceful::Response.stub!(:new).and_return(@response)
89
- end
90
-
91
- describe 'with no callback set' do
92
- before do
93
- @callback = nil
94
- @resource.stub!(:on_redirect).and_return(@callback)
95
- end
96
-
97
- it 'should be true for GET' do
98
- request = Resourceful::Request.new(:get, @resource, @post_data)
99
-
100
- request.should_be_redirected?.should be_true
101
- end
102
-
103
- it 'should be false for POST, etc' do
104
- request = Resourceful::Request.new(:post, @resource, @post_data)
105
-
106
- request.should_be_redirected?.should be_false
107
- end
108
-
109
- end
110
-
111
- it 'should be true when callback returns true' do
112
- @callback = lambda { true }
113
- @resource.stub!(:on_redirect).and_return(@callback)
114
- request = Resourceful::Request.new(:get, @resource, @post_data)
115
-
116
- request.should_be_redirected?.should be_true
117
- end
118
-
119
- it 'should be false when callback returns false' do
120
- @callback = lambda { false }
121
- @resource.stub!(:on_redirect).and_return(@callback)
122
- request = Resourceful::Request.new(:get, @resource, @post_data)
123
-
124
- request.should_be_redirected?.should be_false
125
- end
126
-
127
- end
128
-
129
- describe "content coding" do
130
- it "should set Accept-Encoding automatically" do
131
- @request.header['Accept-Encoding'].should == 'gzip, identity'
132
- end
133
- end
134
-
135
- describe '#set_validation_headers' do
136
- before do
137
- @cached_response = mock('cached_response')
138
-
139
- @cached_response_header = mock('header', :[] => nil, :has_key? => false)
140
- @cached_response.stub!(:header).and_return(@cached_response_header)
141
-
142
- @cachemgr.stub!(:lookup).and_return(@cached_response)
143
- end
144
-
145
- it 'should have an #set_validation_headers method' do
146
- @request.should respond_to(:set_validation_headers)
147
- end
148
-
149
- it 'should set If-None-Match to the cached response\'s ETag' do
150
- @cached_response_header.should_receive(:[]).with('ETag').and_return('some etag')
151
- @cached_response_header.should_receive(:has_key?).with('ETag').and_return(true)
152
- @request.set_validation_headers(@cached_response)
153
-
154
- @request.header['If-None-Match'].should == 'some etag'
155
- end
156
-
157
- it 'should not set If-None-Match if the cached response does not have an ETag' do
158
- @request.set_validation_headers(@cached_response)
159
- @request.header.should_not have_key('If-None-Match')
160
- end
161
-
162
- it 'should set If-Modified-Since to the cached response\'s Last-Modified' do
163
- @cached_response_header.should_receive(:[]).with('Last-Modified').and_return('some date')
164
- @cached_response_header.should_receive(:has_key?).with('Last-Modified').and_return(true)
165
- @request.set_validation_headers(@cached_response)
166
-
167
- @request.header['If-Modified-Since'].should == 'some date'
168
- end
169
-
170
- it 'should not set If-Modified-Since if the cached response does not have Last-Modified' do
171
- @request.set_validation_headers(@cached_response)
172
- @request.header.should_not have_key('If-Modified-Since')
173
- end
174
-
175
- it 'should add "Cache-Control: max-age=0" to the request when revalidating a response that has "Cache-Control: must-revalidate" set' do
176
- @cached_response_header.should_receive(:[]).with('Cache-Control').and_return(['must-revalidate'])
177
- @cached_response_header.should_receive(:has_key?).with('Cache-Control').and_return(true)
178
- @request.set_validation_headers(@cached_response)
179
-
180
- @request.header['Cache-Control'].should include('max-age=0')
181
- end
182
-
183
- end
184
-
185
- end
186
-
@@ -1,600 +0,0 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname + '../spec_helper'
3
-
4
- require 'resourceful/resource'
5
-
6
- describe Resourceful::Resource do
7
- before do
8
- @auth_manager = mock('auth_manager', :add_credentials => nil)
9
- @cache_manager = mock('cache_manager', :lookup => nil, :store => nil, :invalidate => nil)
10
- @logger = mock('logger', :debug => nil, :info => nil)
11
- @accessor = mock('accessor', :auth_manager => @auth_manager,
12
- :cache_manager => @cache_manager,
13
- :logger => @logger)
14
-
15
- @uri = 'http://www.example.com/'
16
- @resource = Resourceful::Resource.new(@accessor, @uri)
17
-
18
- @response = mock('response', :code => 200,
19
- :is_redirect? => false,
20
- :is_not_authorized? => false,
21
- :is_success? => true,
22
- :is_not_modified? => false)
23
-
24
- @request = mock('request', :response => @response, :should_be_redirected? => true, :uri => @uri)
25
- Resourceful::Request.stub!(:new).and_return(@request)
26
- end
27
-
28
- describe 'init' do
29
- it 'should be instantiatable' do
30
- @resource.should be_instance_of(Resourceful::Resource)
31
- end
32
-
33
- it 'should take an http_accessor' do
34
- @resource.accessor.should == @accessor
35
- end
36
-
37
- it 'should take a uri' do
38
- @resource.uri.should == @uri
39
- end
40
-
41
- it 'should take some default_options' do
42
- r = Resourceful::Resource.new(@accessor, @uri, :foo => :bar)
43
- r.default_options.should == {:foo => :bar}
44
- end
45
-
46
- it 'should default to an empty hash for options' do
47
- @resource.default_options.should == {}
48
- end
49
- end
50
-
51
- describe '#effective_uri' do
52
-
53
- it 'should be the latest uri' do
54
- @resource.effective_uri.should == @uri
55
- end
56
-
57
- it 'should be aliased as #uri' do
58
- @resource.uri.should == @resource.effective_uri
59
- end
60
-
61
- end
62
-
63
- describe '#do_read_request' do
64
-
65
- def make_request
66
- @resource.do_read_request(:some_method)
67
- end
68
-
69
- it 'should make a new request object from the method' do
70
- Resourceful::Request.should_receive(:new).with(:some_method, @resource, nil, {}).and_return(@request)
71
- make_request
72
- end
73
-
74
- it 'should set the header of the request from the header arg' do
75
- Resourceful::Request.should_receive(:new).with(:some_method, @resource, nil, :foo => :bar).and_return(@request)
76
- @resource.do_read_request(:some_method, :foo => :bar)
77
- end
78
-
79
- describe 'default options' do
80
- before do
81
- @resource.default_options = {:foo => :bar}
82
- end
83
-
84
- it 'should merge the header with the default options' do
85
- Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :bar).and_return(@request)
86
- make_request
87
- end
88
-
89
- it 'should override any default header with the request header' do
90
- Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :baz).and_return(@request)
91
- @resource.do_read_request(:some_method, :foo => :baz)
92
- end
93
- end
94
-
95
- describe 'non-success responses' do
96
- before do
97
- @uri = 'http://www.example.com/code/404'
98
- @resource = Resourceful::Resource.new(@accessor, @uri)
99
-
100
- @redirected_uri = 'http://www.example.com/get'
101
- @redirect_response = mock('redirect_response',
102
- :header => {'Location' => [@redirected_uri]},
103
- :is_redirect? => false,
104
- :is_success? => false,
105
- :is_not_authorized? => false,
106
- :is_not_modified? => false,
107
- :code => 404)
108
-
109
- @request.stub!(:response).and_return(@redirect_response, @response)
110
- @request.stub!(:method).and_return(:get)
111
- @request.stub!(:uri).and_return('http://www.example.com/code/404')
112
- end
113
-
114
- it 'should raise UnsuccessfulHttpRequestError' do
115
- lambda {
116
- @resource.do_read_request(:get)
117
- }.should raise_error(Resourceful::UnsuccessfulHttpRequestError)
118
- end
119
-
120
- it 'should give a reasonable error message' do
121
- lambda {
122
- @resource.do_read_request(:get)
123
- }.should raise_error("get request to <http://www.example.com/code/404> failed with code 404")
124
- end
125
- end
126
-
127
- describe 'with redirection' do
128
- before do
129
- @uri = 'http://www.example.com/redirect/301?http://www.example.com/get'
130
- @resource = Resourceful::Resource.new(@accessor, @uri)
131
-
132
- @redirected_uri = 'http://www.example.com/get'
133
- @redirect_response = mock('redirect_response',
134
- :header => {'Location' => [@redirected_uri]},
135
- :is_redirect? => true,
136
- :is_permanent_redirect? => true,
137
- :is_not_modified? => false)
138
-
139
- @request.stub!(:response).and_return(@redirect_response, @response)
140
-
141
- end
142
-
143
- it 'should check if the response was a redirect' do
144
- @redirect_response.should_receive(:is_redirect?).and_return(true)
145
- make_request
146
- end
147
-
148
- it 'should check if the request should be redirected' do
149
- @request.should_receive(:should_be_redirected?).and_return(true)
150
- make_request
151
- end
152
-
153
- describe 'permanent redirect' do
154
- before do
155
- @redirect_response.stub!(:is_permanent_redirect?).and_return(true)
156
- end
157
-
158
- it 'should check if the response was a permanent redirect' do
159
- @redirect_response.should_receive(:is_permanent_redirect?).and_return(true)
160
- make_request
161
- end
162
-
163
- it 'should add the new location as the effective uri' do
164
- make_request
165
- @resource.effective_uri.should == @redirected_uri
166
- end
167
-
168
- it 'should remake the request with the new uri' do
169
- Resourceful::Request.should_receive(:new).twice.and_return(@request)
170
- @request.should_receive(:response).twice.and_return(@redirect_response, @response)
171
- make_request
172
- end
173
-
174
- end
175
-
176
- describe 'temporary redirect' do
177
- before do
178
- @redirect_response.stub!(:is_permanent_redirect?).and_return(false)
179
- end
180
-
181
- it 'should check if the response was not a permanent redirect' do
182
- @redirect_response.should_receive(:is_permanent_redirect?).and_return(false)
183
- make_request
184
- end
185
-
186
- it 'should not add the new location as the effective uri' do
187
- make_request
188
- @resource.effective_uri.should == @uri
189
- end
190
-
191
- it 'should make a new resource from the new location' do
192
- new_resource = mock('resource', :do_read_request => @response, :uri => @uri)
193
- Resourceful::Resource.should_receive(:new).with(@accessor, @redirected_uri).and_return(new_resource)
194
- make_request
195
- end
196
-
197
- end
198
-
199
- end # read with redirection
200
-
201
- describe 'with authorization' do
202
- before do
203
- @authmgr = mock('auth_manager')
204
- @authmgr.stub!(:add_credentials)
205
- @authmgr.stub!(:associate_auth_info).and_return(true)
206
-
207
- @accessor.stub!(:auth_manager).and_return(@authmgr)
208
- end
209
-
210
- it 'should attempt to add credentials to the request' do
211
- @authmgr.should_receive(:add_credentials).with(@request)
212
- make_request
213
- end
214
-
215
- it 'should check if the response was not authorized' do
216
- @response.should_receive(:is_not_authorized?).and_return(false)
217
- make_request
218
- end
219
-
220
- it 'should associate the auth info in the response if it was not authorized' do
221
- @authmgr.should_receive(:associate_auth_info).with(@response).and_return(true)
222
- @response.stub!(:is_not_authorized?).and_return(true)
223
- make_request
224
- end
225
-
226
- it 'should re-make the request only once if it was not authorized the first time' do
227
- Resourceful::Request.should_receive(:new).with(:some_method, @resource, nil, {}).twice.and_return(@request)
228
- @response.stub!(:is_not_authorized?).and_return(true)
229
- make_request
230
- end
231
-
232
- end
233
-
234
- describe 'with caching' do
235
- before do
236
- @cached_response = mock('cached response', :is_redirect? => false,
237
- :is_not_authorized? => false,
238
- :is_success? => true,
239
- :stale? => false)
240
- @cache_manager.stub!(:lookup).and_return(@cached_response)
241
- end
242
-
243
- it 'should lookup the request in the cache' do
244
- @cache_manager.should_receive(:lookup).with(@request)
245
- make_request
246
- end
247
-
248
- it 'should check if the cached response is stale' do
249
- @cached_response.should_receive(:stale?).and_return(false)
250
- make_request
251
- end
252
-
253
- describe 'in cache' do
254
-
255
- end
256
-
257
- describe 'in cache but stale' do
258
-
259
- end
260
-
261
- describe 'not in cache' do
262
-
263
- end
264
-
265
- end
266
-
267
- end
268
-
269
- describe '#do_write_request' do
270
-
271
- def make_request
272
- @resource.do_write_request(:some_method, "data")
273
- end
274
-
275
- it 'should make a new request object from the method' do
276
- Resourceful::Request.should_receive(:new).with(:some_method, @resource, "data", anything).and_return(@request)
277
- @resource.do_write_request(:some_method, "data")
278
- end
279
-
280
- describe 'default options' do
281
- before do
282
- @resource.default_options = {:foo => :bar}
283
- end
284
-
285
- it 'should merge the header with the default options' do
286
- Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :bar).and_return(@request)
287
- make_request
288
- end
289
-
290
- it 'should override any default header with the request header' do
291
- Resourceful::Request.should_receive(:new).with(anything, anything, anything, :foo => :baz).and_return(@request)
292
- @resource.do_write_request(:some_method, "data", :foo => :baz)
293
- end
294
- end
295
-
296
- describe 'non-success responses' do
297
- before do
298
- @uri = 'http://www.example.com/code/404'
299
- @resource = Resourceful::Resource.new(@accessor, @uri)
300
-
301
- @redirected_uri = 'http://www.example.com/get'
302
- @response = mock('response',
303
- :header => {'Location' => [@redirected_uri]},
304
- :is_redirect? => false,
305
- :is_success? => false,
306
- :is_not_authorized? => false,
307
- :code => 404)
308
-
309
- @request.stub!(:response).and_return(@response)
310
- @request.stub!(:method).and_return(:post)
311
- @request.stub!(:uri).and_return('http://www.example.com/code/404')
312
- end
313
-
314
- it 'should raise UnsuccessfulHttpRequestError' do
315
- lambda {
316
- @resource.do_write_request(:post, "data")
317
- }.should raise_error(Resourceful::UnsuccessfulHttpRequestError)
318
- end
319
-
320
- it 'should give a reasonable error message' do
321
- lambda {
322
- @resource.do_write_request(:post, "data")
323
- }.should raise_error("post request to <http://www.example.com/code/404> failed with code 404")
324
- end
325
- end
326
-
327
- describe 'with redirection' do
328
- before do
329
- @uri = 'http://www.example.com/redirect/301?http://www.example.com/get'
330
- @resource = Resourceful::Resource.new(@accessor, @uri)
331
-
332
- @redirected_uri = 'http://www.example.com/get'
333
- @redirect_response = mock('redirect_response',
334
- :header => {'Location' => [@redirected_uri]},
335
- :is_redirect? => true,
336
- :is_permanent_redirect? => true)
337
-
338
- @request.stub!(:response).and_return(@redirect_response, @response)
339
-
340
- end
341
-
342
- it 'should check if the response was a redirect' do
343
- @redirect_response.should_receive(:is_redirect?).and_return(true)
344
- make_request
345
- end
346
-
347
- it 'should check if the request should be redirected' do
348
- @request.should_receive(:should_be_redirected?).and_return(true)
349
- make_request
350
- end
351
-
352
- describe 'permanent redirect' do
353
- before do
354
- @redirect_response.stub!(:is_permanent_redirect?).and_return(true)
355
- end
356
-
357
- it 'should check if the response was a permanent redirect' do
358
- @redirect_response.should_receive(:is_permanent_redirect?).and_return(true)
359
- make_request
360
- end
361
-
362
- it 'should add the new location as the effective uri' do
363
- make_request
364
- @resource.effective_uri.should == @redirected_uri
365
- end
366
-
367
- it 'should remake the request with the new uri' do
368
- Resourceful::Request.should_receive(:new).twice.and_return(@request)
369
- @request.should_receive(:response).twice.and_return(@redirect_response, @response)
370
- make_request
371
- end
372
-
373
- end
374
-
375
- describe 'temporary redirect' do
376
- before do
377
- @redirect_response.stub!(:is_permanent_redirect?).and_return(false)
378
- @redirect_response.stub!(:code).and_return(302)
379
- end
380
-
381
- it 'should check if the response was not a permanent redirect' do
382
- @redirect_response.should_receive(:is_permanent_redirect?).and_return(false)
383
- make_request
384
- end
385
-
386
- it 'should not add the new location as the effective uri' do
387
- make_request
388
- @resource.effective_uri.should == @uri
389
- end
390
-
391
- it 'should make a new resource from the new location' do
392
- new_resource = mock('resource', :do_write_request => @response)
393
- Resourceful::Resource.should_receive(:new).with(@accessor, @redirected_uri).and_return(new_resource)
394
- make_request
395
- end
396
-
397
- describe '302 Found' do
398
- before do
399
- @new_resource = mock('resource')
400
- Resourceful::Resource.should_receive(:new).with(@accessor, @redirected_uri).and_return(@new_resource)
401
- @redirect_response.stub!(:code).and_return(303)
402
- end
403
-
404
- it 'should redirect to the new location with a GET request, regardless of the original method' do
405
- @new_resource.should_receive(:do_read_request).with(:get, {}).and_return(@response)
406
- make_request
407
- end
408
- end
409
-
410
- end
411
-
412
- end # write with redirection
413
-
414
- describe 'with authorization' do
415
- before do
416
- @authmgr = mock('auth_manager')
417
- @authmgr.stub!(:add_credentials)
418
- @authmgr.stub!(:associate_auth_info).and_return(true)
419
-
420
- @accessor.stub!(:auth_manager).and_return(@authmgr)
421
- end
422
-
423
- it 'should attempt to add credentials to the request' do
424
- @authmgr.should_receive(:add_credentials).with(@request)
425
- make_request
426
- end
427
-
428
- it 'should check if the response was not authorized' do
429
- @response.should_receive(:is_not_authorized?).and_return(false)
430
- make_request
431
- end
432
-
433
- it 'should associate the auth info in the response if it was not authorized' do
434
- @authmgr.should_receive(:associate_auth_info).with(@response).and_return(true)
435
- @response.stub!(:is_not_authorized?).and_return(true)
436
- make_request
437
- end
438
-
439
- it 'should re-make the request only once if it was not authorized the first time' do
440
- Resourceful::Request.should_receive(:new).with(:some_method, @resource, "data", {}).twice.and_return(@request)
441
- @response.stub!(:is_not_authorized?).and_return(true)
442
- make_request
443
- end
444
- end
445
-
446
- end
447
-
448
- describe 'callback registration' do
449
- before do
450
- @callback = mock('callback')
451
- @callback.stub!(:call).and_return(true)
452
-
453
- @resource.on_redirect { @callback.call }
454
- end
455
-
456
- it 'should store the callback when called with a block' do
457
- @resource.on_redirect { true }
458
-
459
- callback = @resource.instance_variable_get(:@on_redirect)
460
- callback.should be_kind_of(Proc)
461
- end
462
-
463
- it 'should return the callback when called without a block' do
464
- callback = lambda { "foo" }
465
- @resource.on_redirect(&callback)
466
- @resource.on_redirect.should == callback
467
- end
468
-
469
- end
470
-
471
- describe '#get' do
472
-
473
- it 'should be a method' do
474
- @resource.should respond_to(:get)
475
- end
476
-
477
- it 'should pass :get to the #do_read_request method' do
478
- @resource.should_receive(:do_read_request).with(:get, {}).and_return(@response)
479
- @resource.get
480
- end
481
-
482
- it 'should return the response of making the request' do
483
- @resource.get.should == @response
484
- end
485
-
486
- end
487
-
488
- describe "#delete" do
489
-
490
- it 'should be a method' do
491
- @resource.should respond_to(:delete)
492
- end
493
-
494
- it 'should return the response of making the request' do
495
- @resource.delete.should == @response
496
- end
497
-
498
- end
499
-
500
- describe "#post(body_data, :content_type => content-type)" do
501
- before do
502
- @resource = Resourceful::Resource.new(@accessor, 'http://foo.invalid/')
503
- @response = mock('response', :is_redirect? => false, :is_success? => true, :is_not_authorized? => false, :code => 200)
504
- @request = mock('request', :response => @response)
505
- Resourceful::Request.stub!(:new).and_return(@request)
506
- end
507
-
508
- it "should get the response from the request" do
509
- @request.should_receive(:response).and_return(@response)
510
-
511
- @resource.post("a body", :content_type => 'text/plain')
512
- end
513
-
514
- it 'should put the content type in the header' do
515
- Resourceful::Request.should_receive(:new).
516
- with(anything,
517
- anything,
518
- anything,
519
- hash_including(:content_type =>'text/plain')).
520
- and_return(@request)
521
-
522
- @resource.post("a body", :content_type => 'text/plain')
523
- end
524
-
525
- it 'should create a post request' do
526
- Resourceful::Request.should_receive(:new).
527
- with(:post, anything, anything, anything).
528
- and_return(@request)
529
-
530
- @resource.post("a body", :content_type => 'text/plain')
531
- end
532
-
533
- it 'should pass body to the request object' do
534
- Resourceful::Request.should_receive(:new).
535
- with(anything, anything, "a body", anything).
536
- and_return(@request)
537
-
538
- @resource.post("a body", :content_type => 'text/plain')
539
- end
540
-
541
- it 'should pass self to the request object' do
542
- Resourceful::Request.should_receive(:new).
543
- with(anything, @resource, anything, anything).
544
- and_return(@request)
545
-
546
- @resource.post("a body", :content_type => 'text/plain')
547
- end
548
- end
549
-
550
- describe "#put(body_data, :content_type => content_type)" do
551
- before do
552
- @resource = Resourceful::Resource.new(@accessor, 'http://foo.invalid/')
553
- @response = mock('response', :is_redirect? => false, :is_success? => true, :is_not_authorized? => false, :code => 200)
554
- @request = mock('request', :response => @response)
555
- Resourceful::Request.stub!(:new).and_return(@request)
556
- end
557
-
558
- it "should get the response from the request" do
559
- @request.should_receive(:response).and_return(@response)
560
-
561
- @resource.put("a body", :content_type => 'text/plain')
562
- end
563
-
564
- it 'should put the content type in the header' do
565
- Resourceful::Request.should_receive(:new).
566
- with(anything,
567
- anything,
568
- anything,
569
- hash_including(:content_type =>'text/plain')).
570
- and_return(@request)
571
-
572
- @resource.put("a body", :content_type => 'text/plain')
573
- end
574
-
575
- it 'should create a put request' do
576
- Resourceful::Request.should_receive(:new).
577
- with(:put, anything, anything, anything).
578
- and_return(@request)
579
-
580
- @resource.put("a body", :content_type => 'text/plain')
581
- end
582
-
583
- it 'should pass body to the request object' do
584
- Resourceful::Request.should_receive(:new).
585
- with(anything, anything, "a body", anything).
586
- and_return(@request)
587
-
588
- @resource.put("a body", :content_type => 'text/plain')
589
- end
590
-
591
- it 'should pass self to the request object' do
592
- Resourceful::Request.should_receive(:new).
593
- with(anything, @resource, anything, anything).
594
- and_return(@request)
595
-
596
- @resource.put("a body", :content_type => 'text/plain')
597
- end
598
- end
599
-
600
- end