rack 1.1.6 → 1.6.9

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 (212) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +1 -1
  3. data/HISTORY.md +375 -0
  4. data/KNOWN-ISSUES +23 -0
  5. data/README.rdoc +312 -0
  6. data/Rakefile +124 -0
  7. data/SPEC +125 -32
  8. data/contrib/rack.png +0 -0
  9. data/contrib/rack.svg +150 -0
  10. data/contrib/rack_logo.svg +1 -1
  11. data/contrib/rdoc.css +412 -0
  12. data/example/protectedlobster.rb +1 -1
  13. data/lib/rack/auth/abstract/handler.rb +4 -4
  14. data/lib/rack/auth/abstract/request.rb +7 -5
  15. data/lib/rack/auth/basic.rb +1 -1
  16. data/lib/rack/auth/digest/md5.rb +7 -3
  17. data/lib/rack/auth/digest/nonce.rb +1 -1
  18. data/lib/rack/auth/digest/params.rb +7 -9
  19. data/lib/rack/auth/digest/request.rb +10 -9
  20. data/lib/rack/backports/uri/common_18.rb +56 -0
  21. data/lib/rack/backports/uri/common_192.rb +52 -0
  22. data/lib/rack/backports/uri/common_193.rb +29 -0
  23. data/lib/rack/body_proxy.rb +39 -0
  24. data/lib/rack/builder.rb +106 -22
  25. data/lib/rack/cascade.rb +17 -6
  26. data/lib/rack/chunked.rb +44 -24
  27. data/lib/rack/commonlogger.rb +36 -13
  28. data/lib/rack/conditionalget.rb +49 -17
  29. data/lib/rack/config.rb +5 -0
  30. data/lib/rack/content_length.rb +14 -6
  31. data/lib/rack/content_type.rb +7 -1
  32. data/lib/rack/deflater.rb +73 -15
  33. data/lib/rack/directory.rb +18 -8
  34. data/lib/rack/etag.rb +59 -9
  35. data/lib/rack/file.rb +106 -44
  36. data/lib/rack/handler/cgi.rb +11 -11
  37. data/lib/rack/handler/fastcgi.rb +18 -6
  38. data/lib/rack/handler/lsws.rb +2 -4
  39. data/lib/rack/handler/mongrel.rb +22 -6
  40. data/lib/rack/handler/scgi.rb +16 -8
  41. data/lib/rack/handler/thin.rb +19 -4
  42. data/lib/rack/handler/webrick.rb +72 -19
  43. data/lib/rack/handler.rb +47 -14
  44. data/lib/rack/head.rb +10 -2
  45. data/lib/rack/lint.rb +260 -75
  46. data/lib/rack/lobster.rb +13 -8
  47. data/lib/rack/lock.rb +13 -3
  48. data/lib/rack/logger.rb +0 -2
  49. data/lib/rack/methodoverride.rb +27 -8
  50. data/lib/rack/mime.rb +625 -167
  51. data/lib/rack/mock.rb +78 -53
  52. data/lib/rack/multipart/generator.rb +93 -0
  53. data/lib/rack/multipart/parser.rb +253 -0
  54. data/lib/rack/multipart/uploaded_file.rb +34 -0
  55. data/lib/rack/multipart.rb +34 -0
  56. data/lib/rack/nulllogger.rb +21 -2
  57. data/lib/rack/recursive.rb +10 -5
  58. data/lib/rack/reloader.rb +3 -2
  59. data/lib/rack/request.rb +201 -74
  60. data/lib/rack/response.rb +41 -28
  61. data/lib/rack/rewindable_input.rb +15 -11
  62. data/lib/rack/runtime.rb +16 -3
  63. data/lib/rack/sendfile.rb +47 -29
  64. data/lib/rack/server.rb +223 -47
  65. data/lib/rack/session/abstract/id.rb +289 -30
  66. data/lib/rack/session/cookie.rb +133 -44
  67. data/lib/rack/session/memcache.rb +30 -56
  68. data/lib/rack/session/pool.rb +19 -43
  69. data/lib/rack/showexceptions.rb +53 -15
  70. data/lib/rack/showstatus.rb +14 -7
  71. data/lib/rack/static.rb +124 -12
  72. data/lib/rack/tempfile_reaper.rb +22 -0
  73. data/lib/rack/urlmap.rb +49 -15
  74. data/lib/rack/utils/okjson.rb +600 -0
  75. data/lib/rack/utils.rb +363 -361
  76. data/lib/rack.rb +17 -23
  77. data/rack.gemspec +11 -20
  78. data/test/builder/anything.rb +5 -0
  79. data/test/builder/comment.ru +4 -0
  80. data/test/builder/end.ru +5 -0
  81. data/test/builder/line.ru +1 -0
  82. data/test/builder/options.ru +2 -0
  83. data/test/cgi/assets/folder/test.js +1 -0
  84. data/test/cgi/assets/fonts/font.eot +1 -0
  85. data/test/cgi/assets/images/image.png +1 -0
  86. data/test/cgi/assets/index.html +1 -0
  87. data/test/cgi/assets/javascripts/app.js +1 -0
  88. data/test/cgi/assets/stylesheets/app.css +1 -0
  89. data/test/cgi/lighttpd.conf +26 -0
  90. data/test/cgi/rackup_stub.rb +6 -0
  91. data/test/cgi/sample_rackup.ru +5 -0
  92. data/test/cgi/test +9 -0
  93. data/test/cgi/test+directory/test+file +1 -0
  94. data/test/cgi/test.fcgi +8 -0
  95. data/test/cgi/test.ru +5 -0
  96. data/test/gemloader.rb +10 -0
  97. data/test/multipart/bad_robots +259 -0
  98. data/test/multipart/binary +0 -0
  99. data/test/multipart/content_type_and_no_filename +6 -0
  100. data/test/multipart/empty +10 -0
  101. data/test/multipart/fail_16384_nofile +814 -0
  102. data/test/multipart/file1.txt +1 -0
  103. data/test/multipart/filename_and_modification_param +7 -0
  104. data/test/multipart/filename_and_no_name +6 -0
  105. data/test/multipart/filename_with_escaped_quotes +6 -0
  106. data/test/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
  107. data/test/multipart/filename_with_null_byte +7 -0
  108. data/test/multipart/filename_with_percent_escaped_quotes +6 -0
  109. data/test/multipart/filename_with_unescaped_percentages +6 -0
  110. data/test/multipart/filename_with_unescaped_percentages2 +6 -0
  111. data/test/multipart/filename_with_unescaped_percentages3 +6 -0
  112. data/test/multipart/filename_with_unescaped_quotes +6 -0
  113. data/test/multipart/ie +6 -0
  114. data/test/multipart/invalid_character +6 -0
  115. data/test/multipart/mixed_files +21 -0
  116. data/test/multipart/nested +10 -0
  117. data/test/multipart/none +9 -0
  118. data/test/multipart/semicolon +6 -0
  119. data/test/multipart/text +15 -0
  120. data/test/multipart/three_files_three_fields +31 -0
  121. data/test/multipart/webkit +32 -0
  122. data/test/rackup/config.ru +31 -0
  123. data/test/registering_handler/rack/handler/registering_myself.rb +8 -0
  124. data/test/{spec_rack_auth_basic.rb → spec_auth_basic.rb} +23 -15
  125. data/test/{spec_rack_auth_digest.rb → spec_auth_digest.rb} +56 -29
  126. data/test/spec_body_proxy.rb +85 -0
  127. data/test/spec_builder.rb +223 -0
  128. data/test/{spec_rack_cascade.rb → spec_cascade.rb} +28 -15
  129. data/test/{spec_rack_cgi.rb → spec_cgi.rb} +44 -31
  130. data/test/spec_chunked.rb +101 -0
  131. data/test/spec_commonlogger.rb +93 -0
  132. data/test/spec_conditionalget.rb +102 -0
  133. data/test/{spec_rack_config.rb → spec_config.rb} +6 -8
  134. data/test/spec_content_length.rb +85 -0
  135. data/test/spec_content_type.rb +45 -0
  136. data/test/spec_deflater.rb +339 -0
  137. data/test/{spec_rack_directory.rb → spec_directory.rb} +37 -10
  138. data/test/spec_etag.rb +107 -0
  139. data/test/{spec_rack_fastcgi.rb → spec_fastcgi.rb} +47 -29
  140. data/test/spec_file.rb +221 -0
  141. data/test/spec_handler.rb +72 -0
  142. data/test/spec_head.rb +45 -0
  143. data/test/{spec_rack_lint.rb → spec_lint.rb} +82 -60
  144. data/test/spec_lobster.rb +58 -0
  145. data/test/spec_lock.rb +164 -0
  146. data/test/spec_logger.rb +23 -0
  147. data/test/spec_methodoverride.rb +95 -0
  148. data/test/spec_mime.rb +51 -0
  149. data/test/{spec_rack_mock.rb → spec_mock.rb} +92 -38
  150. data/test/{spec_rack_mongrel.rb → spec_mongrel.rb} +46 -53
  151. data/test/spec_multipart.rb +600 -0
  152. data/test/spec_nulllogger.rb +20 -0
  153. data/test/spec_recursive.rb +72 -0
  154. data/test/spec_request.rb +1227 -0
  155. data/test/spec_response.rb +407 -0
  156. data/test/spec_rewindable_input.rb +118 -0
  157. data/test/spec_runtime.rb +49 -0
  158. data/test/spec_sendfile.rb +130 -0
  159. data/test/spec_server.rb +167 -0
  160. data/test/spec_session_abstract_id.rb +53 -0
  161. data/test/spec_session_cookie.rb +410 -0
  162. data/test/{spec_rack_session_memcache.rb → spec_session_memcache.rb} +119 -71
  163. data/test/{spec_rack_session_pool.rb → spec_session_pool.rb} +106 -69
  164. data/test/spec_showexceptions.rb +85 -0
  165. data/test/spec_showstatus.rb +103 -0
  166. data/test/spec_static.rb +145 -0
  167. data/test/spec_tempfile_reaper.rb +63 -0
  168. data/test/{spec_rack_thin.rb → spec_thin.rb} +35 -35
  169. data/test/{spec_rack_urlmap.rb → spec_urlmap.rb} +40 -19
  170. data/test/spec_utils.rb +647 -0
  171. data/test/spec_version.rb +17 -0
  172. data/test/spec_webrick.rb +184 -0
  173. data/test/static/another/index.html +1 -0
  174. data/test/static/index.html +1 -0
  175. data/test/testrequest.rb +78 -0
  176. data/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
  177. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
  178. metadata +220 -239
  179. data/RDOX +0 -0
  180. data/README +0 -592
  181. data/lib/rack/adapter/camping.rb +0 -22
  182. data/test/spec_auth.rb +0 -57
  183. data/test/spec_rack_builder.rb +0 -84
  184. data/test/spec_rack_camping.rb +0 -55
  185. data/test/spec_rack_chunked.rb +0 -62
  186. data/test/spec_rack_commonlogger.rb +0 -61
  187. data/test/spec_rack_conditionalget.rb +0 -41
  188. data/test/spec_rack_content_length.rb +0 -43
  189. data/test/spec_rack_content_type.rb +0 -30
  190. data/test/spec_rack_deflater.rb +0 -127
  191. data/test/spec_rack_etag.rb +0 -17
  192. data/test/spec_rack_file.rb +0 -75
  193. data/test/spec_rack_handler.rb +0 -43
  194. data/test/spec_rack_head.rb +0 -30
  195. data/test/spec_rack_lobster.rb +0 -45
  196. data/test/spec_rack_lock.rb +0 -38
  197. data/test/spec_rack_logger.rb +0 -21
  198. data/test/spec_rack_methodoverride.rb +0 -60
  199. data/test/spec_rack_nulllogger.rb +0 -13
  200. data/test/spec_rack_recursive.rb +0 -77
  201. data/test/spec_rack_request.rb +0 -594
  202. data/test/spec_rack_response.rb +0 -221
  203. data/test/spec_rack_rewindable_input.rb +0 -118
  204. data/test/spec_rack_runtime.rb +0 -35
  205. data/test/spec_rack_sendfile.rb +0 -86
  206. data/test/spec_rack_session_cookie.rb +0 -92
  207. data/test/spec_rack_showexceptions.rb +0 -21
  208. data/test/spec_rack_showstatus.rb +0 -72
  209. data/test/spec_rack_static.rb +0 -37
  210. data/test/spec_rack_utils.rb +0 -557
  211. data/test/spec_rack_webrick.rb +0 -130
  212. data/test/spec_rackup.rb +0 -164
@@ -1,130 +0,0 @@
1
- require 'test/spec'
2
-
3
- require 'rack/handler/webrick'
4
- require 'rack/lint'
5
- require 'rack/response'
6
- require 'testrequest'
7
-
8
- Thread.abort_on_exception = true
9
-
10
- context "Rack::Handler::WEBrick" do
11
- include TestRequest::Helpers
12
-
13
- setup do
14
- @server = WEBrick::HTTPServer.new(:Host => @host='0.0.0.0',
15
- :Port => @port=9202,
16
- :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
17
- :AccessLog => [])
18
- @server.mount "/test", Rack::Handler::WEBrick,
19
- Rack::Lint.new(TestRequest.new)
20
- Thread.new { @server.start }
21
- trap(:INT) { @server.shutdown }
22
- end
23
-
24
- specify "should respond" do
25
- lambda {
26
- GET("/test")
27
- }.should.not.raise
28
- end
29
-
30
- specify "should be a WEBrick" do
31
- GET("/test")
32
- status.should.be 200
33
- response["SERVER_SOFTWARE"].should =~ /WEBrick/
34
- response["HTTP_VERSION"].should.equal "HTTP/1.1"
35
- response["SERVER_PROTOCOL"].should.equal "HTTP/1.1"
36
- response["SERVER_PORT"].should.equal "9202"
37
- response["SERVER_NAME"].should.equal "0.0.0.0"
38
- end
39
-
40
- specify "should have rack headers" do
41
- GET("/test")
42
- response["rack.version"].should.equal [1,1]
43
- response["rack.multithread"].should.be true
44
- response["rack.multiprocess"].should.be false
45
- response["rack.run_once"].should.be false
46
- end
47
-
48
- specify "should have CGI headers on GET" do
49
- GET("/test")
50
- response["REQUEST_METHOD"].should.equal "GET"
51
- response["SCRIPT_NAME"].should.equal "/test"
52
- response["REQUEST_PATH"].should.equal "/"
53
- response["PATH_INFO"].should.be.equal ""
54
- response["QUERY_STRING"].should.equal ""
55
- response["test.postdata"].should.equal ""
56
-
57
- GET("/test/foo?quux=1")
58
- response["REQUEST_METHOD"].should.equal "GET"
59
- response["SCRIPT_NAME"].should.equal "/test"
60
- response["REQUEST_PATH"].should.equal "/"
61
- response["PATH_INFO"].should.equal "/foo"
62
- response["QUERY_STRING"].should.equal "quux=1"
63
-
64
- GET("/test/foo%25encoding?quux=1")
65
- response["REQUEST_METHOD"].should.equal "GET"
66
- response["SCRIPT_NAME"].should.equal "/test"
67
- response["REQUEST_PATH"].should.equal "/"
68
- response["PATH_INFO"].should.equal "/foo%25encoding"
69
- response["QUERY_STRING"].should.equal "quux=1"
70
- end
71
-
72
- specify "should have CGI headers on POST" do
73
- POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
74
- status.should.equal 200
75
- response["REQUEST_METHOD"].should.equal "POST"
76
- response["SCRIPT_NAME"].should.equal "/test"
77
- response["REQUEST_PATH"].should.equal "/"
78
- response["QUERY_STRING"].should.equal ""
79
- response["HTTP_X_TEST_HEADER"].should.equal "42"
80
- response["test.postdata"].should.equal "rack-form-data=23"
81
- end
82
-
83
- specify "should support HTTP auth" do
84
- GET("/test", {:user => "ruth", :passwd => "secret"})
85
- response["HTTP_AUTHORIZATION"].should.equal "Basic cnV0aDpzZWNyZXQ="
86
- end
87
-
88
- specify "should set status" do
89
- GET("/test?secret")
90
- status.should.equal 403
91
- response["rack.url_scheme"].should.equal "http"
92
- end
93
-
94
- specify "should correctly set cookies" do
95
- @server.mount "/cookie-test", Rack::Handler::WEBrick,
96
- Rack::Lint.new(lambda { |req|
97
- res = Rack::Response.new
98
- res.set_cookie "one", "1"
99
- res.set_cookie "two", "2"
100
- res.finish
101
- })
102
-
103
- Net::HTTP.start(@host, @port) { |http|
104
- res = http.get("/cookie-test")
105
- res.code.to_i.should.equal 200
106
- res.get_fields("set-cookie").should.equal ["one=1", "two=2"]
107
- }
108
- end
109
-
110
- specify "should provide a .run" do
111
- block_ran = false
112
- catch(:done) {
113
- Rack::Handler::WEBrick.run(lambda {},
114
- {:Port => 9210,
115
- :Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
116
- :AccessLog => []}) { |server|
117
- block_ran = true
118
- server.should.be.kind_of WEBrick::HTTPServer
119
- @s = server
120
- throw :done
121
- }
122
- }
123
- block_ran.should.be true
124
- @s.shutdown
125
- end
126
-
127
- teardown do
128
- @server.shutdown
129
- end
130
- end
data/test/spec_rackup.rb DELETED
@@ -1,164 +0,0 @@
1
- require 'test/spec'
2
- require 'testrequest'
3
- require 'rack/server'
4
- require 'open3'
5
-
6
- begin
7
- require "mongrel"
8
-
9
- context "rackup" do
10
- include TestRequest::Helpers
11
-
12
- def run_rackup(*args)
13
- options = args.last.is_a?(Hash) ? args.pop : {}
14
- flags = args.first
15
- @host = options[:host] || "0.0.0.0"
16
- @port = options[:port] || 9292
17
-
18
- Dir.chdir("#{root}/test/rackup") do
19
- @in, @rackup, @err = Open3.popen3("#{ruby} -S #{rackup} #{flags}")
20
- end
21
-
22
- return if options[:port] == false
23
-
24
- # Wait until the server is available
25
- i = 0
26
- begin
27
- GET("/")
28
- rescue
29
- i += 1
30
- if i > 40
31
- Dir["#{root}/**/*.pid"].each {|f|
32
- Process.kill(9, File.read(f)) rescue nil
33
- File.delete(f)
34
- }
35
- raise "Server did not start"
36
- end
37
- sleep 0.05
38
- retry
39
- end
40
- end
41
-
42
- def output
43
- @rackup.read
44
- end
45
-
46
- after do
47
- # This doesn't actually return a response, so we rescue
48
- GET "/die" rescue nil
49
-
50
- Dir["#{root}/**/*.pid"].each do |file|
51
- Process.kill(9, File.read(file).strip.to_i) rescue nil
52
- File.delete(file)
53
- end
54
-
55
- File.delete("#{root}/log_output") if File.exist?("#{root}/log_output")
56
- end
57
-
58
- specify "rackup" do
59
- run_rackup
60
- response["PATH_INFO"].should.equal '/'
61
- response["test.$DEBUG"].should.be false
62
- response["test.$EVAL"].should.be nil
63
- response["test.$VERBOSE"].should.be false
64
- response["test.Ping"].should.be nil
65
- response["SERVER_SOFTWARE"].should.not =~ /webrick/
66
- end
67
-
68
- specify "rackup --help" do
69
- run_rackup "--help", :port => false
70
- output.should.match /--port/
71
- end
72
-
73
- specify "rackup --port" do
74
- run_rackup "--port 9000", :port => 9000
75
- response["SERVER_PORT"].should.equal "9000"
76
- end
77
-
78
- specify "rackup --debug" do
79
- run_rackup "--debug"
80
- response["test.$DEBUG"].should.be true
81
- end
82
-
83
- specify "rackup --eval" do
84
- run_rackup %{--eval "BUKKIT = 'BUKKIT'"}
85
- response["test.$EVAL"].should.equal "BUKKIT"
86
- end
87
-
88
- specify "rackup --warn" do
89
- run_rackup %{--warn}
90
- response["test.$VERBOSE"].should.be true
91
- end
92
-
93
- specify "rackup --include" do
94
- run_rackup %{--include /foo/bar}
95
- response["test.$LOAD_PATH"].should.include "/foo/bar"
96
- end
97
-
98
- specify "rackup --require" do
99
- run_rackup %{--require ping}
100
- response["test.Ping"].should.equal "constant"
101
- end
102
-
103
- specify "rackup --server" do
104
- run_rackup %{--server webrick}
105
- response["SERVER_SOFTWARE"].should =~ /webrick/i
106
- end
107
-
108
- specify "rackup --host" do
109
- run_rackup %{--host 127.0.0.1}, :host => "127.0.0.1"
110
- response["REMOTE_ADDR"].should.equal "127.0.0.1"
111
- end
112
-
113
- specify "rackup --daemonize --pid" do
114
- run_rackup "--daemonize --pid testing.pid"
115
- status.should.be 200
116
- @rackup.should.be.eof?
117
- Dir["#{root}/**/testing.pid"].should.not.be.empty?
118
- end
119
-
120
- specify "rackup --pid" do
121
- run_rackup %{--pid testing.pid}
122
- status.should.be 200
123
- Dir["#{root}/**/testing.pid"].should.not.be.empty?
124
- end
125
-
126
- specify "rackup --version" do
127
- run_rackup %{--version}, :port => false
128
- output.should =~ /Rack 1.1/
129
- end
130
-
131
- specify "rackup --env development includes lint" do
132
- run_rackup
133
- GET("/broken_lint")
134
- status.should.be 500
135
- end
136
-
137
- specify "rackup --env deployment does not include lint" do
138
- run_rackup %{--env deployment}
139
- GET("/broken_lint")
140
- status.should.be 200
141
- end
142
-
143
- specify "rackup --env none does not include lint" do
144
- run_rackup %{--env none}
145
- GET("/broken_lint")
146
- status.should.be 200
147
- end
148
-
149
- specify "rackup --env deployment does log" do
150
- run_rackup %{--env deployment}
151
- log = File.read(response["test.stderr"])
152
- log.should.be.empty?
153
- end
154
-
155
- specify "rackup --env none does not log" do
156
- run_rackup %{--env none}
157
- GET("/")
158
- log = File.read(response["test.stderr"])
159
- log.should.be.empty?
160
- end
161
- end
162
- rescue LoadError
163
- $stderr.puts "Skipping rackup --server tests (mongrel is required). `gem install thin` and try again."
164
- end