edgar-rack 1.2.1

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 (138) hide show
  1. data/COPYING +18 -0
  2. data/KNOWN-ISSUES +21 -0
  3. data/README +401 -0
  4. data/Rakefile +101 -0
  5. data/SPEC +171 -0
  6. data/bin/rackup +4 -0
  7. data/contrib/rack_logo.svg +111 -0
  8. data/example/lobster.ru +4 -0
  9. data/example/protectedlobster.rb +14 -0
  10. data/example/protectedlobster.ru +8 -0
  11. data/lib/rack.rb +81 -0
  12. data/lib/rack/auth/abstract/handler.rb +37 -0
  13. data/lib/rack/auth/abstract/request.rb +43 -0
  14. data/lib/rack/auth/basic.rb +58 -0
  15. data/lib/rack/auth/digest/md5.rb +124 -0
  16. data/lib/rack/auth/digest/nonce.rb +51 -0
  17. data/lib/rack/auth/digest/params.rb +53 -0
  18. data/lib/rack/auth/digest/request.rb +40 -0
  19. data/lib/rack/builder.rb +80 -0
  20. data/lib/rack/cascade.rb +41 -0
  21. data/lib/rack/chunked.rb +52 -0
  22. data/lib/rack/commonlogger.rb +49 -0
  23. data/lib/rack/conditionalget.rb +63 -0
  24. data/lib/rack/config.rb +15 -0
  25. data/lib/rack/content_length.rb +29 -0
  26. data/lib/rack/content_type.rb +23 -0
  27. data/lib/rack/deflater.rb +96 -0
  28. data/lib/rack/directory.rb +157 -0
  29. data/lib/rack/etag.rb +59 -0
  30. data/lib/rack/file.rb +118 -0
  31. data/lib/rack/handler.rb +88 -0
  32. data/lib/rack/handler/cgi.rb +61 -0
  33. data/lib/rack/handler/evented_mongrel.rb +8 -0
  34. data/lib/rack/handler/fastcgi.rb +90 -0
  35. data/lib/rack/handler/lsws.rb +61 -0
  36. data/lib/rack/handler/mongrel.rb +90 -0
  37. data/lib/rack/handler/scgi.rb +59 -0
  38. data/lib/rack/handler/swiftiplied_mongrel.rb +8 -0
  39. data/lib/rack/handler/thin.rb +17 -0
  40. data/lib/rack/handler/webrick.rb +73 -0
  41. data/lib/rack/head.rb +19 -0
  42. data/lib/rack/lint.rb +567 -0
  43. data/lib/rack/lobster.rb +65 -0
  44. data/lib/rack/lock.rb +44 -0
  45. data/lib/rack/logger.rb +18 -0
  46. data/lib/rack/methodoverride.rb +27 -0
  47. data/lib/rack/mime.rb +210 -0
  48. data/lib/rack/mock.rb +185 -0
  49. data/lib/rack/nulllogger.rb +18 -0
  50. data/lib/rack/recursive.rb +61 -0
  51. data/lib/rack/reloader.rb +109 -0
  52. data/lib/rack/request.rb +307 -0
  53. data/lib/rack/response.rb +151 -0
  54. data/lib/rack/rewindable_input.rb +104 -0
  55. data/lib/rack/runtime.rb +27 -0
  56. data/lib/rack/sendfile.rb +139 -0
  57. data/lib/rack/server.rb +289 -0
  58. data/lib/rack/session/abstract/id.rb +348 -0
  59. data/lib/rack/session/cookie.rb +152 -0
  60. data/lib/rack/session/memcache.rb +93 -0
  61. data/lib/rack/session/pool.rb +79 -0
  62. data/lib/rack/showexceptions.rb +378 -0
  63. data/lib/rack/showstatus.rb +113 -0
  64. data/lib/rack/static.rb +53 -0
  65. data/lib/rack/urlmap.rb +55 -0
  66. data/lib/rack/utils.rb +698 -0
  67. data/rack.gemspec +39 -0
  68. data/test/cgi/lighttpd.conf +25 -0
  69. data/test/cgi/rackup_stub.rb +6 -0
  70. data/test/cgi/sample_rackup.ru +5 -0
  71. data/test/cgi/test +9 -0
  72. data/test/cgi/test.fcgi +8 -0
  73. data/test/cgi/test.ru +5 -0
  74. data/test/gemloader.rb +6 -0
  75. data/test/multipart/bad_robots +259 -0
  76. data/test/multipart/binary +0 -0
  77. data/test/multipart/empty +10 -0
  78. data/test/multipart/fail_16384_nofile +814 -0
  79. data/test/multipart/file1.txt +1 -0
  80. data/test/multipart/filename_and_modification_param +7 -0
  81. data/test/multipart/filename_with_escaped_quotes +6 -0
  82. data/test/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
  83. data/test/multipart/filename_with_percent_escaped_quotes +6 -0
  84. data/test/multipart/filename_with_unescaped_quotes +6 -0
  85. data/test/multipart/ie +6 -0
  86. data/test/multipart/nested +10 -0
  87. data/test/multipart/none +9 -0
  88. data/test/multipart/semicolon +6 -0
  89. data/test/multipart/text +15 -0
  90. data/test/rackup/config.ru +31 -0
  91. data/test/spec_auth_basic.rb +70 -0
  92. data/test/spec_auth_digest.rb +241 -0
  93. data/test/spec_builder.rb +123 -0
  94. data/test/spec_cascade.rb +45 -0
  95. data/test/spec_cgi.rb +102 -0
  96. data/test/spec_chunked.rb +60 -0
  97. data/test/spec_commonlogger.rb +56 -0
  98. data/test/spec_conditionalget.rb +86 -0
  99. data/test/spec_config.rb +23 -0
  100. data/test/spec_content_length.rb +36 -0
  101. data/test/spec_content_type.rb +29 -0
  102. data/test/spec_deflater.rb +125 -0
  103. data/test/spec_directory.rb +57 -0
  104. data/test/spec_etag.rb +75 -0
  105. data/test/spec_fastcgi.rb +107 -0
  106. data/test/spec_file.rb +92 -0
  107. data/test/spec_handler.rb +49 -0
  108. data/test/spec_head.rb +30 -0
  109. data/test/spec_lint.rb +515 -0
  110. data/test/spec_lobster.rb +43 -0
  111. data/test/spec_lock.rb +142 -0
  112. data/test/spec_logger.rb +28 -0
  113. data/test/spec_methodoverride.rb +58 -0
  114. data/test/spec_mock.rb +241 -0
  115. data/test/spec_mongrel.rb +182 -0
  116. data/test/spec_nulllogger.rb +12 -0
  117. data/test/spec_recursive.rb +69 -0
  118. data/test/spec_request.rb +774 -0
  119. data/test/spec_response.rb +245 -0
  120. data/test/spec_rewindable_input.rb +118 -0
  121. data/test/spec_runtime.rb +39 -0
  122. data/test/spec_sendfile.rb +83 -0
  123. data/test/spec_server.rb +8 -0
  124. data/test/spec_session_abstract_id.rb +43 -0
  125. data/test/spec_session_cookie.rb +171 -0
  126. data/test/spec_session_memcache.rb +289 -0
  127. data/test/spec_session_pool.rb +200 -0
  128. data/test/spec_showexceptions.rb +87 -0
  129. data/test/spec_showstatus.rb +79 -0
  130. data/test/spec_static.rb +48 -0
  131. data/test/spec_thin.rb +86 -0
  132. data/test/spec_urlmap.rb +213 -0
  133. data/test/spec_utils.rb +678 -0
  134. data/test/spec_webrick.rb +141 -0
  135. data/test/testrequest.rb +78 -0
  136. data/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
  137. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
  138. metadata +329 -0
data/COPYING ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2007, 2008, 2009, 2010 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.
@@ -0,0 +1,21 @@
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 "/".
19
+
20
+ Since lighttpd 1.4.23, you also can use the "fix-root-scriptname" flag
21
+ in fastcgi.server.
data/README ADDED
@@ -0,0 +1,401 @@
1
+ = Rack, a modular Ruby webserver interface
2
+
3
+ Rack provides a minimal, modular and adaptable interface for developing
4
+ web applications in Ruby. By wrapping HTTP requests and responses in
5
+ the simplest way possible, it unifies and distills the API for web
6
+ servers, web frameworks, and software in between (the so-called
7
+ middleware) into a single method call.
8
+
9
+ The exact details of this are described in the Rack specification,
10
+ which all Rack applications should conform to.
11
+
12
+ == Supported web servers
13
+
14
+ The included *handlers* connect all kinds of web servers to Rack:
15
+ * Mongrel
16
+ * EventedMongrel
17
+ * SwiftipliedMongrel
18
+ * WEBrick
19
+ * FCGI
20
+ * CGI
21
+ * SCGI
22
+ * LiteSpeed
23
+ * Thin
24
+
25
+ These web servers include Rack handlers in their distributions:
26
+ * Ebb
27
+ * Fuzed
28
+ * Glassfish v3
29
+ * Phusion Passenger (which is mod_rack for Apache and for nginx)
30
+ * Rainbows!
31
+ * Unicorn
32
+ * Zbatery
33
+
34
+ Any valid Rack app will run the same on all these handlers, without
35
+ changing anything.
36
+
37
+ == Supported web frameworks
38
+
39
+ These frameworks include Rack adapters in their distributions:
40
+ * Camping
41
+ * Coset
42
+ * Halcyon
43
+ * Mack
44
+ * Maveric
45
+ * Merb
46
+ * Racktools::SimpleApplication
47
+ * Ramaze
48
+ * Ruby on Rails
49
+ * Rum
50
+ * Sinatra
51
+ * Sin
52
+ * Vintage
53
+ * Waves
54
+ * Wee
55
+ * ... and many others.
56
+
57
+ Current links to these projects can be found at
58
+ http://wiki.ramaze.net/Home#other-frameworks
59
+
60
+ == Available middleware
61
+
62
+ Between the server and the framework, Rack can be customized to your
63
+ applications needs using middleware, for example:
64
+ * Rack::URLMap, to route to multiple applications inside the same process.
65
+ * Rack::CommonLogger, for creating Apache-style logfiles.
66
+ * Rack::ShowException, for catching unhandled exceptions and
67
+ presenting them in a nice and helpful way with clickable backtrace.
68
+ * Rack::File, for serving static files.
69
+ * ...many others!
70
+
71
+ All these components use the same interface, which is described in
72
+ detail in the Rack specification. These optional components can be
73
+ used in any way you wish.
74
+
75
+ == Convenience
76
+
77
+ If you want to develop outside of existing frameworks, implement your
78
+ own ones, or develop middleware, Rack provides many helpers to create
79
+ Rack applications quickly and without doing the same web stuff all
80
+ over:
81
+ * Rack::Request, which also provides query string parsing and
82
+ multipart handling.
83
+ * Rack::Response, for convenient generation of HTTP replies and
84
+ cookie handling.
85
+ * Rack::MockRequest and Rack::MockResponse for efficient and quick
86
+ testing of Rack application without real HTTP round-trips.
87
+
88
+ == rack-contrib
89
+
90
+ The plethora of useful middleware created the need for a project that
91
+ collects fresh Rack middleware. rack-contrib includes a variety of
92
+ add-on components for Rack and it is easy to contribute new modules.
93
+
94
+ * http://github.com/rack/rack-contrib
95
+
96
+ == rackup
97
+
98
+ rackup is a useful tool for running Rack applications, which uses the
99
+ Rack::Builder DSL to configure middleware and build up applications
100
+ easily.
101
+
102
+ rackup automatically figures out the environment it is run in, and
103
+ runs your application as FastCGI, CGI, or standalone with Mongrel or
104
+ WEBrick---all from the same configuration.
105
+
106
+ == Quick start
107
+
108
+ Try the lobster!
109
+
110
+ Either with the embedded WEBrick starter:
111
+
112
+ ruby -Ilib lib/rack/lobster.rb
113
+
114
+ Or with rackup:
115
+
116
+ bin/rackup -Ilib example/lobster.ru
117
+
118
+ By default, the lobster is found at http://localhost:9292.
119
+
120
+ == Installing with RubyGems
121
+
122
+ A Gem of Rack is available at gemcutter.org. You can install it with:
123
+
124
+ gem install rack
125
+
126
+ I also provide a local mirror of the gems (and development snapshots)
127
+ at my site:
128
+
129
+ gem install rack --source http://chneukirchen.org/releases/gems/
130
+
131
+ == Running the tests
132
+
133
+ Testing Rack requires the bacon testing framework:
134
+
135
+ gem install bacon
136
+
137
+ There are two rake-based test tasks:
138
+
139
+ rake test tests all the fast tests (no Handlers or Adapters)
140
+ rake fulltest runs all the tests
141
+
142
+ The fast testsuite has no dependencies outside of the core Ruby
143
+ installation and bacon.
144
+
145
+ To run the test suite completely, you need:
146
+
147
+ * fcgi
148
+ * memcache-client
149
+ * mongrel
150
+ * thin
151
+
152
+ The full set of tests test FCGI access with lighttpd (on port
153
+ 9203) so you will need lighttpd installed as well as the FCGI
154
+ libraries and the fcgi gem:
155
+
156
+ Download and install lighttpd:
157
+
158
+ http://www.lighttpd.net/download
159
+
160
+ Installing the FCGI libraries:
161
+
162
+ curl -O http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
163
+ tar xzvf fcgi-2.4.0.tar.gz
164
+ cd fcgi-2.4.0
165
+ ./configure --prefix=/usr/local
166
+ make
167
+ sudo make install
168
+ cd ..
169
+
170
+ Installing the Ruby fcgi gem:
171
+
172
+ gem install fcgi
173
+
174
+ Furthermore, to test Memcache sessions, you need memcached (will be
175
+ run on port 11211) and memcache-client installed.
176
+
177
+ == History
178
+
179
+ * March 3rd, 2007: First public release 0.1.
180
+
181
+ * May 16th, 2007: Second public release 0.2.
182
+ * HTTP Basic authentication.
183
+ * Cookie Sessions.
184
+ * Static file handler.
185
+ * Improved Rack::Request.
186
+ * Improved Rack::Response.
187
+ * Added Rack::ShowStatus, for better default error messages.
188
+ * Bug fixes in the Camping adapter.
189
+ * Removed Rails adapter, was too alpha.
190
+
191
+ * February 26th, 2008: Third public release 0.3.
192
+ * LiteSpeed handler, by Adrian Madrid.
193
+ * SCGI handler, by Jeremy Evans.
194
+ * Pool sessions, by blink.
195
+ * OpenID authentication, by blink.
196
+ * :Port and :File options for opening FastCGI sockets, by blink.
197
+ * Last-Modified HTTP header for Rack::File, by blink.
198
+ * Rack::Builder#use now accepts blocks, by Corey Jewett.
199
+ (See example/protectedlobster.ru)
200
+ * HTTP status 201 can contain a Content-Type and a body now.
201
+ * Many bugfixes, especially related to Cookie handling.
202
+
203
+ * August 21st, 2008: Fourth public release 0.4.
204
+ * New middleware, Rack::Deflater, by Christoffer Sawicki.
205
+ * OpenID authentication now needs ruby-openid 2.
206
+ * New Memcache sessions, by blink.
207
+ * Explicit EventedMongrel handler, by Joshua Peek <josh@joshpeek.com>
208
+ * Rack::Reloader is not loaded in rackup development mode.
209
+ * rackup can daemonize with -D.
210
+ * Many bugfixes, especially for pool sessions, URLMap, thread safety
211
+ and tempfile handling.
212
+ * Improved tests.
213
+ * Rack moved to Git.
214
+
215
+ * January 6th, 2009: Fifth public release 0.9.
216
+ * Rack is now managed by the Rack Core Team.
217
+ * Rack::Lint is stricter and follows the HTTP RFCs more closely.
218
+ * Added ConditionalGet middleware.
219
+ * Added ContentLength middleware.
220
+ * Added Deflater middleware.
221
+ * Added Head middleware.
222
+ * Added MethodOverride middleware.
223
+ * Rack::Mime now provides popular MIME-types and their extension.
224
+ * Mongrel Header now streams.
225
+ * Added Thin handler.
226
+ * Official support for swiftiplied Mongrel.
227
+ * Secure cookies.
228
+ * Made HeaderHash case-preserving.
229
+ * Many bugfixes and small improvements.
230
+
231
+ * January 9th, 2009: Sixth public release 0.9.1.
232
+ * Fix directory traversal exploits in Rack::File and Rack::Directory.
233
+
234
+ * April 25th, 2009: Seventh public release 1.0.0.
235
+ * SPEC change: Rack::VERSION has been pushed to [1,0].
236
+ * SPEC change: header values must be Strings now, split on "\n".
237
+ * SPEC change: Content-Length can be missing, in this case chunked transfer
238
+ encoding is used.
239
+ * SPEC change: rack.input must be rewindable and support reading into
240
+ a buffer, wrap with Rack::RewindableInput if it isn't.
241
+ * SPEC change: rack.session is now specified.
242
+ * SPEC change: Bodies can now additionally respond to #to_path with
243
+ a filename to be served.
244
+ * NOTE: String bodies break in 1.9, use an Array consisting of a
245
+ single String instead.
246
+ * New middleware Rack::Lock.
247
+ * New middleware Rack::ContentType.
248
+ * Rack::Reloader has been rewritten.
249
+ * Major update to Rack::Auth::OpenID.
250
+ * Support for nested parameter parsing in Rack::Response.
251
+ * Support for redirects in Rack::Response.
252
+ * HttpOnly cookie support in Rack::Response.
253
+ * The Rakefile has been rewritten.
254
+ * Many bugfixes and small improvements.
255
+
256
+ * October 18th, 2009: Eighth public release 1.0.1.
257
+ * Bump remainder of rack.versions.
258
+ * Support the pure Ruby FCGI implementation.
259
+ * Fix for form names containing "=": split first then unescape components
260
+ * Fixes the handling of the filename parameter with semicolons in names.
261
+ * Add anchor to nested params parsing regexp to prevent stack overflows
262
+ * Use more compatible gzip write api instead of "<<".
263
+ * Make sure that Reloader doesn't break when executed via ruby -e
264
+ * Make sure WEBrick respects the :Host option
265
+ * Many Ruby 1.9 fixes.
266
+
267
+ * January 3rd, 2010: Ninth public release 1.1.0.
268
+ * Moved Auth::OpenID to rack-contrib.
269
+ * SPEC change that relaxes Lint slightly to allow subclasses of the
270
+ required types
271
+ * SPEC change to document rack.input binary mode in greator detail
272
+ * SPEC define optional rack.logger specification
273
+ * File servers support X-Cascade header
274
+ * Imported Config middleware
275
+ * Imported ETag middleware
276
+ * Imported Runtime middleware
277
+ * Imported Sendfile middleware
278
+ * New Logger and NullLogger middlewares
279
+ * Added mime type for .ogv and .manifest.
280
+ * Don't squeeze PATH_INFO slashes
281
+ * Use Content-Type to determine POST params parsing
282
+ * Update Rack::Utils::HTTP_STATUS_CODES hash
283
+ * Add status code lookup utility
284
+ * Response should call #to_i on the status
285
+ * Add Request#user_agent
286
+ * Request#host knows about forwared host
287
+ * Return an empty string for Request#host if HTTP_HOST and
288
+ SERVER_NAME are both missing
289
+ * Allow MockRequest to accept hash params
290
+ * Optimizations to HeaderHash
291
+ * Refactored rackup into Rack::Server
292
+ * Added Utils.build_nested_query to complement Utils.parse_nested_query
293
+ * Added Utils::Multipart.build_multipart to complement
294
+ Utils::Multipart.parse_multipart
295
+ * Extracted set and delete cookie helpers into Utils so they can be
296
+ used outside Response
297
+ * Extract parse_query and parse_multipart in Request so subclasses
298
+ can change their behavior
299
+ * Enforce binary encoding in RewindableInput
300
+ * Set correct external_encoding for handlers that don't use RewindableInput
301
+
302
+ * June 13th, 2010: Tenth public release 1.2.0.
303
+ * Removed Camping adapter: Camping 2.0 supports Rack as-is
304
+ * Removed parsing of quoted values
305
+ * Add Request.trace? and Request.options?
306
+ * Add mime-type for .webm and .htc
307
+ * Fix HTTP_X_FORWARDED_FOR
308
+ * Various multipart fixes
309
+ * Switch test suite to bacon
310
+
311
+ * June 15th, 2010: Eleventh public release 1.2.1.
312
+ * Make CGI handler rewindable
313
+ * Rename spec/ to test/ to not conflict with SPEC on lesser
314
+ operating systems
315
+
316
+ == Contact
317
+
318
+ Please post bugs, suggestions and patches to
319
+ the bug tracker at <http://github.com/rack/rack/issues>.
320
+
321
+ Mailing list archives are available at
322
+ <http://groups.google.com/group/rack-devel>.
323
+
324
+ Git repository (send Git patches to the mailing list):
325
+ * http://github.com/rack/rack
326
+ * http://git.vuxu.org/cgi-bin/gitweb.cgi?p=rack-github.git
327
+
328
+ You are also welcome to join the #rack channel on irc.freenode.net.
329
+
330
+ == Thanks
331
+
332
+ The Rack Core Team, consisting of
333
+
334
+ * Christian Neukirchen (chneukirchen)
335
+ * James Tucker (raggi)
336
+ * Josh Peek (josh)
337
+ * Michael Fellinger (manveru)
338
+ * Ryan Tomayko (rtomayko)
339
+ * Scytrin dai Kinthra (scytrin)
340
+
341
+ would like to thank:
342
+
343
+ * Adrian Madrid, for the LiteSpeed handler.
344
+ * Christoffer Sawicki, for the first Rails adapter and Rack::Deflater.
345
+ * Tim Fletcher, for the HTTP authentication code.
346
+ * Luc Heinrich for the Cookie sessions, the static file handler and bugfixes.
347
+ * Armin Ronacher, for the logo and racktools.
348
+ * Alex Beregszaszi, Alexander Kahn, Anil Wadghule, Aredridel, Ben
349
+ Alpert, Dan Kubb, Daniel Roethlisberger, Matt Todd, Tom Robinson,
350
+ Phil Hagelberg, S. Brent Faulkner, Bosko Milekic, Daniel Rodríguez
351
+ Troitiño, Genki Takiuchi, Geoffrey Grosenbach, Julien Sanchez, Kamal
352
+ Fariz Mahyuddin, Masayoshi Takahashi, Patrick Aljordm, Mig, Kazuhiro
353
+ Nishiyama, Jon Bardin, Konstantin Haase, Larry Siden, Matias
354
+ Korhonen, Sam Ruby, Simon Chiang, Tim Connor, Timur Batyrshin, and
355
+ Zach Brock for bug fixing and other improvements.
356
+ * Eric Wong, Hongli Lai, Jeremy Kemper for their continuous support
357
+ and API improvements.
358
+ * Yehuda Katz and Carl Lerche for refactoring rackup.
359
+ * Brian Candler, for Rack::ContentType.
360
+ * Graham Batty, for improved handler loading.
361
+ * Stephen Bannasch, for bug reports and documentation.
362
+ * Gary Wright, for proposing a better Rack::Response interface.
363
+ * Jonathan Buch, for improvements regarding Rack::Response.
364
+ * Armin Röhrl, for tracking down bugs in the Cookie generator.
365
+ * Alexander Kellett for testing the Gem and reviewing the announcement.
366
+ * Marcus Rückert, for help with configuring and debugging lighttpd.
367
+ * The WSGI team for the well-done and documented work they've done and
368
+ Rack builds up on.
369
+ * All bug reporters and patch contributers not mentioned above.
370
+
371
+ == Copyright
372
+
373
+ Copyright (C) 2007, 2008, 2009, 2010 Christian Neukirchen <http://purl.org/net/chneukirchen>
374
+
375
+ Permission is hereby granted, free of charge, to any person obtaining a copy
376
+ of this software and associated documentation files (the "Software"), to
377
+ deal in the Software without restriction, including without limitation the
378
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
379
+ sell copies of the Software, and to permit persons to whom the Software is
380
+ furnished to do so, subject to the following conditions:
381
+
382
+ The above copyright notice and this permission notice shall be included in
383
+ all copies or substantial portions of the Software.
384
+
385
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
386
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
387
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
388
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
389
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
390
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
391
+
392
+ == Links
393
+
394
+ Rack:: <http://rack.rubyforge.org/>
395
+ Rack's Rubyforge project:: <http://rubyforge.org/projects/rack>
396
+ Official Rack repositories:: <http://github.com/rack>
397
+ Rack Lighthouse Bug Tracking:: <http://rack.lighthouseapp.com/>
398
+ rack-devel mailing list:: <http://groups.google.com/group/rack-devel>
399
+
400
+ Christian Neukirchen:: <http://chneukirchen.org/>
401
+
@@ -0,0 +1,101 @@
1
+ # Rakefile for Rack. -*-ruby-*-
2
+ require 'rake/rdoctask'
3
+
4
+ desc "Run all the tests"
5
+ task :default => [:test]
6
+
7
+ desc "Make an archive as .tar.gz"
8
+ task :dist => [:chmod, :changelog, :rdoc, "SPEC"] do
9
+ sh "git archive --format=tar --prefix=#{release}/ HEAD^{tree} >#{release}.tar"
10
+ sh "pax -waf #{release}.tar -s ':^:#{release}/:' SPEC ChangeLog doc rack.gemspec"
11
+ sh "gzip -f -9 #{release}.tar"
12
+ end
13
+
14
+ desc "Make an official release"
15
+ task :officialrelease do
16
+ puts "Official build for #{release}..."
17
+ sh "rm -rf stage"
18
+ sh "git clone --shared . stage"
19
+ sh "cd stage && rake officialrelease_really"
20
+ sh "mv stage/#{release}.tar.gz stage/#{release}.gem ."
21
+ end
22
+
23
+ task :officialrelease_really => ["SPEC", :dist, :gem] do
24
+ sh "sha1sum #{release}.tar.gz #{release}.gem"
25
+ end
26
+
27
+ def release
28
+ "rack-#{File.read("rack.gemspec")[/s.version *= *"(.*?)"/, 1]}"
29
+ end
30
+
31
+ desc "Make binaries executable"
32
+ task :chmod do
33
+ Dir["bin/*"].each { |binary| File.chmod(0775, binary) }
34
+ Dir["test/cgi/test*"].each { |binary| File.chmod(0775, binary) }
35
+ end
36
+
37
+ desc "Generate a ChangeLog"
38
+ task :changelog do
39
+ File.open("ChangeLog", "w") { |out|
40
+ `git log -z`.split("\0").map { |chunk|
41
+ author = chunk[/Author: (.*)/, 1].strip
42
+ date = chunk[/Date: (.*)/, 1].strip
43
+ desc, detail = $'.strip.split("\n", 2)
44
+ detail ||= ""
45
+ detail = detail.gsub(/.*darcs-hash:.*/, '')
46
+ detail.rstrip!
47
+ out.puts "#{date} #{author}"
48
+ out.puts " * #{desc.strip}"
49
+ out.puts detail unless detail.empty?
50
+ out.puts
51
+ }
52
+ }
53
+ end
54
+
55
+
56
+ file 'lib/rack/lint.rb'
57
+ desc "Generate Rack Specification"
58
+ file "SPEC" => 'lib/rack/lint.rb' do
59
+ File.open("SPEC", "wb") { |file|
60
+ IO.foreach("lib/rack/lint.rb") { |line|
61
+ if line =~ /## (.*)/
62
+ file.puts $1
63
+ end
64
+ }
65
+ }
66
+ end
67
+
68
+ desc "Run all the fast tests"
69
+ task :test => 'SPEC' do
70
+ opts = ENV['TEST'] || '-a'
71
+ specopts = ENV['TESTOPTS'] ||
72
+ "-q -t '^(?!Rack::Adapter|Rack::Session::Memcache|rackup)'"
73
+
74
+ sh "bacon -I./lib:./test -w #{opts} #{specopts}"
75
+ end
76
+
77
+ desc "Run all the tests"
78
+ task :fulltest => %w[SPEC chmod] do
79
+ opts = ENV['TEST'] || '-a'
80
+ specopts = ENV['TESTOPTS'] || '-q'
81
+ sh "bacon -rtest/gemloader -I./lib:./test -w #{opts} #{specopts}"
82
+ end
83
+
84
+ task :gem => ["SPEC"] do
85
+ sh "gem build rack.gemspec"
86
+ end
87
+
88
+ desc "Generate RDoc documentation"
89
+ task :rdoc => ["SPEC"] do
90
+ sh(*%w{rdoc --line-numbers --main README
91
+ --title 'Rack\ Documentation' --charset utf-8 -U -o doc} +
92
+ %w{README KNOWN-ISSUES SPEC} +
93
+ Dir["lib/**/*.rb"])
94
+ end
95
+
96
+ task :pushsite => [:rdoc] do
97
+ sh "cd site && git gc"
98
+ sh "rsync -avz doc/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/doc/"
99
+ sh "rsync -avz site/ chneukirchen@rack.rubyforge.org:/var/www/gforge-projects/rack/"
100
+ sh "cd site && git push"
101
+ end