kjvarga-rack 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/COPYING +18 -0
  2. data/KNOWN-ISSUES.rdoc +18 -0
  3. data/Manifest +117 -0
  4. data/README.rdoc +357 -0
  5. data/Rakefile +164 -0
  6. data/bin/rackup +176 -0
  7. data/contrib/rack_logo.svg +111 -0
  8. data/lib/rack.rb +90 -0
  9. data/lib/rack/adapter/camping.rb +22 -0
  10. data/lib/rack/auth/abstract/handler.rb +37 -0
  11. data/lib/rack/auth/abstract/request.rb +37 -0
  12. data/lib/rack/auth/basic.rb +58 -0
  13. data/lib/rack/auth/digest/md5.rb +124 -0
  14. data/lib/rack/auth/digest/nonce.rb +51 -0
  15. data/lib/rack/auth/digest/params.rb +55 -0
  16. data/lib/rack/auth/digest/request.rb +40 -0
  17. data/lib/rack/auth/openid.rb +487 -0
  18. data/lib/rack/builder.rb +63 -0
  19. data/lib/rack/cascade.rb +41 -0
  20. data/lib/rack/chunked.rb +49 -0
  21. data/lib/rack/commonlogger.rb +52 -0
  22. data/lib/rack/conditionalget.rb +47 -0
  23. data/lib/rack/content_length.rb +29 -0
  24. data/lib/rack/content_type.rb +23 -0
  25. data/lib/rack/deflater.rb +96 -0
  26. data/lib/rack/directory.rb +153 -0
  27. data/lib/rack/file.rb +88 -0
  28. data/lib/rack/handler.rb +69 -0
  29. data/lib/rack/handler/cgi.rb +61 -0
  30. data/lib/rack/handler/evented_mongrel.rb +8 -0
  31. data/lib/rack/handler/fastcgi.rb +88 -0
  32. data/lib/rack/handler/lsws.rb +60 -0
  33. data/lib/rack/handler/mongrel.rb +87 -0
  34. data/lib/rack/handler/scgi.rb +62 -0
  35. data/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  36. data/lib/rack/handler/thin.rb +18 -0
  37. data/lib/rack/handler/webrick.rb +71 -0
  38. data/lib/rack/head.rb +19 -0
  39. data/lib/rack/lint.rb +546 -0
  40. data/lib/rack/lobster.rb +65 -0
  41. data/lib/rack/lock.rb +16 -0
  42. data/lib/rack/methodoverride.rb +27 -0
  43. data/lib/rack/mime.rb +205 -0
  44. data/lib/rack/mock.rb +187 -0
  45. data/lib/rack/recursive.rb +57 -0
  46. data/lib/rack/reloader.rb +109 -0
  47. data/lib/rack/request.rb +248 -0
  48. data/lib/rack/response.rb +183 -0
  49. data/lib/rack/rewindable_input.rb +100 -0
  50. data/lib/rack/session/abstract/id.rb +142 -0
  51. data/lib/rack/session/cookie.rb +91 -0
  52. data/lib/rack/session/memcache.rb +109 -0
  53. data/lib/rack/session/pool.rb +100 -0
  54. data/lib/rack/showexceptions.rb +349 -0
  55. data/lib/rack/showstatus.rb +106 -0
  56. data/lib/rack/static.rb +38 -0
  57. data/lib/rack/urlmap.rb +55 -0
  58. data/lib/rack/utils.rb +528 -0
  59. data/rack.gemspec +140 -0
  60. data/test/cgi/lighttpd.conf +20 -0
  61. data/test/cgi/test +9 -0
  62. data/test/cgi/test.fcgi +8 -0
  63. data/test/cgi/test.ru +7 -0
  64. data/test/multipart/binary +0 -0
  65. data/test/multipart/empty +10 -0
  66. data/test/multipart/file1.txt +1 -0
  67. data/test/multipart/ie +6 -0
  68. data/test/multipart/nested +10 -0
  69. data/test/multipart/none +9 -0
  70. data/test/multipart/text +10 -0
  71. data/test/spec_rack_auth_basic.rb +73 -0
  72. data/test/spec_rack_auth_digest.rb +226 -0
  73. data/test/spec_rack_auth_openid.rb +84 -0
  74. data/test/spec_rack_builder.rb +84 -0
  75. data/test/spec_rack_camping.rb +51 -0
  76. data/test/spec_rack_cascade.rb +48 -0
  77. data/test/spec_rack_cgi.rb +89 -0
  78. data/test/spec_rack_chunked.rb +62 -0
  79. data/test/spec_rack_commonlogger.rb +61 -0
  80. data/test/spec_rack_conditionalget.rb +41 -0
  81. data/test/spec_rack_content_length.rb +43 -0
  82. data/test/spec_rack_content_type.rb +30 -0
  83. data/test/spec_rack_deflater.rb +127 -0
  84. data/test/spec_rack_directory.rb +61 -0
  85. data/test/spec_rack_fastcgi.rb +89 -0
  86. data/test/spec_rack_file.rb +75 -0
  87. data/test/spec_rack_handler.rb +43 -0
  88. data/test/spec_rack_head.rb +30 -0
  89. data/test/spec_rack_lint.rb +521 -0
  90. data/test/spec_rack_lobster.rb +45 -0
  91. data/test/spec_rack_lock.rb +38 -0
  92. data/test/spec_rack_methodoverride.rb +60 -0
  93. data/test/spec_rack_mock.rb +243 -0
  94. data/test/spec_rack_mongrel.rb +189 -0
  95. data/test/spec_rack_recursive.rb +77 -0
  96. data/test/spec_rack_request.rb +504 -0
  97. data/test/spec_rack_response.rb +218 -0
  98. data/test/spec_rack_rewindable_input.rb +118 -0
  99. data/test/spec_rack_session_cookie.rb +82 -0
  100. data/test/spec_rack_session_memcache.rb +250 -0
  101. data/test/spec_rack_session_pool.rb +172 -0
  102. data/test/spec_rack_showexceptions.rb +21 -0
  103. data/test/spec_rack_showstatus.rb +72 -0
  104. data/test/spec_rack_static.rb +37 -0
  105. data/test/spec_rack_thin.rb +91 -0
  106. data/test/spec_rack_urlmap.rb +185 -0
  107. data/test/spec_rack_utils.rb +467 -0
  108. data/test/spec_rack_webrick.rb +130 -0
  109. data/test/testrequest.rb +57 -0
  110. data/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
  111. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
  112. metadata +175 -0
data/COPYING ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2007, 2008, 2009 Christian Neukirchen <purl.org/net/chneukirchen>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/KNOWN-ISSUES.rdoc ADDED
@@ -0,0 +1,18 @@
1
+ = Known issues with Rack and Web servers
2
+
3
+ * Lighttpd sets wrong SCRIPT_NAME and PATH_INFO if you mount your
4
+ FastCGI app at "/". This can be fixed by using this middleware:
5
+
6
+ class LighttpdScriptNameFix
7
+ def initialize(app)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ env["PATH_INFO"] = env["SCRIPT_NAME"].to_s + env["PATH_INFO"].to_s
13
+ env["SCRIPT_NAME"] = ""
14
+ @app.call(env)
15
+ end
16
+ end
17
+
18
+ Of course, use this only when your app runs at "/".
data/Manifest ADDED
@@ -0,0 +1,117 @@
1
+ bin/rackup
2
+ contrib/rack_logo.svg
3
+ COPYING
4
+ KNOWN-ISSUES.rdoc
5
+ lib/rack/adapter/camping.rb
6
+ lib/rack/auth/abstract/handler.rb
7
+ lib/rack/auth/abstract/request.rb
8
+ lib/rack/auth/basic.rb
9
+ lib/rack/auth/digest/md5.rb
10
+ lib/rack/auth/digest/nonce.rb
11
+ lib/rack/auth/digest/params.rb
12
+ lib/rack/auth/digest/request.rb
13
+ lib/rack/auth/openid.rb
14
+ lib/rack/builder.rb
15
+ lib/rack/cascade.rb
16
+ lib/rack/chunked.rb
17
+ lib/rack/commonlogger.rb
18
+ lib/rack/conditionalget.rb
19
+ lib/rack/content_length.rb
20
+ lib/rack/content_type.rb
21
+ lib/rack/deflater.rb
22
+ lib/rack/directory.rb
23
+ lib/rack/file.rb
24
+ lib/rack/handler/cgi.rb
25
+ lib/rack/handler/evented_mongrel.rb
26
+ lib/rack/handler/fastcgi.rb
27
+ lib/rack/handler/lsws.rb
28
+ lib/rack/handler/mongrel.rb
29
+ lib/rack/handler/scgi.rb
30
+ lib/rack/handler/swiftiplied_mongrel.rb
31
+ lib/rack/handler/thin.rb
32
+ lib/rack/handler/webrick.rb
33
+ lib/rack/handler.rb
34
+ lib/rack/head.rb
35
+ lib/rack/lint.rb
36
+ lib/rack/lobster.rb
37
+ lib/rack/lock.rb
38
+ lib/rack/methodoverride.rb
39
+ lib/rack/mime.rb
40
+ lib/rack/mock.rb
41
+ lib/rack/recursive.rb
42
+ lib/rack/reloader.rb
43
+ lib/rack/request.rb
44
+ lib/rack/response.rb
45
+ lib/rack/rewindable_input.rb
46
+ lib/rack/session/abstract
47
+ lib/rack/session/abstract/id.rb
48
+ lib/rack/session/cookie.rb
49
+ lib/rack/session/memcache.rb
50
+ lib/rack/session/pool.rb
51
+ lib/rack/showexceptions.rb
52
+ lib/rack/showstatus.rb
53
+ lib/rack/static.rb
54
+ lib/rack/urlmap.rb
55
+ lib/rack/utils.rb
56
+ lib/rack.rb
57
+ rake.gemspec
58
+ Rakefile
59
+ README.rdoc
60
+ test/cgi
61
+ test/cgi/lighttpd.conf
62
+ test/cgi/test
63
+ test/cgi/test.fcgi
64
+ test/cgi/test.ru
65
+ test/multipart
66
+ test/multipart/binary
67
+ test/multipart/empty
68
+ test/multipart/file1.txt
69
+ test/multipart/ie
70
+ test/multipart/nested
71
+ test/multipart/none
72
+ test/multipart/text
73
+ test/spec_rack_auth_basic.rb
74
+ test/spec_rack_auth_digest.rb
75
+ test/spec_rack_auth_openid.rb
76
+ test/spec_rack_builder.rb
77
+ test/spec_rack_camping.rb
78
+ test/spec_rack_cascade.rb
79
+ test/spec_rack_cgi.rb
80
+ test/spec_rack_chunked.rb
81
+ test/spec_rack_commonlogger.rb
82
+ test/spec_rack_conditionalget.rb
83
+ test/spec_rack_content_length.rb
84
+ test/spec_rack_content_type.rb
85
+ test/spec_rack_deflater.rb
86
+ test/spec_rack_directory.rb
87
+ test/spec_rack_fastcgi.rb
88
+ test/spec_rack_file.rb
89
+ test/spec_rack_handler.rb
90
+ test/spec_rack_head.rb
91
+ test/spec_rack_lint.rb
92
+ test/spec_rack_lobster.rb
93
+ test/spec_rack_lock.rb
94
+ test/spec_rack_methodoverride.rb
95
+ test/spec_rack_mock.rb
96
+ test/spec_rack_mongrel.rb
97
+ test/spec_rack_recursive.rb
98
+ test/spec_rack_request.rb
99
+ test/spec_rack_response.rb
100
+ test/spec_rack_rewindable_input.rb
101
+ test/spec_rack_session_cookie.rb
102
+ test/spec_rack_session_memcache.rb
103
+ test/spec_rack_session_pool.rb
104
+ test/spec_rack_showexceptions.rb
105
+ test/spec_rack_showstatus.rb
106
+ test/spec_rack_static.rb
107
+ test/spec_rack_thin.rb
108
+ test/spec_rack_urlmap.rb
109
+ test/spec_rack_utils.rb
110
+ test/spec_rack_webrick.rb
111
+ test/testrequest.rb
112
+ test/unregistered_handler
113
+ test/unregistered_handler/rack
114
+ test/unregistered_handler/rack/handler
115
+ test/unregistered_handler/rack/handler/unregistered.rb
116
+ test/unregistered_handler/rack/handler/unregistered_long_one.rb
117
+
data/README.rdoc ADDED
@@ -0,0 +1,357 @@
1
+ == Note
2
+
3
+ This fork fixes a bug in Rack 1.0.0 when running Rails over FCGI. The rack/handler/fastcgi.rb file tries to alias a method before it is defined, causing an error. This fixes that issue.
4
+
5
+ = Rack, a modular Ruby webserver interface
6
+
7
+ Rack provides a minimal, modular and adaptable interface for developing
8
+ web applications in Ruby. By wrapping HTTP requests and responses in
9
+ the simplest way possible, it unifies and distills the API for web
10
+ servers, web frameworks, and software in between (the so-called
11
+ middleware) into a single method call.
12
+
13
+ The exact details of this are described in the Rack specification,
14
+ which all Rack applications should conform to.
15
+
16
+ == Specification changes in this release
17
+
18
+ With Rack 1.0, the Rack specification (found in SPEC) changed in the
19
+ following backward-incompatible ways. This was done to properly
20
+ support Ruby 1.9 and to deprecate some problematic techniques:
21
+
22
+ * Rack::VERSION has been pushed to [1,0].
23
+ * Header values must be Strings now, split on "\n".
24
+ * rack.input must be rewindable and support reading into a buffer,
25
+ wrap with Rack::RewindableInput if it isn't.
26
+ * Content-Length can be missing, in this case chunked transfer
27
+ encoding is used.
28
+ * Bodies can now additionally respond to #to_path with a filename to
29
+ be served.
30
+ * String bodies are deprecated and will not work with Ruby 1.9, use an
31
+ Array with a single String instead.
32
+ * rack.session is now specified.
33
+
34
+ == Supported web servers
35
+
36
+ The included *handlers* connect all kinds of web servers to Rack:
37
+ * Mongrel
38
+ * EventedMongrel
39
+ * SwiftipliedMongrel
40
+ * WEBrick
41
+ * FCGI
42
+ * CGI
43
+ * SCGI
44
+ * LiteSpeed
45
+ * Thin
46
+
47
+ These web servers include Rack handlers in their distributions:
48
+ * Ebb
49
+ * Fuzed
50
+ * Phusion Passenger (which is mod_rack for Apache and for nginx)
51
+ * Unicorn
52
+
53
+ Any valid Rack app will run the same on all these handlers, without
54
+ changing anything.
55
+
56
+ == Supported web frameworks
57
+
58
+ The included *adapters* connect Rack with existing Ruby web frameworks:
59
+ * Camping
60
+
61
+ These frameworks include Rack adapters in their distributions:
62
+ * Camping
63
+ * Coset
64
+ * Halcyon
65
+ * Mack
66
+ * Maveric
67
+ * Merb
68
+ * Racktools::SimpleApplication
69
+ * Ramaze
70
+ * Ruby on Rails
71
+ * Rum
72
+ * Sinatra
73
+ * Sin
74
+ * Vintage
75
+ * Waves
76
+ * Wee
77
+
78
+ Current links to these projects can be found at
79
+ http://wiki.ramaze.net/Home#other-frameworks
80
+
81
+ == Available middleware
82
+
83
+ Between the server and the framework, Rack can be customized to your
84
+ applications needs using middleware, for example:
85
+ * Rack::URLMap, to route to multiple applications inside the same process.
86
+ * Rack::CommonLogger, for creating Apache-style logfiles.
87
+ * Rack::ShowException, for catching unhandled exceptions and
88
+ presenting them in a nice and helpful way with clickable backtrace.
89
+ * Rack::File, for serving static files.
90
+ * ...many others!
91
+
92
+ All these components use the same interface, which is described in
93
+ detail in the Rack specification. These optional components can be
94
+ used in any way you wish.
95
+
96
+ == Convenience
97
+
98
+ If you want to develop outside of existing frameworks, implement your
99
+ own ones, or develop middleware, Rack provides many helpers to create
100
+ Rack applications quickly and without doing the same web stuff all
101
+ over:
102
+ * Rack::Request, which also provides query string parsing and
103
+ multipart handling.
104
+ * Rack::Response, for convenient generation of HTTP replies and
105
+ cookie handling.
106
+ * Rack::MockRequest and Rack::MockResponse for efficient and quick
107
+ testing of Rack application without real HTTP round-trips.
108
+
109
+ == rack-contrib
110
+
111
+ The plethora of useful middleware created the need for a project that
112
+ collects fresh Rack middleware. rack-contrib includes a variety of
113
+ add-on components for Rack and it is easy to contribute new modules.
114
+
115
+ * http://github.com/rack/rack-contrib
116
+
117
+ == rackup
118
+
119
+ rackup is a useful tool for running Rack applications, which uses the
120
+ Rack::Builder DSL to configure middleware and build up applications
121
+ easily.
122
+
123
+ rackup automatically figures out the environment it is run in, and
124
+ runs your application as FastCGI, CGI, or standalone with Mongrel or
125
+ WEBrick---all from the same configuration.
126
+
127
+ == Quick start
128
+
129
+ Try the lobster!
130
+
131
+ Either with the embedded WEBrick starter:
132
+
133
+ ruby -Ilib lib/rack/lobster.rb
134
+
135
+ Or with rackup:
136
+
137
+ bin/rackup -Ilib example/lobster.ru
138
+
139
+ By default, the lobster is found at http://localhost:9292.
140
+
141
+ == Installing with RubyGems
142
+
143
+ A Gem of Rack is available. You can install it with:
144
+
145
+ gem install rack
146
+
147
+ I also provide a local mirror of the gems (and development snapshots)
148
+ at my site:
149
+
150
+ gem install rack --source http://chneukirchen.org/releases/gems/
151
+
152
+ == Running the tests
153
+
154
+ Testing Rack requires the test/spec testing framework:
155
+
156
+ gem install test-spec
157
+
158
+ There are two rake-based test tasks:
159
+
160
+ rake test tests all the fast tests (no Handlers or Adapters)
161
+ rake fulltest runs all the tests
162
+
163
+ The fast testsuite has no dependencies outside of the core Ruby
164
+ installation and test-spec.
165
+
166
+ To run the test suite completely, you need:
167
+
168
+ * camping
169
+ * fcgi
170
+ * memcache-client
171
+ * mongrel
172
+ * ruby-openid
173
+ * thin
174
+
175
+ The full set of tests test FCGI access with lighttpd (on port
176
+ 9203) so you will need lighttpd installed as well as the FCGI
177
+ libraries and the fcgi gem:
178
+
179
+ Download and install lighttpd:
180
+
181
+ http://www.lighttpd.net/download
182
+
183
+ Installing the FCGI libraries:
184
+
185
+ curl -O http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
186
+ tar xzvf fcgi-2.4.0.tar.gz
187
+ cd fcgi-2.4.0
188
+ ./configure --prefix=/usr/local
189
+ make
190
+ sudo make install
191
+ cd ..
192
+
193
+ Installing the Ruby fcgi gem:
194
+
195
+ gem install fcgi
196
+
197
+ Furthermore, to test Memcache sessions, you need memcached (will be
198
+ run on port 11211) and memcache-client installed.
199
+
200
+ == History
201
+
202
+ * March 3rd, 2007: First public release 0.1.
203
+
204
+ * May 16th, 2007: Second public release 0.2.
205
+ * HTTP Basic authentication.
206
+ * Cookie Sessions.
207
+ * Static file handler.
208
+ * Improved Rack::Request.
209
+ * Improved Rack::Response.
210
+ * Added Rack::ShowStatus, for better default error messages.
211
+ * Bug fixes in the Camping adapter.
212
+ * Removed Rails adapter, was too alpha.
213
+
214
+ * February 26th, 2008: Third public release 0.3.
215
+ * LiteSpeed handler, by Adrian Madrid.
216
+ * SCGI handler, by Jeremy Evans.
217
+ * Pool sessions, by blink.
218
+ * OpenID authentication, by blink.
219
+ * :Port and :File options for opening FastCGI sockets, by blink.
220
+ * Last-Modified HTTP header for Rack::File, by blink.
221
+ * Rack::Builder#use now accepts blocks, by Corey Jewett.
222
+ (See example/protectedlobster.ru)
223
+ * HTTP status 201 can contain a Content-Type and a body now.
224
+ * Many bugfixes, especially related to Cookie handling.
225
+
226
+ * August 21st, 2008: Fourth public release 0.4.
227
+ * New middleware, Rack::Deflater, by Christoffer Sawicki.
228
+ * OpenID authentication now needs ruby-openid 2.
229
+ * New Memcache sessions, by blink.
230
+ * Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
231
+ * Rack::Reloader is not loaded in rackup development mode.
232
+ * rackup can daemonize with -D.
233
+ * Many bugfixes, especially for pool sessions, URLMap, thread safety
234
+ and tempfile handling.
235
+ * Improved tests.
236
+ * Rack moved to Git.
237
+
238
+ * January 6th, 2009: Fifth public release 0.9.
239
+ * Rack is now managed by the Rack Core Team.
240
+ * Rack::Lint is stricter and follows the HTTP RFCs more closely.
241
+ * Added ConditionalGet middleware.
242
+ * Added ContentLength middleware.
243
+ * Added Deflater middleware.
244
+ * Added Head middleware.
245
+ * Added MethodOverride middleware.
246
+ * Rack::Mime now provides popular MIME-types and their extension.
247
+ * Mongrel Header now streams.
248
+ * Added Thin handler.
249
+ * Official support for swiftiplied Mongrel.
250
+ * Secure cookies.
251
+ * Made HeaderHash case-preserving.
252
+ * Many bugfixes and small improvements.
253
+
254
+ * January 9th, 2009: Sixth public release 0.9.1.
255
+ * Fix directory traversal exploits in Rack::File and Rack::Directory.
256
+
257
+ * April 25th, 2009: Seventh public release 1.0.0.
258
+ * SPEC change: Rack::VERSION has been pushed to [1,0].
259
+ * SPEC change: header values must be Strings now, split on "\n".
260
+ * SPEC change: Content-Length can be missing, in this case chunked transfer
261
+ encoding is used.
262
+ * SPEC change: rack.input must be rewindable and support reading into
263
+ a buffer, wrap with Rack::RewindableInput if it isn't.
264
+ * SPEC change: rack.session is now specified.
265
+ * SPEC change: Bodies can now additionally respond to #to_path with
266
+ a filename to be served.
267
+ * NOTE: String bodies break in 1.9, use an Array consisting of a
268
+ single String instead.
269
+ * New middleware Rack::Lock.
270
+ * New middleware Rack::ContentType.
271
+ * Rack::Reloader has been rewritten.
272
+ * Major update to Rack::Auth::OpenID.
273
+ * Support for nested parameter parsing in Rack::Response.
274
+ * Support for redirects in Rack::Response.
275
+ * HttpOnly cookie support in Rack::Response.
276
+ * The Rakefile has been rewritten.
277
+ * Many bugfixes and small improvements.
278
+
279
+ == Contact
280
+
281
+ Please mail bugs, suggestions and patches to
282
+ <mailto:rack-devel@googlegroups.com>.
283
+
284
+ Mailing list archives are available at
285
+ <http://groups.google.com/group/rack-devel>.
286
+
287
+ There is a bug tracker at <http://rack.lighthouseapp.com/>.
288
+
289
+ Git repository (send Git patches to the mailing list):
290
+ * http://github.com/rack/rack
291
+ * http://git.vuxu.org/cgi-bin/gitweb.cgi?p=rack.git
292
+
293
+ You are also welcome to join the #rack channel on irc.freenode.net.
294
+
295
+ == Thanks
296
+
297
+ The Rack Core Team, consisting of
298
+
299
+ * Christian Neukirchen (chneukirchen)
300
+ * James Tucker (raggi)
301
+ * Josh Peek (josh)
302
+ * Michael Fellinger (manveru)
303
+ * Ryan Tomayko (rtomayko)
304
+ * Scytrin dai Kinthra (scytrin)
305
+
306
+ would like to thank:
307
+
308
+ * Adrian Madrid, for the LiteSpeed handler.
309
+ * Christoffer Sawicki, for the first Rails adapter and Rack::Deflater.
310
+ * Tim Fletcher, for the HTTP authentication code.
311
+ * Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
312
+ * Armin Ronacher, for the logo and racktools.
313
+ * Aredridel, Ben Alpert, Dan Kubb, Daniel Roethlisberger, Matt Todd,
314
+ Tom Robinson, Phil Hagelberg, and S. Brent Faulkner for bug fixing
315
+ and other improvements.
316
+ * Brian Candler, for Rack::ContentType.
317
+ * Graham Batty, for improved handler loading.
318
+ * Stephen Bannasch, for bug reports and documentation.
319
+ * Gary Wright, for proposing a better Rack::Response interface.
320
+ * Jonathan Buch, for improvements regarding Rack::Response.
321
+ * Armin Röhrl, for tracking down bugs in the Cookie generator.
322
+ * Alexander Kellett for testing the Gem and reviewing the announcement.
323
+ * Marcus Rückert, for help with configuring and debugging lighttpd.
324
+ * The WSGI team for the well-done and documented work they've done and
325
+ Rack builds up on.
326
+ * All bug reporters and patch contributers not mentioned above.
327
+
328
+ == Copyright
329
+
330
+ Copyright (C) 2007, 2008, 2009 Christian Neukirchen <http://purl.org/net/chneukirchen>
331
+
332
+ Permission is hereby granted, free of charge, to any person obtaining a copy
333
+ of this software and associated documentation files (the "Software"), to
334
+ deal in the Software without restriction, including without limitation the
335
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
336
+ sell copies of the Software, and to permit persons to whom the Software is
337
+ furnished to do so, subject to the following conditions:
338
+
339
+ The above copyright notice and this permission notice shall be included in
340
+ all copies or substantial portions of the Software.
341
+
342
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
343
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
344
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
345
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
346
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
347
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
348
+
349
+ == Links
350
+
351
+ Rack:: <http://rack.rubyforge.org/>
352
+ Rack's Rubyforge project:: <http://rubyforge.org/projects/rack>
353
+ Official Rack repositories:: <http://github.com/rack>
354
+ rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
355
+
356
+ Christian Neukirchen:: <http://chneukirchen.org/>
357
+