rack 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rack might be problematic. Click here for more details.
- data/COPYING +1 -1
- data/KNOWN-ISSUES +3 -0
- data/RDOX +0 -428
- data/README +61 -26
- data/SPEC +8 -1
- data/bin/rackup +2 -174
- data/lib/rack.rb +10 -8
- data/lib/rack/builder.rb +17 -0
- data/lib/rack/cascade.rb +17 -12
- data/lib/rack/chunked.rb +2 -2
- data/lib/rack/commonlogger.rb +31 -43
- data/lib/rack/config.rb +15 -0
- data/lib/rack/content_type.rb +1 -1
- data/lib/rack/directory.rb +6 -2
- data/lib/rack/etag.rb +23 -0
- data/lib/rack/file.rb +4 -2
- data/lib/rack/handler.rb +19 -0
- data/lib/rack/handler/cgi.rb +1 -1
- data/lib/rack/handler/fastcgi.rb +2 -3
- data/lib/rack/handler/lsws.rb +4 -1
- data/lib/rack/handler/mongrel.rb +8 -5
- data/lib/rack/handler/scgi.rb +4 -4
- data/lib/rack/handler/webrick.rb +2 -4
- data/lib/rack/lint.rb +44 -15
- data/lib/rack/logger.rb +20 -0
- data/lib/rack/mime.rb +3 -1
- data/lib/rack/mock.rb +30 -4
- data/lib/rack/nulllogger.rb +18 -0
- data/lib/rack/reloader.rb +4 -1
- data/lib/rack/request.rb +40 -15
- data/lib/rack/response.rb +5 -39
- data/lib/rack/runtime.rb +27 -0
- data/lib/rack/sendfile.rb +142 -0
- data/lib/rack/server.rb +212 -0
- data/lib/rack/session/abstract/id.rb +3 -5
- data/lib/rack/session/cookie.rb +3 -4
- data/lib/rack/session/memcache.rb +53 -43
- data/lib/rack/session/pool.rb +1 -1
- data/lib/rack/urlmap.rb +9 -8
- data/lib/rack/utils.rb +230 -11
- data/rack.gemspec +33 -49
- data/test/spec_rack_cascade.rb +3 -5
- data/test/spec_rack_cgi.rb +3 -3
- data/test/spec_rack_commonlogger.rb +39 -10
- data/test/spec_rack_config.rb +24 -0
- data/test/spec_rack_directory.rb +1 -1
- data/test/spec_rack_etag.rb +17 -0
- data/test/spec_rack_fastcgi.rb +2 -2
- data/test/spec_rack_file.rb +1 -1
- data/test/spec_rack_lint.rb +26 -19
- data/test/spec_rack_logger.rb +21 -0
- data/test/spec_rack_mock.rb +87 -1
- data/test/spec_rack_mongrel.rb +4 -4
- data/test/spec_rack_nulllogger.rb +13 -0
- data/test/spec_rack_request.rb +47 -6
- data/test/spec_rack_response.rb +3 -0
- data/test/spec_rack_runtime.rb +35 -0
- data/test/spec_rack_sendfile.rb +86 -0
- data/test/spec_rack_session_cookie.rb +1 -10
- data/test/spec_rack_session_memcache.rb +53 -20
- data/test/spec_rack_urlmap.rb +30 -0
- data/test/spec_rack_utils.rb +171 -6
- data/test/spec_rack_webrick.rb +4 -4
- data/test/spec_rackup.rb +154 -0
- metadata +37 -79
- data/Rakefile +0 -164
- data/lib/rack/auth/openid.rb +0 -480
- data/test/cgi/lighttpd.conf +0 -20
- data/test/cgi/test +0 -9
- data/test/cgi/test.fcgi +0 -8
- data/test/cgi/test.ru +0 -7
- data/test/multipart/binary +0 -0
- data/test/multipart/empty +0 -10
- data/test/multipart/ie +0 -6
- data/test/multipart/nested +0 -10
- data/test/multipart/none +0 -9
- data/test/multipart/semicolon +0 -6
- data/test/multipart/text +0 -10
- data/test/spec_rack_auth_openid.rb +0 -84
- data/test/testrequest.rb +0 -57
- data/test/unregistered_handler/rack/handler/unregistered.rb +0 -7
- data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +0 -7
data/COPYING
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2007, 2008, 2009 Christian Neukirchen <purl.org/net/chneukirchen>
|
1
|
+
Copyright (c) 2007, 2008, 2009, 2010 Christian Neukirchen <purl.org/net/chneukirchen>
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
4
|
of this software and associated documentation files (the "Software"), to
|
data/KNOWN-ISSUES
CHANGED
data/RDOX
CHANGED
@@ -1,428 +0,0 @@
|
|
1
|
-
|
2
|
-
== Rack::Auth::Basic
|
3
|
-
* should challenge correctly when no credentials are specified
|
4
|
-
* should rechallenge if incorrect credentials are specified
|
5
|
-
* should return application output if correct credentials are specified
|
6
|
-
* should return 400 Bad Request if different auth scheme used
|
7
|
-
* realm as optional constructor arg
|
8
|
-
|
9
|
-
== Rack::Auth::Digest::MD5
|
10
|
-
* should challenge when no credentials are specified
|
11
|
-
* should return application output if correct credentials given
|
12
|
-
* should return application output if correct credentials given (hashed passwords)
|
13
|
-
* should rechallenge if incorrect username given
|
14
|
-
* should rechallenge if incorrect password given
|
15
|
-
* should rechallenge with stale parameter if nonce is stale
|
16
|
-
* should return 400 Bad Request if incorrect qop given
|
17
|
-
* should return 400 Bad Request if incorrect uri given
|
18
|
-
* should return 400 Bad Request if different auth scheme used
|
19
|
-
* should not require credentials for unprotected path
|
20
|
-
* should challenge when no credentials are specified for protected path
|
21
|
-
* should return application output if correct credentials given for protected path
|
22
|
-
* should return application output if correct credentials given for POST
|
23
|
-
* should return application output if correct credentials given for PUT (using method override of POST)
|
24
|
-
* realm as optional constructor arg
|
25
|
-
|
26
|
-
== Rack::Auth::OpenID
|
27
|
-
* realm uri should be valid
|
28
|
-
* should be able to check if a uri is within the realm (empty)
|
29
|
-
* return_to should be valid
|
30
|
-
* extensions should have required constants defined
|
31
|
-
* extensions should have Request and Response defined and inherit from OpenID::Extension
|
32
|
-
|
33
|
-
== Rack::Builder
|
34
|
-
* chains apps by default
|
35
|
-
* has implicit #to_app
|
36
|
-
* supports blocks on use
|
37
|
-
* has explicit #to_app
|
38
|
-
* apps are initialized once
|
39
|
-
|
40
|
-
== Rack::Adapter::Camping
|
41
|
-
* works with GET
|
42
|
-
* works with POST
|
43
|
-
|
44
|
-
== Rack::Cascade
|
45
|
-
* should dispatch onward on 404 by default
|
46
|
-
* should dispatch onward on whatever is passed
|
47
|
-
* should fail if empty
|
48
|
-
* should append new app
|
49
|
-
|
50
|
-
== Rack::Handler::CGI
|
51
|
-
* startup (empty)
|
52
|
-
* should respond
|
53
|
-
* should be a lighttpd
|
54
|
-
* should have rack headers
|
55
|
-
* should have CGI headers on GET
|
56
|
-
* should have CGI headers on POST
|
57
|
-
* should support HTTP auth
|
58
|
-
* should set status
|
59
|
-
* shutdown
|
60
|
-
|
61
|
-
== Rack::Chunked
|
62
|
-
* chunks responses with no Content-Length
|
63
|
-
* chunks empty bodies properly
|
64
|
-
* does not modify response when Content-Length header present
|
65
|
-
* does not modify response when client is HTTP/1.0
|
66
|
-
* does not modify response when Transfer-Encoding header already present
|
67
|
-
* does not modify response when status code is 100
|
68
|
-
* does not modify response when status code is 204
|
69
|
-
* does not modify response when status code is 304
|
70
|
-
|
71
|
-
== Rack::CommonLogger
|
72
|
-
* should log to rack.errors by default
|
73
|
-
* should log to anything with <<
|
74
|
-
|
75
|
-
== Rack::ConditionalGet
|
76
|
-
* should set a 304 status and truncate body when If-Modified-Since hits
|
77
|
-
* should set a 304 status and truncate body when If-None-Match hits
|
78
|
-
* should not affect non-GET/HEAD requests
|
79
|
-
|
80
|
-
== Rack::ContentLength
|
81
|
-
* sets Content-Length on String bodies if none is set
|
82
|
-
* sets Content-Length on Array bodies if none is set
|
83
|
-
* does not set Content-Length on variable length bodies
|
84
|
-
* does not change Content-Length if it is already set
|
85
|
-
* does not set Content-Length on 304 responses
|
86
|
-
* does not set Content-Length when Transfer-Encoding is chunked
|
87
|
-
|
88
|
-
== Rack::ContentType
|
89
|
-
* sets Content-Type to default text/html if none is set
|
90
|
-
* sets Content-Type to chosen default if none is set
|
91
|
-
* does not change Content-Type if it is already set
|
92
|
-
* case insensitive detection of Content-Type
|
93
|
-
|
94
|
-
== Rack::Deflater
|
95
|
-
* should be able to deflate bodies that respond to each
|
96
|
-
* should be able to deflate String bodies
|
97
|
-
* should be able to gzip bodies that respond to each
|
98
|
-
* should be able to fallback to no deflation
|
99
|
-
* should be able to skip when there is no response entity body
|
100
|
-
* should handle the lack of an acceptable encoding
|
101
|
-
* should handle gzip response with Last-Modified header
|
102
|
-
* should do nothing when no-transform Cache-Control directive present
|
103
|
-
|
104
|
-
== Rack::Directory
|
105
|
-
* serves directory indices
|
106
|
-
* passes to app if file found
|
107
|
-
* serves uri with URL encoded filenames
|
108
|
-
* does not allow directory traversal
|
109
|
-
* 404s if it can't find the file
|
110
|
-
|
111
|
-
== Rack::Handler::FastCGI
|
112
|
-
* startup (empty)
|
113
|
-
* should respond
|
114
|
-
* should be a lighttpd
|
115
|
-
* should have rack headers
|
116
|
-
* should have CGI headers on GET
|
117
|
-
* should have CGI headers on POST
|
118
|
-
* should support HTTP auth
|
119
|
-
* should set status
|
120
|
-
* shutdown
|
121
|
-
|
122
|
-
== Rack::File
|
123
|
-
* serves files
|
124
|
-
* sets Last-Modified header
|
125
|
-
* serves files with URL encoded filenames
|
126
|
-
* does not allow directory traversal
|
127
|
-
* does not allow directory traversal with encoded periods
|
128
|
-
* 404s if it can't find the file
|
129
|
-
* detects SystemCallErrors
|
130
|
-
* returns bodies that respond to #to_path
|
131
|
-
|
132
|
-
== Rack::Handler
|
133
|
-
* has registered default handlers
|
134
|
-
* handler that doesn't exist should raise a NameError
|
135
|
-
* should get unregistered, but already required, handler by name
|
136
|
-
* should register custom handler
|
137
|
-
* should not need registration for properly coded handlers even if not already required
|
138
|
-
|
139
|
-
== Rack::Head
|
140
|
-
* response (empty)
|
141
|
-
* passes GET, POST, PUT, DELETE, OPTIONS, TRACE requests
|
142
|
-
* removes body from HEAD requests
|
143
|
-
|
144
|
-
== Rack::Lint
|
145
|
-
* passes valid request
|
146
|
-
* notices fatal errors
|
147
|
-
* notices environment errors
|
148
|
-
* notices input errors
|
149
|
-
* notices error errors
|
150
|
-
* notices status errors
|
151
|
-
* notices header errors
|
152
|
-
* notices content-type errors
|
153
|
-
* notices content-length errors
|
154
|
-
* notices body errors
|
155
|
-
* notices input handling errors
|
156
|
-
* notices error handling errors
|
157
|
-
* notices HEAD errors
|
158
|
-
* passes valid read calls
|
159
|
-
|
160
|
-
== Rack::Lint::InputWrapper
|
161
|
-
* delegates :size to underlying IO object
|
162
|
-
* delegates :rewind to underlying IO object
|
163
|
-
|
164
|
-
== Rack::Lobster::LambdaLobster
|
165
|
-
* should be a single lambda
|
166
|
-
* should look like a lobster
|
167
|
-
* should be flippable
|
168
|
-
|
169
|
-
== Rack::Lobster
|
170
|
-
* should look like a lobster
|
171
|
-
* should be flippable
|
172
|
-
* should provide crashing for testing purposes
|
173
|
-
|
174
|
-
== Rack::Lock
|
175
|
-
* should call synchronize on lock
|
176
|
-
* should set multithread flag to false
|
177
|
-
* should reset original multithread flag when exiting lock
|
178
|
-
|
179
|
-
== Rack::MethodOverride
|
180
|
-
* should not affect GET requests
|
181
|
-
* _method parameter should modify REQUEST_METHOD for POST requests
|
182
|
-
* X-HTTP-Method-Override header should modify REQUEST_METHOD for POST requests
|
183
|
-
* should not modify REQUEST_METHOD if the method is unknown
|
184
|
-
* should not modify REQUEST_METHOD when _method is nil
|
185
|
-
* should store the original REQUEST_METHOD prior to overriding
|
186
|
-
|
187
|
-
== Rack::MockRequest
|
188
|
-
* should return a MockResponse
|
189
|
-
* should be able to only return the environment
|
190
|
-
* should provide sensible defaults
|
191
|
-
* should allow GET/POST/PUT/DELETE
|
192
|
-
* should set content length
|
193
|
-
* should allow posting
|
194
|
-
* should use all parts of an URL
|
195
|
-
* should behave valid according to the Rack spec
|
196
|
-
|
197
|
-
== Rack::MockResponse
|
198
|
-
* should provide access to the HTTP status
|
199
|
-
* should provide access to the HTTP headers
|
200
|
-
* should provide access to the HTTP body
|
201
|
-
* should provide access to the Rack errors
|
202
|
-
* should optionally make Rack errors fatal
|
203
|
-
|
204
|
-
== Rack::Handler::Mongrel
|
205
|
-
* should respond
|
206
|
-
* should be a Mongrel
|
207
|
-
* should have rack headers
|
208
|
-
* should have CGI headers on GET
|
209
|
-
* should have CGI headers on POST
|
210
|
-
* should support HTTP auth
|
211
|
-
* should set status
|
212
|
-
* should provide a .run
|
213
|
-
* should provide a .run that maps a hash
|
214
|
-
* should provide a .run that maps a urlmap
|
215
|
-
* should provide a .run that maps a urlmap restricting by host
|
216
|
-
* should stream #each part of the response
|
217
|
-
|
218
|
-
== Rack::Recursive
|
219
|
-
* should allow for subrequests
|
220
|
-
* should raise error on requests not below the app
|
221
|
-
* should support forwarding
|
222
|
-
|
223
|
-
== Rack::Request
|
224
|
-
* wraps the rack variables
|
225
|
-
* can figure out the correct host
|
226
|
-
* can parse the query string
|
227
|
-
* can parse POST data
|
228
|
-
* can parse POST data with explicit content type
|
229
|
-
* does not parse POST data when media type is not form-data
|
230
|
-
* rewinds input after parsing POST data
|
231
|
-
* cleans up Safari's ajax POST body
|
232
|
-
* can get value by key from params with #[]
|
233
|
-
* can set value to key on params with #[]=
|
234
|
-
* values_at answers values by keys in order given
|
235
|
-
* referrer should be extracted correct
|
236
|
-
* can cache, but invalidates the cache
|
237
|
-
* can figure out if called via XHR
|
238
|
-
* can parse cookies
|
239
|
-
* parses cookies according to RFC 2109
|
240
|
-
* provides setters
|
241
|
-
* provides the original env
|
242
|
-
* can restore the URL
|
243
|
-
* can restore the full path
|
244
|
-
* can handle multiple media type parameters
|
245
|
-
* can parse multipart form data
|
246
|
-
* can parse big multipart form data
|
247
|
-
* can detect invalid multipart form data
|
248
|
-
* shouldn't try to interpret binary as utf8
|
249
|
-
* should work around buggy 1.8.* Tempfile equality
|
250
|
-
* does conform to the Rack spec
|
251
|
-
* should parse Accept-Encoding correctly
|
252
|
-
* should provide ip information
|
253
|
-
* should allow subclass request to be instantiated after parent request
|
254
|
-
* should allow parent request to be instantiated after subclass request
|
255
|
-
|
256
|
-
== Rack::Response
|
257
|
-
* has sensible default values
|
258
|
-
* can be written to
|
259
|
-
* can set and read headers
|
260
|
-
* can set cookies
|
261
|
-
* formats the Cookie expiration date accordingly to RFC 2109
|
262
|
-
* can set secure cookies
|
263
|
-
* can set http only cookies
|
264
|
-
* can delete cookies
|
265
|
-
* can do redirects
|
266
|
-
* has a useful constructor
|
267
|
-
* has a constructor that can take a block
|
268
|
-
* doesn't return invalid responses
|
269
|
-
* knows if it's empty
|
270
|
-
* should provide access to the HTTP status
|
271
|
-
* should provide access to the HTTP headers
|
272
|
-
* does not add or change Content-Length when #finish()ing
|
273
|
-
* updates Content-Length when body appended to using #write
|
274
|
-
|
275
|
-
== Rack::RewindableInput
|
276
|
-
=== given an IO object that is already rewindable
|
277
|
-
* should be able to handle to read()
|
278
|
-
* should be able to handle to read(nil)
|
279
|
-
* should be able to handle to read(length)
|
280
|
-
* should be able to handle to read(length, buffer)
|
281
|
-
* should be able to handle to read(nil, buffer)
|
282
|
-
* should rewind to the beginning when #rewind is called
|
283
|
-
* should be able to handle gets
|
284
|
-
* should be able to handle each
|
285
|
-
* should not buffer into a Tempfile if no data has been read yet
|
286
|
-
* should buffer into a Tempfile when data has been consumed for the first time
|
287
|
-
* should close the underlying tempfile upon calling #close
|
288
|
-
* should be possibel to call #close when no data has been buffered yet (empty)
|
289
|
-
* should be possible to call #close multiple times (empty)
|
290
|
-
=== given an IO object that is not rewindable
|
291
|
-
* should be able to handle to read()
|
292
|
-
* should be able to handle to read(nil)
|
293
|
-
* should be able to handle to read(length)
|
294
|
-
* should be able to handle to read(length, buffer)
|
295
|
-
* should be able to handle to read(nil, buffer)
|
296
|
-
* should rewind to the beginning when #rewind is called
|
297
|
-
* should be able to handle gets
|
298
|
-
* should be able to handle each
|
299
|
-
* should not buffer into a Tempfile if no data has been read yet
|
300
|
-
* should buffer into a Tempfile when data has been consumed for the first time
|
301
|
-
* should close the underlying tempfile upon calling #close
|
302
|
-
* should be possibel to call #close when no data has been buffered yet (empty)
|
303
|
-
* should be possible to call #close multiple times (empty)
|
304
|
-
=== given an IO object whose rewind method raises Errno::ESPIPE
|
305
|
-
* should be able to handle to read()
|
306
|
-
* should be able to handle to read(nil)
|
307
|
-
* should be able to handle to read(length)
|
308
|
-
* should be able to handle to read(length, buffer)
|
309
|
-
* should be able to handle to read(nil, buffer)
|
310
|
-
* should rewind to the beginning when #rewind is called
|
311
|
-
* should be able to handle gets
|
312
|
-
* should be able to handle each
|
313
|
-
* should not buffer into a Tempfile if no data has been read yet
|
314
|
-
* should buffer into a Tempfile when data has been consumed for the first time
|
315
|
-
* should close the underlying tempfile upon calling #close
|
316
|
-
* should be possibel to call #close when no data has been buffered yet (empty)
|
317
|
-
* should be possible to call #close multiple times (empty)
|
318
|
-
|
319
|
-
== Rack::Session::Cookie
|
320
|
-
* creates a new cookie
|
321
|
-
* loads from a cookie
|
322
|
-
* survives broken cookies
|
323
|
-
* barks on too big cookies
|
324
|
-
* creates a new cookie with integrity hash
|
325
|
-
* loads from a cookie wih integrity hash
|
326
|
-
* ignores tampered with session cookies
|
327
|
-
|
328
|
-
== Rack::Session::Memcache
|
329
|
-
* MemCache can connect to existing server (empty)
|
330
|
-
* faults on no connection
|
331
|
-
* creates a new cookie
|
332
|
-
* determines session from a cookie
|
333
|
-
* survives nonexistant cookies
|
334
|
-
* maintains freshness
|
335
|
-
* deletes cookies with :drop option
|
336
|
-
* provides new session id with :renew option
|
337
|
-
* omits cookie with :defer option
|
338
|
-
* multithread: should cleanly merge sessions (empty)
|
339
|
-
|
340
|
-
== Rack::Session::Pool
|
341
|
-
* creates a new cookie
|
342
|
-
* determines session from a cookie
|
343
|
-
* survives nonexistant cookies
|
344
|
-
* deletes cookies with :drop option
|
345
|
-
* provides new session id with :renew option
|
346
|
-
* omits cookie with :defer option
|
347
|
-
* multithread: should merge sessions (empty)
|
348
|
-
|
349
|
-
== Rack::ShowExceptions
|
350
|
-
* catches exceptions
|
351
|
-
|
352
|
-
== Rack::ShowStatus
|
353
|
-
* should provide a default status message
|
354
|
-
* should let the app provide additional information
|
355
|
-
* should not replace existing messages
|
356
|
-
* should pass on original headers
|
357
|
-
* should replace existing messages if there is detail
|
358
|
-
|
359
|
-
== Rack::Static
|
360
|
-
* serves files
|
361
|
-
* 404s if url root is known but it can't find the file
|
362
|
-
* calls down the chain if url root is not known
|
363
|
-
|
364
|
-
== Rack::Handler::Thin
|
365
|
-
* should respond
|
366
|
-
* should be a Thin
|
367
|
-
* should have rack headers
|
368
|
-
* should have CGI headers on GET
|
369
|
-
* should have CGI headers on POST
|
370
|
-
* should support HTTP auth
|
371
|
-
* should set status
|
372
|
-
|
373
|
-
== Rack::URLMap
|
374
|
-
* dispatches paths correctly
|
375
|
-
* dispatches hosts correctly
|
376
|
-
* should be nestable
|
377
|
-
* should route root apps correctly
|
378
|
-
|
379
|
-
== Rack::Utils
|
380
|
-
* should escape correctly
|
381
|
-
* should escape correctly for multibyte characters
|
382
|
-
* should unescape correctly
|
383
|
-
* should parse query strings correctly
|
384
|
-
* should parse nested query strings correctly
|
385
|
-
* should build query strings correctly
|
386
|
-
* should figure out which encodings are acceptable
|
387
|
-
* should return the bytesize of String
|
388
|
-
|
389
|
-
== Rack::Utils::HeaderHash
|
390
|
-
* should retain header case
|
391
|
-
* should check existence of keys case insensitively
|
392
|
-
* should merge case-insensitively
|
393
|
-
* should overwrite case insensitively and assume the new key's case
|
394
|
-
* should be converted to real Hash
|
395
|
-
* should convert Array values to Strings when converting to Hash
|
396
|
-
* should be able to delete the given key case-sensitively
|
397
|
-
* should be able to delete the given key case-insensitively
|
398
|
-
* should return the deleted value when #delete is called on an existing key
|
399
|
-
* should return nil when #delete is called on a non-existant key
|
400
|
-
|
401
|
-
== Rack::Utils::Context
|
402
|
-
* should set context correctly
|
403
|
-
* should alter app on recontexting
|
404
|
-
* should run different apps
|
405
|
-
|
406
|
-
== Rack::Utils::Multipart
|
407
|
-
* should return nil if content type is not multipart
|
408
|
-
* should parse multipart upload with text file
|
409
|
-
* should parse multipart upload with nested parameters
|
410
|
-
* should parse multipart upload with binary file
|
411
|
-
* should parse multipart upload with empty file
|
412
|
-
* should parse multipart upload with filename with semicolons
|
413
|
-
* should not include file params if no file was selected
|
414
|
-
* should parse IE multipart upload and clean up filename
|
415
|
-
* rewinds input after parsing upload
|
416
|
-
|
417
|
-
== Rack::Handler::WEBrick
|
418
|
-
* should respond
|
419
|
-
* should be a WEBrick
|
420
|
-
* should have rack headers
|
421
|
-
* should have CGI headers on GET
|
422
|
-
* should have CGI headers on POST
|
423
|
-
* should support HTTP auth
|
424
|
-
* should set status
|
425
|
-
* should correctly set cookies
|
426
|
-
* should provide a .run
|
427
|
-
|
428
|
-
335 specifications, 13 empty (1196 requirements), 0 failures
|
data/README
CHANGED
@@ -11,21 +11,13 @@ which all Rack applications should conform to.
|
|
11
11
|
|
12
12
|
== Specification changes in this release
|
13
13
|
|
14
|
-
With Rack 1.
|
15
|
-
following backward-incompatible ways.
|
16
|
-
|
17
|
-
|
18
|
-
*
|
19
|
-
*
|
20
|
-
* rack.input
|
21
|
-
wrap with Rack::RewindableInput if it isn't.
|
22
|
-
* Content-Length can be missing, in this case chunked transfer
|
23
|
-
encoding is used.
|
24
|
-
* Bodies can now additionally respond to #to_path with a filename to
|
25
|
-
be served.
|
26
|
-
* String bodies are deprecated and will not work with Ruby 1.9, use an
|
27
|
-
Array with a single String instead.
|
28
|
-
* rack.session is now specified.
|
14
|
+
With Rack 1.1, the Rack specification (found in SPEC) changed in the
|
15
|
+
following backward-incompatible ways.
|
16
|
+
|
17
|
+
* Rack::VERSION has been pushed to [1,1].
|
18
|
+
* rack.logger is now specified.
|
19
|
+
* The SPEC now allows subclasses of the required types.
|
20
|
+
* rack.input has to be opened in binary mode.
|
29
21
|
|
30
22
|
== Supported web servers
|
31
23
|
|
@@ -43,8 +35,11 @@ The included *handlers* connect all kinds of web servers to Rack:
|
|
43
35
|
These web servers include Rack handlers in their distributions:
|
44
36
|
* Ebb
|
45
37
|
* Fuzed
|
38
|
+
* Glassfish v3
|
46
39
|
* Phusion Passenger (which is mod_rack for Apache and for nginx)
|
40
|
+
* Rainbows!
|
47
41
|
* Unicorn
|
42
|
+
* Zbatery
|
48
43
|
|
49
44
|
Any valid Rack app will run the same on all these handlers, without
|
50
45
|
changing anything.
|
@@ -70,6 +65,7 @@ These frameworks include Rack adapters in their distributions:
|
|
70
65
|
* Vintage
|
71
66
|
* Waves
|
72
67
|
* Wee
|
68
|
+
* ... and many others.
|
73
69
|
|
74
70
|
Current links to these projects can be found at
|
75
71
|
http://wiki.ramaze.net/Home#other-frameworks
|
@@ -130,13 +126,13 @@ Either with the embedded WEBrick starter:
|
|
130
126
|
|
131
127
|
Or with rackup:
|
132
128
|
|
133
|
-
bin/rackup -Ilib example/lobster.ru
|
129
|
+
bin/rackup -Ilib example/lobster.ru
|
134
130
|
|
135
131
|
By default, the lobster is found at http://localhost:9292.
|
136
132
|
|
137
133
|
== Installing with RubyGems
|
138
134
|
|
139
|
-
A Gem of Rack is available. You can install it with:
|
135
|
+
A Gem of Rack is available at gemcutter.org. You can install it with:
|
140
136
|
|
141
137
|
gem install rack
|
142
138
|
|
@@ -165,7 +161,6 @@ To run the test suite completely, you need:
|
|
165
161
|
* fcgi
|
166
162
|
* memcache-client
|
167
163
|
* mongrel
|
168
|
-
* ruby-openid
|
169
164
|
* thin
|
170
165
|
|
171
166
|
The full set of tests test FCGI access with lighttpd (on port
|
@@ -283,16 +278,49 @@ run on port 11211) and memcache-client installed.
|
|
283
278
|
* Make sure WEBrick respects the :Host option
|
284
279
|
* Many Ruby 1.9 fixes.
|
285
280
|
|
281
|
+
* January 3rd, 2009: Ninth public release 1.1.0.
|
282
|
+
* Moved Auth::OpenID to rack-contrib.
|
283
|
+
* SPEC change that relaxes Lint slightly to allow subclasses of the
|
284
|
+
required types
|
285
|
+
* SPEC change to document rack.input binary mode in greator detail
|
286
|
+
* SPEC define optional rack.logger specification
|
287
|
+
* File servers support X-Cascade header
|
288
|
+
* Imported Config middleware
|
289
|
+
* Imported ETag middleware
|
290
|
+
* Imported Runtime middleware
|
291
|
+
* Imported Sendfile middleware
|
292
|
+
* New Logger and NullLogger middlewares
|
293
|
+
* Added mime type for .ogv and .manifest.
|
294
|
+
* Don't squeeze PATH_INFO slashes
|
295
|
+
* Use Content-Type to determine POST params parsing
|
296
|
+
* Update Rack::Utils::HTTP_STATUS_CODES hash
|
297
|
+
* Add status code lookup utility
|
298
|
+
* Response should call #to_i on the status
|
299
|
+
* Add Request#user_agent
|
300
|
+
* Request#host knows about forwared host
|
301
|
+
* Return an empty string for Request#host if HTTP_HOST and
|
302
|
+
SERVER_NAME are both missing
|
303
|
+
* Allow MockRequest to accept hash params
|
304
|
+
* Optimizations to HeaderHash
|
305
|
+
* Refactored rackup into Rack::Server
|
306
|
+
* Added Utils.build_nested_query to complement Utils.parse_nested_query
|
307
|
+
* Added Utils::Multipart.build_multipart to complement
|
308
|
+
Utils::Multipart.parse_multipart
|
309
|
+
* Extracted set and delete cookie helpers into Utils so they can be
|
310
|
+
used outside Response
|
311
|
+
* Extract parse_query and parse_multipart in Request so subclasses
|
312
|
+
can change their behavior
|
313
|
+
* Enforce binary encoding in RewindableInput
|
314
|
+
* Set correct external_encoding for handlers that don't use RewindableInput
|
315
|
+
|
286
316
|
== Contact
|
287
317
|
|
288
|
-
Please
|
289
|
-
<
|
318
|
+
Please post bugs, suggestions and patches to
|
319
|
+
the bug tracker at <http://rack.lighthouseapp.com/>.
|
290
320
|
|
291
321
|
Mailing list archives are available at
|
292
322
|
<http://groups.google.com/group/rack-devel>.
|
293
323
|
|
294
|
-
There is a bug tracker at <http://rack.lighthouseapp.com/>.
|
295
|
-
|
296
324
|
Git repository (send Git patches to the mailing list):
|
297
325
|
* http://github.com/rack/rack
|
298
326
|
* http://git.vuxu.org/cgi-bin/gitweb.cgi?p=rack.git
|
@@ -318,8 +346,14 @@ would like to thank:
|
|
318
346
|
* Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
|
319
347
|
* Armin Ronacher, for the logo and racktools.
|
320
348
|
* Aredridel, Ben Alpert, Dan Kubb, Daniel Roethlisberger, Matt Todd,
|
321
|
-
Tom Robinson, Phil Hagelberg,
|
322
|
-
|
349
|
+
Tom Robinson, Phil Hagelberg, S. Brent Faulkner, Bosko Milekic,
|
350
|
+
Daniel Rodríguez Troitiño, Genki Takiuchi, Geoffrey Grosenbach,
|
351
|
+
Julien Sanchez, Kamal Fariz Mahyuddin, Masayoshi Takahashi, Patrick
|
352
|
+
Aljordm, Mig, and Kazuhiro Nishiyama for bug fixing and other
|
353
|
+
improvements.
|
354
|
+
* Eric Wong, Hongli Lai, Jeremy Kemper for their continuous support
|
355
|
+
and API improvements.
|
356
|
+
* Yehuda Katz and Carl Lerche for refactoring rackup.
|
323
357
|
* Brian Candler, for Rack::ContentType.
|
324
358
|
* Graham Batty, for improved handler loading.
|
325
359
|
* Stephen Bannasch, for bug reports and documentation.
|
@@ -334,7 +368,7 @@ would like to thank:
|
|
334
368
|
|
335
369
|
== Copyright
|
336
370
|
|
337
|
-
Copyright (C) 2007, 2008, 2009 Christian Neukirchen <http://purl.org/net/chneukirchen>
|
371
|
+
Copyright (C) 2007, 2008, 2009, 2010 Christian Neukirchen <http://purl.org/net/chneukirchen>
|
338
372
|
|
339
373
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
340
374
|
of this software and associated documentation files (the "Software"), to
|
@@ -349,7 +383,7 @@ all copies or substantial portions of the Software.
|
|
349
383
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
350
384
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
351
385
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
352
|
-
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
386
|
+
THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
353
387
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
354
388
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
355
389
|
|
@@ -358,6 +392,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
358
392
|
Rack:: <http://rack.rubyforge.org/>
|
359
393
|
Rack's Rubyforge project:: <http://rubyforge.org/projects/rack>
|
360
394
|
Official Rack repositories:: <http://github.com/rack>
|
395
|
+
Rack Lighthouse Bug Tracking:: <http://rack.lighthouseapp.com/>
|
361
396
|
rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
|
362
397
|
|
363
398
|
Christian Neukirchen:: <http://chneukirchen.org/>
|