almodovar 0.1.0 → 0.1.2

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 (31) hide show
  1. data/vendor/resourceful-0.5.3-patched/MIT-LICENSE +21 -0
  2. data/vendor/resourceful-0.5.3-patched/Manifest +29 -0
  3. data/vendor/resourceful-0.5.3-patched/README.markdown +84 -0
  4. data/vendor/resourceful-0.5.3-patched/Rakefile +71 -0
  5. data/vendor/resourceful-0.5.3-patched/lib/resourceful.rb +18 -0
  6. data/vendor/resourceful-0.5.3-patched/lib/resourceful/authentication_manager.rb +108 -0
  7. data/vendor/resourceful-0.5.3-patched/lib/resourceful/cache_manager.rb +240 -0
  8. data/vendor/resourceful-0.5.3-patched/lib/resourceful/exceptions.rb +34 -0
  9. data/vendor/resourceful-0.5.3-patched/lib/resourceful/header.rb +126 -0
  10. data/vendor/resourceful-0.5.3-patched/lib/resourceful/http_accessor.rb +98 -0
  11. data/vendor/resourceful-0.5.3-patched/lib/resourceful/memcache_cache_manager.rb +75 -0
  12. data/vendor/resourceful-0.5.3-patched/lib/resourceful/net_http_adapter.rb +70 -0
  13. data/vendor/resourceful-0.5.3-patched/lib/resourceful/options_interpreter.rb +78 -0
  14. data/vendor/resourceful-0.5.3-patched/lib/resourceful/request.rb +230 -0
  15. data/vendor/resourceful-0.5.3-patched/lib/resourceful/resource.rb +163 -0
  16. data/vendor/resourceful-0.5.3-patched/lib/resourceful/response.rb +221 -0
  17. data/vendor/resourceful-0.5.3-patched/lib/resourceful/stubbed_resource_proxy.rb +47 -0
  18. data/vendor/resourceful-0.5.3-patched/lib/resourceful/util.rb +6 -0
  19. data/vendor/resourceful-0.5.3-patched/resourceful.gemspec +48 -0
  20. data/vendor/resourceful-0.5.3-patched/spec/acceptance/authorization_spec.rb +16 -0
  21. data/vendor/resourceful-0.5.3-patched/spec/acceptance/caching_spec.rb +192 -0
  22. data/vendor/resourceful-0.5.3-patched/spec/acceptance/header_spec.rb +24 -0
  23. data/vendor/resourceful-0.5.3-patched/spec/acceptance/redirecting_spec.rb +12 -0
  24. data/vendor/resourceful-0.5.3-patched/spec/acceptance/resource_spec.rb +84 -0
  25. data/vendor/resourceful-0.5.3-patched/spec/acceptance_shared_specs.rb +44 -0
  26. data/vendor/resourceful-0.5.3-patched/spec/old_acceptance_specs.rb +378 -0
  27. data/vendor/resourceful-0.5.3-patched/spec/simple_sinatra_server.rb +74 -0
  28. data/vendor/resourceful-0.5.3-patched/spec/simple_sinatra_server_spec.rb +98 -0
  29. data/vendor/resourceful-0.5.3-patched/spec/spec.opts +3 -0
  30. data/vendor/resourceful-0.5.3-patched/spec/spec_helper.rb +28 -0
  31. metadata +32 -2
@@ -0,0 +1,378 @@
1
+ require 'pathname'
2
+ require Pathname(__FILE__).dirname + 'spec_helper'
3
+ require 'resourceful'
4
+
5
+ require Pathname(__FILE__).dirname + 'acceptance_shared_specs'
6
+
7
+
8
+ describe Resourceful do
9
+
10
+ describe 'working with a resource' do
11
+ before do
12
+ @accessor = Resourceful::HttpAccessor.new
13
+ end
14
+
15
+ it 'should set additional headers on the #get' do
16
+ resource = @accessor.resource('http://localhost:3000/echo_header')
17
+ resp = resource.get(:foo => :bar)
18
+ resp.should be_instance_of(Resourceful::Response)
19
+ resp.code.should == 200
20
+ resp.body.should =~ /"HTTP_FOO"=>"bar"/
21
+ end
22
+
23
+ it 'should take an optional default header for reads' do
24
+ resource = @accessor.resource('http://localhost:3000/echo_header', :foo => :bar)
25
+ resp = resource.get
26
+ resp.should be_instance_of(Resourceful::Response)
27
+ resp.code.should == 200
28
+ resp.body.should =~ /"HTTP_FOO"=>"bar"/
29
+ end
30
+
31
+ it 'should take an optional default header for writes' do
32
+ resource = @accessor.resource('http://localhost:3000/echo_header', :foo => :bar)
33
+ resp = resource.post("data", :content_type => 'text/plain')
34
+ resp.should be_instance_of(Resourceful::Response)
35
+ resp.code.should == 200
36
+ resp.body.should =~ /"HTTP_FOO"=>"bar"/
37
+ end
38
+
39
+ it 'should override the default header with any set on a read action' do
40
+ resource = @accessor.resource('http://localhost:3000/echo_header', :foo => :bar)
41
+ resp = resource.get(:foo => :baz)
42
+ resp.should be_instance_of(Resourceful::Response)
43
+ resp.code.should == 200
44
+ resp.body.should =~ /"HTTP_FOO"=>"baz"/
45
+ end
46
+
47
+ it 'should override the default header with any set on a write action' do
48
+ resource = @accessor.resource('http://localhost:3000/echo_header', :foo => :bar)
49
+ resp = resource.post("data", :foo => :baz, :content_type => 'text/plain')
50
+ resp.should be_instance_of(Resourceful::Response)
51
+ resp.code.should == 200
52
+ resp.body.should =~ /"HTTP_FOO"=>"baz"/
53
+ end
54
+
55
+ describe 'redirecting' do
56
+
57
+ describe 'registering callback' do
58
+ before do
59
+ @resource = @accessor.resource('http://localhost:3000/redirect/301?http://localhost:3000/get')
60
+ end
61
+
62
+ it 'should allow a callback to be registered' do
63
+ @resource.should respond_to(:on_redirect)
64
+ end
65
+
66
+ it 'should perform a redirect if the callback is true' do
67
+ @resource.on_redirect { true }
68
+ @resource.get.should be_successful
69
+ end
70
+
71
+ it 'should not perform the redirect if the callback returns false' do
72
+ @resource.on_redirect { false }
73
+ @resource.get
74
+ @resource.get.should be_redirect
75
+ end
76
+ end
77
+
78
+ describe 'permanent redirect' do
79
+ before do
80
+ @redirect_code = 301
81
+ @resource = @accessor.resource('http://localhost:3000/redirect/301?http://localhost:3000/get')
82
+ end
83
+
84
+ it_should_behave_like 'redirect'
85
+
86
+ it 'should change the effective uri of the resource' do
87
+ @resource.get
88
+ @resource.effective_uri.should == 'http://localhost:3000/get'
89
+ end
90
+ end
91
+
92
+ describe 'temporary redirect' do
93
+ before do
94
+ @redirect_code = 302
95
+ @resource = @accessor.resource('http://localhost:3000/redirect/302?http://localhost:3000/get')
96
+ end
97
+
98
+ it_should_behave_like 'redirect'
99
+
100
+ it 'should not change the effective uri of the resource' do
101
+ @resource.get
102
+ @resource.effective_uri.should == 'http://localhost:3000/redirect/302?http://localhost:3000/get'
103
+ end
104
+
105
+ describe '303 See Other' do
106
+ before do
107
+ @redirect_code = 303
108
+ @resource = @accessor.resource('http://localhost:3000/redirect/303?http://localhost:3000/method')
109
+ @resource.on_redirect { true }
110
+ end
111
+
112
+ it 'should GET the redirected resource, regardless of the initial method' do
113
+ resp = @resource.delete
114
+ resp.code.should == 200
115
+ resp.body.should == 'GET'
116
+ end
117
+ end
118
+ end
119
+
120
+ end
121
+
122
+ describe 'caching' do
123
+ before do
124
+ @accessor = Resourceful::HttpAccessor.new(:cache_manager => Resourceful::InMemoryCacheManager.new)
125
+ end
126
+
127
+ it 'should use the cached response' do
128
+ resource = @accessor.resource('http://localhost:3000/get')
129
+ resp = resource.get
130
+ resp.authoritative?.should be_true
131
+
132
+ resp2 = resource.get
133
+ resp2.authoritative?.should be_false
134
+
135
+ resp2.should == resp
136
+ end
137
+
138
+ it 'should not store the representation if the server says not to' do
139
+ resource = @accessor.resource('http://localhost:3000/header?{Vary:%20*}')
140
+ resp = resource.get
141
+ resp.authoritative?.should be_true
142
+ resp.should_not be_cachable
143
+
144
+ resp2 = resource.get
145
+ resp2.should_not == resp
146
+ end
147
+
148
+ it 'should use the cached version of the representation if it has not expired' do
149
+ in_an_hour = (Time.now + (60*60)).httpdate
150
+ uri = URI.escape("http://localhost:3000/header?{Expire: \"#{in_an_hour}\"}")
151
+
152
+ resource = @accessor.resource(uri)
153
+ resp = resource.get
154
+ resp.should be_authoritative
155
+
156
+ resp2 = resource.get
157
+ resp2.should_not be_authoritative
158
+ resp2.should == resp
159
+ end
160
+
161
+ it 'should revalidate the cached response if it has expired' do
162
+ an_hour_ago = (Time.now - (60*60)).httpdate
163
+ uri = URI.escape("http://localhost:3000/header?{Expire: \"#{an_hour_ago}\"}")
164
+
165
+ resource = @accessor.resource(uri)
166
+ resp = resource.get
167
+ resp.should be_authoritative
168
+ resp.should be_expired
169
+
170
+ resp2 = resource.get
171
+ resp2.should be_authoritative
172
+ end
173
+
174
+ it 'should provide the cached version if the server responds with a 304 not modified' do
175
+ in_an_hour = (Time.now + (60*60)).httpdate
176
+ uri = URI.escape("http://localhost:3000/modified?#{in_an_hour}")
177
+
178
+ resource = @accessor.resource(uri)
179
+ resp = resource.get
180
+ resp.should be_authoritative
181
+
182
+ resp2 = resource.get(:cache_control => "max-age=0")
183
+ resp2.should be_authoritative
184
+ resp2.should == resp
185
+ end
186
+
187
+ it 'should not use a cached document for a resource that has been posted to' do
188
+ resource = @accessor.resource('http://localhost:3000/get')
189
+ resp = resource.get
190
+ resp.authoritative?.should be_true
191
+
192
+ resource.post("foo", :content_type => 'text/plain')
193
+
194
+ resp2 = resource.get
195
+ resp2.should_not == resp
196
+ end
197
+
198
+ describe 'Server provided Cache-Control' do
199
+
200
+ it 'should cache anything with "Cache-Control: public"' do
201
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: public}')
202
+ resource = @accessor.resource(uri)
203
+ resp = resource.get
204
+ resp.authoritative?.should be_true
205
+
206
+ resp2 = resource.get
207
+ resp2.authoritative?.should be_false
208
+
209
+ resp2.should == resp
210
+ end
211
+
212
+ it 'should cache anything with "Cache-Control: private"' do
213
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: private}')
214
+ resource = @accessor.resource(uri)
215
+ resp = resource.get
216
+ resp.should be_authoritative
217
+
218
+ resp2 = resource.get
219
+ resp2.should_not be_authoritative
220
+
221
+ resp2.should == resp
222
+ end
223
+
224
+ it 'should cache but revalidate anything with "Cache-Control: no-cache"' do
225
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: no-cache}')
226
+ resource = @accessor.resource(uri)
227
+ resp = resource.get
228
+ resp.authoritative?.should be_true
229
+
230
+ resp2 = resource.get
231
+ resp2.authoritative?.should be_true
232
+ end
233
+
234
+ it 'should revalidate anything that is older than "Cache-Control: max-age" value' do
235
+
236
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: max-age=1, Date: "Mon, 04 Aug 2008 18:00:00 GMT"}')
237
+ resource = @accessor.resource(uri)
238
+ resp = resource.get
239
+ resp.authoritative?.should be_true
240
+
241
+ resp.expired?.should be_true
242
+
243
+ resp2 = resource.get
244
+ resp2.authoritative?.should be_true
245
+ end
246
+
247
+ it 'should cache but revalidate anything with "Cache-Control: must-revalidate"' do
248
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: must-revalidate}')
249
+ resource = @accessor.resource(uri)
250
+ resp = resource.get
251
+ resp.authoritative?.should be_true
252
+
253
+ resp2 = resource.get
254
+ resp2.authoritative?.should be_true
255
+ end
256
+
257
+ it 'should not cache anything with "Cache-Control: no-store"' do
258
+ uri = URI.escape('http://localhost:3000/header?{Cache-Control: no-store}')
259
+ resource = @accessor.resource(uri)
260
+ resp = resource.get
261
+ resp.authoritative?.should be_true
262
+
263
+ resp2 = resource.get
264
+ resp2.authoritative?.should be_true
265
+ end
266
+
267
+
268
+ end
269
+
270
+ describe 'Client provided Cache-Control' do
271
+
272
+ it 'should revalidate anything that is older than "Cache-Control: max-age" value' do
273
+ a_minute_ago = (Time.now - 60).httpdate
274
+ uri = URI.escape("http://localhost:3000/header?{Cache-Control: max-age=120, Date: \"#{a_minute_ago}\"}")
275
+ resource = @accessor.resource(uri)
276
+ resp = resource.get
277
+ resp.authoritative?.should be_true
278
+
279
+ resp.expired?.should be_false
280
+
281
+ resp2 = resource.get({:cache_control => "max-age=1"})
282
+ resp2.authoritative?.should be_true
283
+ end
284
+
285
+ end
286
+
287
+ end
288
+
289
+ describe 'authorization' do
290
+ before do
291
+ @uri = 'http://localhost:3000/auth?basic'
292
+ end
293
+
294
+ it 'should automatically add authorization info to the request if its available'
295
+
296
+ it 'should not authenticate if no auth handlers are set' do
297
+ resource = @accessor.resource(@uri)
298
+ lambda {
299
+ resource.get
300
+ }.should raise_error(Resourceful::UnsuccessfulHttpRequestError)
301
+ end
302
+
303
+ it 'should not authenticate if no valid auth handlers are available' do
304
+ basic_handler = Resourceful::BasicAuthenticator.new('Not Test Auth', 'admin', 'secret')
305
+ @accessor.auth_manager.add_auth_handler(basic_handler)
306
+ resource = @accessor.resource(@uri)
307
+ lambda {
308
+ resource.get
309
+ }.should raise_error(Resourceful::UnsuccessfulHttpRequestError)
310
+ end
311
+
312
+ describe 'basic' do
313
+ before do
314
+ @uri = 'http://localhost:3000/auth?basic'
315
+ end
316
+
317
+ it 'should be able to authenticate basic auth' do
318
+ basic_handler = Resourceful::BasicAuthenticator.new('Test Auth', 'admin', 'secret')
319
+ @accessor.auth_manager.add_auth_handler(basic_handler)
320
+ resource = @accessor.resource(@uri)
321
+ resp = resource.get
322
+
323
+ resp.code.should == 200
324
+ end
325
+
326
+ it 'should not keep trying to authenticate with incorrect credentials' do
327
+ basic_handler = Resourceful::BasicAuthenticator.new('Test Auth', 'admin', 'well-known')
328
+ @accessor.auth_manager.add_auth_handler(basic_handler)
329
+ resource = @accessor.resource(@uri)
330
+
331
+ lambda {
332
+ resource.get
333
+ }.should raise_error(Resourceful::UnsuccessfulHttpRequestError)
334
+ end
335
+
336
+ end
337
+
338
+ describe 'digest' do
339
+ before do
340
+ @uri = 'http://localhost:3000/auth/digest'
341
+ end
342
+
343
+ it 'should be able to authenticate digest auth' do
344
+ pending
345
+ digest_handler = Resourceful::DigestAuthenticator.new('Test Auth', 'admin', 'secret')
346
+ @accessor.auth_manager.add_auth_handler(digest_handler)
347
+ resource = @accessor.resource(@uri)
348
+ resp = resource.get
349
+
350
+ resp.code.should == 200
351
+ end
352
+
353
+ end
354
+
355
+ end
356
+
357
+ describe 'error checking' do
358
+
359
+ it 'should raise InvalidResponse when response code is invalid'
360
+
361
+ describe 'client errors' do
362
+
363
+ it 'should raise when there is one'
364
+
365
+ end
366
+
367
+ describe 'server errors' do
368
+
369
+ it 'should raise when there is one'
370
+
371
+ end
372
+
373
+ end
374
+
375
+ end
376
+
377
+ end
378
+
@@ -0,0 +1,74 @@
1
+
2
+ require 'sinatra'
3
+
4
+ def any(path, opts={}, &blk)
5
+ %w[head get post put delete].each do |verb|
6
+ send verb, path, opts, &blk
7
+ end
8
+ end
9
+
10
+ def set_request_params_as_response_header!
11
+ params.each { |k,v| response[k] = v }
12
+ end
13
+
14
+ def set_request_header_in_body!
15
+ response['Content-Type'] ||= "application/yaml"
16
+ headers = request.env.reject { |k,v| !v.is_a?(String) }
17
+ headers.to_yaml
18
+ end
19
+
20
+ get '/' do
21
+ "Hello, world!"
22
+ end
23
+
24
+ post '/' do
25
+ request.body
26
+ end
27
+
28
+ put '/' do
29
+ request.body
30
+ end
31
+
32
+ delete '/' do
33
+ "Deleted"
34
+ end
35
+
36
+ # Responds with the method used for the request
37
+ any '/method' do
38
+ request.env['REQUEST_METHOD']
39
+ end
40
+
41
+ # Responds with the response code in the url
42
+ any '/code/:code' do
43
+ status params[:code]
44
+ set_request_params_as_response_header!
45
+ set_request_header_in_body!
46
+ end
47
+
48
+ # Sets the response header from the query string, and
49
+ # dumps the request header into the body as yaml for inspection
50
+ any '/header' do
51
+ set_request_params_as_response_header!
52
+ set_request_header_in_body!
53
+ end
54
+
55
+ # Takes a modified=httpdate as a query param, and a If-Modified-Since header,
56
+ # and responds 304 if they're the same
57
+ get '/cached' do
58
+ set_request_params_as_response_header!
59
+ set_request_header_in_body!
60
+
61
+ response['Last-Modified'] = params[:modified]
62
+
63
+ modtime = params[:modified]
64
+ imstime = request.env['HTTP_IF_MODIFIED_SINCE']
65
+
66
+ if modtime && imstime && modtime == imstime
67
+ status 304
68
+ end
69
+ end
70
+
71
+ Sinatra::Default.set(
72
+ :port => 3000
73
+ )
74
+