rack 1.6.13 → 2.0.9
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.
- checksums.yaml +4 -4
- data/COPYING +1 -1
- data/HISTORY.md +138 -8
- data/README.rdoc +18 -28
- data/Rakefile +6 -14
- data/SPEC +3 -3
- data/contrib/rack_logo.svg +164 -111
- data/example/protectedlobster.rb +1 -1
- data/example/protectedlobster.ru +1 -1
- data/lib/rack/auth/abstract/request.rb +5 -1
- data/lib/rack/auth/digest/params.rb +2 -3
- data/lib/rack/auth/digest/request.rb +1 -1
- data/lib/rack/body_proxy.rb +14 -9
- data/lib/rack/builder.rb +3 -3
- data/lib/rack/chunked.rb +5 -5
- data/lib/rack/{commonlogger.rb → common_logger.rb} +3 -3
- data/lib/rack/content_length.rb +2 -2
- data/lib/rack/deflater.rb +4 -39
- data/lib/rack/directory.rb +66 -54
- data/lib/rack/etag.rb +5 -4
- data/lib/rack/events.rb +154 -0
- data/lib/rack/file.rb +64 -40
- data/lib/rack/handler/cgi.rb +15 -16
- data/lib/rack/handler/fastcgi.rb +13 -14
- data/lib/rack/handler/lsws.rb +11 -11
- data/lib/rack/handler/scgi.rb +15 -15
- data/lib/rack/handler/thin.rb +3 -0
- data/lib/rack/handler/webrick.rb +24 -26
- data/lib/rack/handler.rb +3 -25
- data/lib/rack/head.rb +15 -17
- data/lib/rack/lint.rb +40 -40
- data/lib/rack/lobster.rb +1 -1
- data/lib/rack/lock.rb +15 -10
- data/lib/rack/logger.rb +2 -2
- data/lib/rack/media_type.rb +38 -0
- data/lib/rack/{methodoverride.rb → method_override.rb} +6 -6
- data/lib/rack/mime.rb +18 -5
- data/lib/rack/mock.rb +36 -54
- data/lib/rack/multipart/generator.rb +5 -5
- data/lib/rack/multipart/parser.rb +270 -157
- data/lib/rack/multipart/uploaded_file.rb +1 -2
- data/lib/rack/multipart.rb +35 -6
- data/lib/rack/{nulllogger.rb → null_logger.rb} +1 -1
- data/lib/rack/query_parser.rb +192 -0
- data/lib/rack/recursive.rb +8 -8
- data/lib/rack/request.rb +394 -305
- data/lib/rack/response.rb +130 -57
- data/lib/rack/rewindable_input.rb +1 -12
- data/lib/rack/runtime.rb +10 -18
- data/lib/rack/sendfile.rb +5 -7
- data/lib/rack/server.rb +30 -23
- data/lib/rack/session/abstract/id.rb +110 -75
- data/lib/rack/session/cookie.rb +24 -17
- data/lib/rack/session/memcache.rb +9 -9
- data/lib/rack/session/pool.rb +8 -8
- data/lib/rack/show_exceptions.rb +386 -0
- data/lib/rack/{showstatus.rb → show_status.rb} +3 -3
- data/lib/rack/static.rb +30 -5
- data/lib/rack/tempfile_reaper.rb +2 -2
- data/lib/rack/urlmap.rb +15 -14
- data/lib/rack/utils.rb +138 -211
- data/lib/rack.rb +70 -21
- data/rack.gemspec +10 -9
- data/test/builder/an_underscore_app.rb +5 -0
- data/test/builder/options.ru +1 -1
- data/test/cgi/test.fcgi +1 -0
- data/test/cgi/test.gz +0 -0
- data/test/helper.rb +34 -0
- data/test/multipart/filename_with_encoded_words +7 -0
- data/test/multipart/filename_with_single_quote +7 -0
- data/test/multipart/quoted +15 -0
- data/test/multipart/rack-logo.png +0 -0
- data/test/multipart/unity3d_wwwform +11 -0
- data/test/registering_handler/rack/handler/registering_myself.rb +1 -1
- data/test/spec_auth_basic.rb +27 -19
- data/test/spec_auth_digest.rb +47 -46
- data/test/spec_body_proxy.rb +27 -27
- data/test/spec_builder.rb +51 -41
- data/test/spec_cascade.rb +24 -22
- data/test/spec_cgi.rb +49 -67
- data/test/spec_chunked.rb +37 -35
- data/test/{spec_commonlogger.rb → spec_common_logger.rb} +23 -21
- data/test/{spec_conditionalget.rb → spec_conditional_get.rb} +29 -28
- data/test/spec_config.rb +3 -2
- data/test/spec_content_length.rb +18 -17
- data/test/spec_content_type.rb +13 -12
- data/test/spec_deflater.rb +85 -49
- data/test/spec_directory.rb +87 -27
- data/test/spec_etag.rb +32 -31
- data/test/spec_events.rb +133 -0
- data/test/spec_fastcgi.rb +50 -72
- data/test/spec_file.rb +120 -77
- data/test/spec_handler.rb +19 -34
- data/test/spec_head.rb +15 -14
- data/test/spec_lint.rb +164 -199
- data/test/spec_lobster.rb +24 -23
- data/test/spec_lock.rb +79 -39
- data/test/spec_logger.rb +4 -3
- data/test/spec_media_type.rb +42 -0
- data/test/{spec_methodoverride.rb → spec_method_override.rb} +34 -35
- data/test/spec_mime.rb +19 -19
- data/test/spec_mock.rb +206 -144
- data/test/spec_multipart.rb +322 -200
- data/test/{spec_nulllogger.rb → spec_null_logger.rb} +5 -4
- data/test/spec_recursive.rb +17 -14
- data/test/spec_request.rb +780 -605
- data/test/spec_response.rb +233 -112
- data/test/spec_rewindable_input.rb +50 -40
- data/test/spec_runtime.rb +11 -10
- data/test/spec_sendfile.rb +30 -35
- data/test/spec_server.rb +78 -52
- data/test/spec_session_abstract_id.rb +11 -33
- data/test/spec_session_abstract_session_hash.rb +45 -0
- data/test/spec_session_cookie.rb +99 -67
- data/test/spec_session_memcache.rb +67 -68
- data/test/spec_session_pool.rb +52 -51
- data/test/{spec_showexceptions.rb → spec_show_exceptions.rb} +23 -28
- data/test/{spec_showstatus.rb → spec_show_status.rb} +36 -35
- data/test/spec_static.rb +71 -32
- data/test/spec_tempfile_reaper.rb +11 -10
- data/test/spec_thin.rb +55 -50
- data/test/spec_urlmap.rb +79 -78
- data/test/spec_utils.rb +441 -346
- data/test/spec_version.rb +2 -8
- data/test/spec_webrick.rb +93 -71
- data/test/static/foo.html +1 -0
- data/test/testrequest.rb +1 -1
- data/test/unregistered_handler/rack/handler/unregistered.rb +1 -1
- data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +1 -1
- metadata +57 -36
- data/KNOWN-ISSUES +0 -44
- data/lib/rack/backports/uri/common_18.rb +0 -56
- data/lib/rack/backports/uri/common_192.rb +0 -52
- data/lib/rack/backports/uri/common_193.rb +0 -29
- data/lib/rack/handler/evented_mongrel.rb +0 -8
- data/lib/rack/handler/mongrel.rb +0 -106
- data/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
- data/lib/rack/showexceptions.rb +0 -387
- data/lib/rack/utils/okjson.rb +0 -600
- data/test/spec_mongrel.rb +0 -182
- /data/lib/rack/{conditionalget.rb → conditional_get.rb} +0 -0
data/test/spec_version.rb
CHANGED
@@ -1,17 +1,11 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
require 'minitest/autorun'
|
2
3
|
require 'rack'
|
3
4
|
|
4
5
|
describe Rack do
|
5
6
|
describe 'version' do
|
6
7
|
it 'defaults to a hard-coded api version' do
|
7
|
-
Rack.version.
|
8
|
-
end
|
9
|
-
end
|
10
|
-
describe 'release' do
|
11
|
-
it 'matches version in .gemspec' do
|
12
|
-
gemspec_path = File.join(File.dirname(File.expand_path(__FILE__)), '../rack.gemspec')
|
13
|
-
gemspec = Gem::Specification.load(gemspec_path)
|
14
|
-
Rack.release.split('.').take(2).should.equal gemspec.version.to_s.split('.').take(2)
|
8
|
+
Rack.version.must_equal "1.3"
|
15
9
|
end
|
16
10
|
end
|
17
11
|
end
|
data/test/spec_webrick.rb
CHANGED
@@ -1,92 +1,108 @@
|
|
1
|
+
require 'minitest/autorun'
|
1
2
|
require 'rack/mock'
|
3
|
+
require 'thread'
|
2
4
|
require File.expand_path('../testrequest', __FILE__)
|
3
5
|
|
4
6
|
Thread.abort_on_exception = true
|
5
7
|
|
6
8
|
describe Rack::Handler::WEBrick do
|
7
|
-
|
9
|
+
include TestRequest::Helpers
|
8
10
|
|
11
|
+
before do
|
9
12
|
@server = WEBrick::HTTPServer.new(:Host => @host='127.0.0.1',
|
10
13
|
:Port => @port=9202,
|
11
14
|
:Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
|
12
15
|
:AccessLog => [])
|
13
16
|
@server.mount "/test", Rack::Handler::WEBrick,
|
14
17
|
Rack::Lint.new(TestRequest.new)
|
15
|
-
Thread.new { @server.start }
|
18
|
+
@thread = Thread.new { @server.start }
|
16
19
|
trap(:INT) { @server.shutdown }
|
20
|
+
@status_thread = Thread.new do
|
21
|
+
seconds = 10
|
22
|
+
wait_time = 0.1
|
23
|
+
until is_running? || seconds <= 0
|
24
|
+
seconds -= wait_time
|
25
|
+
sleep wait_time
|
26
|
+
end
|
27
|
+
raise "Server never reached status 'Running'" unless is_running?
|
28
|
+
end
|
29
|
+
end
|
17
30
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
31
|
+
def is_running?
|
32
|
+
@server.status == :Running
|
33
|
+
end
|
34
|
+
|
35
|
+
it "respond" do
|
36
|
+
GET("/test")
|
37
|
+
status.must_equal 200
|
22
38
|
end
|
23
39
|
|
24
|
-
|
40
|
+
it "be a WEBrick" do
|
25
41
|
GET("/test")
|
26
|
-
status.
|
27
|
-
response["SERVER_SOFTWARE"].
|
28
|
-
response["HTTP_VERSION"].
|
29
|
-
response["SERVER_PROTOCOL"].
|
30
|
-
response["SERVER_PORT"].
|
31
|
-
response["SERVER_NAME"].
|
42
|
+
status.must_equal 200
|
43
|
+
response["SERVER_SOFTWARE"].must_match(/WEBrick/)
|
44
|
+
response["HTTP_VERSION"].must_equal "HTTP/1.1"
|
45
|
+
response["SERVER_PROTOCOL"].must_equal "HTTP/1.1"
|
46
|
+
response["SERVER_PORT"].must_equal "9202"
|
47
|
+
response["SERVER_NAME"].must_equal "127.0.0.1"
|
32
48
|
end
|
33
49
|
|
34
|
-
|
50
|
+
it "have rack headers" do
|
35
51
|
GET("/test")
|
36
|
-
response["rack.version"].
|
37
|
-
response["rack.multithread"].
|
38
|
-
response["rack.multiprocess"]
|
39
|
-
response["rack.run_once"]
|
52
|
+
response["rack.version"].must_equal [1,3]
|
53
|
+
response["rack.multithread"].must_equal true
|
54
|
+
assert_equal false, response["rack.multiprocess"]
|
55
|
+
assert_equal false, response["rack.run_once"]
|
40
56
|
end
|
41
57
|
|
42
|
-
|
58
|
+
it "have CGI headers on GET" do
|
43
59
|
GET("/test")
|
44
|
-
response["REQUEST_METHOD"].
|
45
|
-
response["SCRIPT_NAME"].
|
46
|
-
response["REQUEST_PATH"].
|
47
|
-
response["PATH_INFO"].
|
48
|
-
response["QUERY_STRING"].
|
49
|
-
response["test.postdata"].
|
60
|
+
response["REQUEST_METHOD"].must_equal "GET"
|
61
|
+
response["SCRIPT_NAME"].must_equal "/test"
|
62
|
+
response["REQUEST_PATH"].must_equal "/test"
|
63
|
+
response["PATH_INFO"].must_equal ""
|
64
|
+
response["QUERY_STRING"].must_equal ""
|
65
|
+
response["test.postdata"].must_equal ""
|
50
66
|
|
51
67
|
GET("/test/foo?quux=1")
|
52
|
-
response["REQUEST_METHOD"].
|
53
|
-
response["SCRIPT_NAME"].
|
54
|
-
response["REQUEST_PATH"].
|
55
|
-
response["PATH_INFO"].
|
56
|
-
response["QUERY_STRING"].
|
68
|
+
response["REQUEST_METHOD"].must_equal "GET"
|
69
|
+
response["SCRIPT_NAME"].must_equal "/test"
|
70
|
+
response["REQUEST_PATH"].must_equal "/test/foo"
|
71
|
+
response["PATH_INFO"].must_equal "/foo"
|
72
|
+
response["QUERY_STRING"].must_equal "quux=1"
|
57
73
|
|
58
74
|
GET("/test/foo%25encoding?quux=1")
|
59
|
-
response["REQUEST_METHOD"].
|
60
|
-
response["SCRIPT_NAME"].
|
61
|
-
response["REQUEST_PATH"].
|
62
|
-
response["PATH_INFO"].
|
63
|
-
response["QUERY_STRING"].
|
75
|
+
response["REQUEST_METHOD"].must_equal "GET"
|
76
|
+
response["SCRIPT_NAME"].must_equal "/test"
|
77
|
+
response["REQUEST_PATH"].must_equal "/test/foo%25encoding"
|
78
|
+
response["PATH_INFO"].must_equal "/foo%25encoding"
|
79
|
+
response["QUERY_STRING"].must_equal "quux=1"
|
64
80
|
end
|
65
81
|
|
66
|
-
|
82
|
+
it "have CGI headers on POST" do
|
67
83
|
POST("/test", {"rack-form-data" => "23"}, {'X-test-header' => '42'})
|
68
|
-
status.
|
69
|
-
response["REQUEST_METHOD"].
|
70
|
-
response["SCRIPT_NAME"].
|
71
|
-
response["REQUEST_PATH"].
|
72
|
-
response["PATH_INFO"].
|
73
|
-
response["QUERY_STRING"].
|
74
|
-
response["HTTP_X_TEST_HEADER"].
|
75
|
-
response["test.postdata"].
|
84
|
+
status.must_equal 200
|
85
|
+
response["REQUEST_METHOD"].must_equal "POST"
|
86
|
+
response["SCRIPT_NAME"].must_equal "/test"
|
87
|
+
response["REQUEST_PATH"].must_equal "/test"
|
88
|
+
response["PATH_INFO"].must_equal ""
|
89
|
+
response["QUERY_STRING"].must_equal ""
|
90
|
+
response["HTTP_X_TEST_HEADER"].must_equal "42"
|
91
|
+
response["test.postdata"].must_equal "rack-form-data=23"
|
76
92
|
end
|
77
93
|
|
78
|
-
|
94
|
+
it "support HTTP auth" do
|
79
95
|
GET("/test", {:user => "ruth", :passwd => "secret"})
|
80
|
-
response["HTTP_AUTHORIZATION"].
|
96
|
+
response["HTTP_AUTHORIZATION"].must_equal "Basic cnV0aDpzZWNyZXQ="
|
81
97
|
end
|
82
98
|
|
83
|
-
|
99
|
+
it "set status" do
|
84
100
|
GET("/test?secret")
|
85
|
-
status.
|
86
|
-
response["rack.url_scheme"].
|
101
|
+
status.must_equal 403
|
102
|
+
response["rack.url_scheme"].must_equal "http"
|
87
103
|
end
|
88
104
|
|
89
|
-
|
105
|
+
it "correctly set cookies" do
|
90
106
|
@server.mount "/cookie-test", Rack::Handler::WEBrick,
|
91
107
|
Rack::Lint.new(lambda { |req|
|
92
108
|
res = Rack::Response.new
|
@@ -97,14 +113,15 @@ describe Rack::Handler::WEBrick do
|
|
97
113
|
|
98
114
|
Net::HTTP.start(@host, @port) { |http|
|
99
115
|
res = http.get("/cookie-test")
|
100
|
-
res.code.to_i.
|
101
|
-
res.get_fields("set-cookie").
|
116
|
+
res.code.to_i.must_equal 200
|
117
|
+
res.get_fields("set-cookie").must_equal ["one=1", "two=2"]
|
102
118
|
}
|
103
119
|
end
|
104
120
|
|
105
|
-
|
106
|
-
|
107
|
-
|
121
|
+
it "provide a .run" do
|
122
|
+
queue = Queue.new
|
123
|
+
|
124
|
+
t = Thread.new do
|
108
125
|
Rack::Handler::WEBrick.run(lambda {},
|
109
126
|
{
|
110
127
|
:Host => '127.0.0.1',
|
@@ -112,16 +129,17 @@ describe Rack::Handler::WEBrick do
|
|
112
129
|
:Logger => WEBrick::Log.new(nil, WEBrick::BasicLog::WARN),
|
113
130
|
:AccessLog => []}) { |server|
|
114
131
|
block_ran = true
|
115
|
-
|
116
|
-
|
117
|
-
throw :done
|
132
|
+
assert_kind_of WEBrick::HTTPServer, server
|
133
|
+
queue.push(server)
|
118
134
|
}
|
119
|
-
|
120
|
-
|
121
|
-
|
135
|
+
end
|
136
|
+
|
137
|
+
server = queue.pop
|
138
|
+
server.shutdown
|
139
|
+
t.join
|
122
140
|
end
|
123
141
|
|
124
|
-
|
142
|
+
it "return repeated headers" do
|
125
143
|
@server.mount "/headers", Rack::Handler::WEBrick,
|
126
144
|
Rack::Lint.new(lambda { |req|
|
127
145
|
[
|
@@ -134,12 +152,12 @@ describe Rack::Handler::WEBrick do
|
|
134
152
|
|
135
153
|
Net::HTTP.start(@host, @port) { |http|
|
136
154
|
res = http.get("/headers")
|
137
|
-
res.code.to_i.
|
138
|
-
res["www-authenticate"].
|
155
|
+
res.code.to_i.must_equal 401
|
156
|
+
res["www-authenticate"].must_equal "Bar realm=X, Baz realm=Y"
|
139
157
|
}
|
140
158
|
end
|
141
159
|
|
142
|
-
|
160
|
+
it "support Rack partial hijack" do
|
143
161
|
io_lambda = lambda{ |io|
|
144
162
|
5.times do
|
145
163
|
io.write "David\r\n"
|
@@ -151,18 +169,18 @@ describe Rack::Handler::WEBrick do
|
|
151
169
|
Rack::Lint.new(lambda{ |req|
|
152
170
|
[
|
153
171
|
200,
|
154
|
-
|
172
|
+
[ [ "rack.hijack", io_lambda ] ],
|
155
173
|
[""]
|
156
174
|
]
|
157
175
|
})
|
158
176
|
|
159
177
|
Net::HTTP.start(@host, @port){ |http|
|
160
178
|
res = http.get("/partial")
|
161
|
-
res.body.
|
179
|
+
res.body.must_equal "David\r\nDavid\r\nDavid\r\nDavid\r\nDavid\r\n"
|
162
180
|
}
|
163
181
|
end
|
164
182
|
|
165
|
-
|
183
|
+
it "produce correct HTTP semantics with and without app chunking" do
|
166
184
|
@server.mount "/chunked", Rack::Handler::WEBrick,
|
167
185
|
Rack::Lint.new(lambda{ |req|
|
168
186
|
[
|
@@ -174,11 +192,15 @@ describe Rack::Handler::WEBrick do
|
|
174
192
|
|
175
193
|
Net::HTTP.start(@host, @port){ |http|
|
176
194
|
res = http.get("/chunked")
|
177
|
-
res["Transfer-Encoding"].
|
178
|
-
res["Content-Length"].
|
179
|
-
res.body.
|
195
|
+
res["Transfer-Encoding"].must_equal "chunked"
|
196
|
+
res["Content-Length"].must_be_nil
|
197
|
+
res.body.must_equal "chunked"
|
180
198
|
}
|
181
199
|
end
|
182
200
|
|
201
|
+
after do
|
202
|
+
@status_thread.join
|
183
203
|
@server.shutdown
|
204
|
+
@thread.join
|
205
|
+
end
|
184
206
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
foo.html!
|
data/test/testrequest.rb
CHANGED
@@ -12,7 +12,7 @@ class TestRequest
|
|
12
12
|
# This may in the future want to replace with a dummy value instead.
|
13
13
|
minienv.delete_if { |k,v| NOSERIALIZE.any? { |c| v.kind_of?(c) } }
|
14
14
|
body = minienv.to_yaml
|
15
|
-
size = body.
|
15
|
+
size = body.bytesize
|
16
16
|
[status, {"Content-Type" => "text/yaml", "Content-Length" => size.to_s}, [body]]
|
17
17
|
end
|
18
18
|
|
metadata
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Leah Neukirchen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2020-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest-sprint
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
@@ -45,19 +59,17 @@ description: |
|
|
45
59
|
servers, web frameworks, and software in between (the so-called
|
46
60
|
middleware) into a single method call.
|
47
61
|
|
48
|
-
Also see
|
49
|
-
email:
|
62
|
+
Also see https://rack.github.io/.
|
63
|
+
email: leah@vuxu.org
|
50
64
|
executables:
|
51
65
|
- rackup
|
52
66
|
extensions: []
|
53
67
|
extra_rdoc_files:
|
54
68
|
- README.rdoc
|
55
|
-
- KNOWN-ISSUES
|
56
69
|
- HISTORY.md
|
57
70
|
files:
|
58
71
|
- COPYING
|
59
72
|
- HISTORY.md
|
60
|
-
- KNOWN-ISSUES
|
61
73
|
- README.rdoc
|
62
74
|
- Rakefile
|
63
75
|
- SPEC
|
@@ -77,30 +89,25 @@ files:
|
|
77
89
|
- lib/rack/auth/digest/nonce.rb
|
78
90
|
- lib/rack/auth/digest/params.rb
|
79
91
|
- lib/rack/auth/digest/request.rb
|
80
|
-
- lib/rack/backports/uri/common_18.rb
|
81
|
-
- lib/rack/backports/uri/common_192.rb
|
82
|
-
- lib/rack/backports/uri/common_193.rb
|
83
92
|
- lib/rack/body_proxy.rb
|
84
93
|
- lib/rack/builder.rb
|
85
94
|
- lib/rack/cascade.rb
|
86
95
|
- lib/rack/chunked.rb
|
87
|
-
- lib/rack/
|
88
|
-
- lib/rack/
|
96
|
+
- lib/rack/common_logger.rb
|
97
|
+
- lib/rack/conditional_get.rb
|
89
98
|
- lib/rack/config.rb
|
90
99
|
- lib/rack/content_length.rb
|
91
100
|
- lib/rack/content_type.rb
|
92
101
|
- lib/rack/deflater.rb
|
93
102
|
- lib/rack/directory.rb
|
94
103
|
- lib/rack/etag.rb
|
104
|
+
- lib/rack/events.rb
|
95
105
|
- lib/rack/file.rb
|
96
106
|
- lib/rack/handler.rb
|
97
107
|
- lib/rack/handler/cgi.rb
|
98
|
-
- lib/rack/handler/evented_mongrel.rb
|
99
108
|
- lib/rack/handler/fastcgi.rb
|
100
109
|
- lib/rack/handler/lsws.rb
|
101
|
-
- lib/rack/handler/mongrel.rb
|
102
110
|
- lib/rack/handler/scgi.rb
|
103
|
-
- lib/rack/handler/swiftiplied_mongrel.rb
|
104
111
|
- lib/rack/handler/thin.rb
|
105
112
|
- lib/rack/handler/webrick.rb
|
106
113
|
- lib/rack/head.rb
|
@@ -108,14 +115,16 @@ files:
|
|
108
115
|
- lib/rack/lobster.rb
|
109
116
|
- lib/rack/lock.rb
|
110
117
|
- lib/rack/logger.rb
|
111
|
-
- lib/rack/
|
118
|
+
- lib/rack/media_type.rb
|
119
|
+
- lib/rack/method_override.rb
|
112
120
|
- lib/rack/mime.rb
|
113
121
|
- lib/rack/mock.rb
|
114
122
|
- lib/rack/multipart.rb
|
115
123
|
- lib/rack/multipart/generator.rb
|
116
124
|
- lib/rack/multipart/parser.rb
|
117
125
|
- lib/rack/multipart/uploaded_file.rb
|
118
|
-
- lib/rack/
|
126
|
+
- lib/rack/null_logger.rb
|
127
|
+
- lib/rack/query_parser.rb
|
119
128
|
- lib/rack/recursive.rb
|
120
129
|
- lib/rack/reloader.rb
|
121
130
|
- lib/rack/request.rb
|
@@ -128,14 +137,14 @@ files:
|
|
128
137
|
- lib/rack/session/cookie.rb
|
129
138
|
- lib/rack/session/memcache.rb
|
130
139
|
- lib/rack/session/pool.rb
|
131
|
-
- lib/rack/
|
132
|
-
- lib/rack/
|
140
|
+
- lib/rack/show_exceptions.rb
|
141
|
+
- lib/rack/show_status.rb
|
133
142
|
- lib/rack/static.rb
|
134
143
|
- lib/rack/tempfile_reaper.rb
|
135
144
|
- lib/rack/urlmap.rb
|
136
145
|
- lib/rack/utils.rb
|
137
|
-
- lib/rack/utils/okjson.rb
|
138
146
|
- rack.gemspec
|
147
|
+
- test/builder/an_underscore_app.rb
|
139
148
|
- test/builder/anything.rb
|
140
149
|
- test/builder/comment.ru
|
141
150
|
- test/builder/end.ru
|
@@ -153,8 +162,10 @@ files:
|
|
153
162
|
- test/cgi/test
|
154
163
|
- test/cgi/test+directory/test+file
|
155
164
|
- test/cgi/test.fcgi
|
165
|
+
- test/cgi/test.gz
|
156
166
|
- test/cgi/test.ru
|
157
167
|
- test/gemloader.rb
|
168
|
+
- test/helper.rb
|
158
169
|
- test/multipart/bad_robots
|
159
170
|
- test/multipart/binary
|
160
171
|
- test/multipart/content_type_and_no_filename
|
@@ -163,10 +174,12 @@ files:
|
|
163
174
|
- test/multipart/file1.txt
|
164
175
|
- test/multipart/filename_and_modification_param
|
165
176
|
- test/multipart/filename_and_no_name
|
177
|
+
- test/multipart/filename_with_encoded_words
|
166
178
|
- test/multipart/filename_with_escaped_quotes
|
167
179
|
- test/multipart/filename_with_escaped_quotes_and_modification_param
|
168
180
|
- test/multipart/filename_with_null_byte
|
169
181
|
- test/multipart/filename_with_percent_escaped_quotes
|
182
|
+
- test/multipart/filename_with_single_quote
|
170
183
|
- test/multipart/filename_with_unescaped_percentages
|
171
184
|
- test/multipart/filename_with_unescaped_percentages2
|
172
185
|
- test/multipart/filename_with_unescaped_percentages3
|
@@ -176,9 +189,12 @@ files:
|
|
176
189
|
- test/multipart/mixed_files
|
177
190
|
- test/multipart/nested
|
178
191
|
- test/multipart/none
|
192
|
+
- test/multipart/quoted
|
193
|
+
- test/multipart/rack-logo.png
|
179
194
|
- test/multipart/semicolon
|
180
195
|
- test/multipart/text
|
181
196
|
- test/multipart/three_files_three_fields
|
197
|
+
- test/multipart/unity3d_wwwform
|
182
198
|
- test/multipart/webkit
|
183
199
|
- test/rackup/config.ru
|
184
200
|
- test/registering_handler/rack/handler/registering_myself.rb
|
@@ -189,14 +205,15 @@ files:
|
|
189
205
|
- test/spec_cascade.rb
|
190
206
|
- test/spec_cgi.rb
|
191
207
|
- test/spec_chunked.rb
|
192
|
-
- test/
|
193
|
-
- test/
|
208
|
+
- test/spec_common_logger.rb
|
209
|
+
- test/spec_conditional_get.rb
|
194
210
|
- test/spec_config.rb
|
195
211
|
- test/spec_content_length.rb
|
196
212
|
- test/spec_content_type.rb
|
197
213
|
- test/spec_deflater.rb
|
198
214
|
- test/spec_directory.rb
|
199
215
|
- test/spec_etag.rb
|
216
|
+
- test/spec_events.rb
|
200
217
|
- test/spec_fastcgi.rb
|
201
218
|
- test/spec_file.rb
|
202
219
|
- test/spec_handler.rb
|
@@ -205,12 +222,12 @@ files:
|
|
205
222
|
- test/spec_lobster.rb
|
206
223
|
- test/spec_lock.rb
|
207
224
|
- test/spec_logger.rb
|
208
|
-
- test/
|
225
|
+
- test/spec_media_type.rb
|
226
|
+
- test/spec_method_override.rb
|
209
227
|
- test/spec_mime.rb
|
210
228
|
- test/spec_mock.rb
|
211
|
-
- test/spec_mongrel.rb
|
212
229
|
- test/spec_multipart.rb
|
213
|
-
- test/
|
230
|
+
- test/spec_null_logger.rb
|
214
231
|
- test/spec_recursive.rb
|
215
232
|
- test/spec_request.rb
|
216
233
|
- test/spec_response.rb
|
@@ -219,12 +236,13 @@ files:
|
|
219
236
|
- test/spec_sendfile.rb
|
220
237
|
- test/spec_server.rb
|
221
238
|
- test/spec_session_abstract_id.rb
|
239
|
+
- test/spec_session_abstract_session_hash.rb
|
222
240
|
- test/spec_session_cookie.rb
|
223
241
|
- test/spec_session_memcache.rb
|
224
242
|
- test/spec_session_persisted_secure_secure_session_hash.rb
|
225
243
|
- test/spec_session_pool.rb
|
226
|
-
- test/
|
227
|
-
- test/
|
244
|
+
- test/spec_show_exceptions.rb
|
245
|
+
- test/spec_show_status.rb
|
228
246
|
- test/spec_static.rb
|
229
247
|
- test/spec_tempfile_reaper.rb
|
230
248
|
- test/spec_thin.rb
|
@@ -233,11 +251,12 @@ files:
|
|
233
251
|
- test/spec_version.rb
|
234
252
|
- test/spec_webrick.rb
|
235
253
|
- test/static/another/index.html
|
254
|
+
- test/static/foo.html
|
236
255
|
- test/static/index.html
|
237
256
|
- test/testrequest.rb
|
238
257
|
- test/unregistered_handler/rack/handler/unregistered.rb
|
239
258
|
- test/unregistered_handler/rack/handler/unregistered_long_one.rb
|
240
|
-
homepage:
|
259
|
+
homepage: https://rack.github.io/
|
241
260
|
licenses:
|
242
261
|
- MIT
|
243
262
|
metadata: {}
|
@@ -249,7 +268,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
249
268
|
requirements:
|
250
269
|
- - ">="
|
251
270
|
- !ruby/object:Gem::Version
|
252
|
-
version:
|
271
|
+
version: 2.2.2
|
253
272
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
254
273
|
requirements:
|
255
274
|
- - ">="
|
@@ -265,45 +284,47 @@ test_files:
|
|
265
284
|
- test/spec_deflater.rb
|
266
285
|
- test/spec_static.rb
|
267
286
|
- test/spec_session_cookie.rb
|
268
|
-
- test/spec_commonlogger.rb
|
269
287
|
- test/spec_session_pool.rb
|
270
|
-
- test/spec_methodoverride.rb
|
271
288
|
- test/spec_etag.rb
|
272
289
|
- test/spec_version.rb
|
273
290
|
- test/spec_handler.rb
|
274
291
|
- test/spec_thin.rb
|
275
|
-
- test/spec_showexceptions.rb
|
276
292
|
- test/spec_session_abstract_id.rb
|
277
293
|
- test/spec_mime.rb
|
278
294
|
- test/spec_recursive.rb
|
295
|
+
- test/spec_null_logger.rb
|
296
|
+
- test/spec_media_type.rb
|
279
297
|
- test/spec_cgi.rb
|
298
|
+
- test/spec_method_override.rb
|
280
299
|
- test/spec_content_type.rb
|
300
|
+
- test/spec_session_abstract_session_hash.rb
|
281
301
|
- test/spec_request.rb
|
282
|
-
- test/spec_showstatus.rb
|
283
302
|
- test/spec_chunked.rb
|
303
|
+
- test/spec_show_exceptions.rb
|
284
304
|
- test/spec_runtime.rb
|
285
305
|
- test/spec_session_persisted_secure_secure_session_hash.rb
|
286
306
|
- test/spec_fastcgi.rb
|
307
|
+
- test/spec_common_logger.rb
|
287
308
|
- test/spec_builder.rb
|
288
309
|
- test/spec_config.rb
|
289
|
-
- test/spec_mongrel.rb
|
290
310
|
- test/spec_utils.rb
|
291
311
|
- test/spec_sendfile.rb
|
292
312
|
- test/spec_lobster.rb
|
293
313
|
- test/spec_lint.rb
|
314
|
+
- test/spec_conditional_get.rb
|
294
315
|
- test/spec_tempfile_reaper.rb
|
295
316
|
- test/spec_mock.rb
|
296
|
-
- test/spec_conditionalget.rb
|
297
317
|
- test/spec_server.rb
|
298
318
|
- test/spec_directory.rb
|
299
319
|
- test/spec_webrick.rb
|
300
320
|
- test/spec_response.rb
|
301
321
|
- test/spec_file.rb
|
322
|
+
- test/spec_show_status.rb
|
302
323
|
- test/spec_body_proxy.rb
|
303
324
|
- test/spec_logger.rb
|
304
325
|
- test/spec_auth_digest.rb
|
305
326
|
- test/spec_urlmap.rb
|
306
|
-
- test/
|
327
|
+
- test/spec_events.rb
|
307
328
|
- test/spec_cascade.rb
|
308
329
|
- test/spec_auth_basic.rb
|
309
330
|
- test/spec_head.rb
|
data/KNOWN-ISSUES
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
= Known issues with Rack and ECMA-262
|
2
|
-
|
3
|
-
* Many users expect the escape() function defined in ECMA-262 to be compatible
|
4
|
-
with URI. Confusion is especially strong because the documentation for the
|
5
|
-
escape function includes a reference to the URI specifications. ECMA-262
|
6
|
-
escape is not however a URI escape function, it is a javascript escape
|
7
|
-
function, and is not fully compatible. Most notably, for characters outside of
|
8
|
-
the BMP. Users should use the more correct encodeURI functions.
|
9
|
-
|
10
|
-
= Known issues with Rack and Web servers
|
11
|
-
|
12
|
-
* Lighttpd sets wrong SCRIPT_NAME and PATH_INFO if you mount your
|
13
|
-
FastCGI app at "/". This can be fixed by using this middleware:
|
14
|
-
|
15
|
-
class LighttpdScriptNameFix
|
16
|
-
def initialize(app)
|
17
|
-
@app = app
|
18
|
-
end
|
19
|
-
|
20
|
-
def call(env)
|
21
|
-
env["PATH_INFO"] = env["SCRIPT_NAME"].to_s + env["PATH_INFO"].to_s
|
22
|
-
env["SCRIPT_NAME"] = ""
|
23
|
-
@app.call(env)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
Of course, use this only when your app runs at "/".
|
28
|
-
|
29
|
-
Since lighttpd 1.4.23, you also can use the "fix-root-scriptname" flag
|
30
|
-
in fastcgi.server.
|
31
|
-
|
32
|
-
= Known conflicts regarding parameter parsing
|
33
|
-
|
34
|
-
* Many users have differing opinions about parameter parsing. The current
|
35
|
-
parameter parsers in Rack are based on a combination of the HTTP and CGI
|
36
|
-
specs, and are intended to round-trip encoding and decoding. There are some
|
37
|
-
choices that may be viewed as deficiencies, specifically:
|
38
|
-
- Rack does not create implicit arrays for multiple instances of a parameter
|
39
|
-
- Rack returns nil when a value is not given
|
40
|
-
- Rack does not support multi-type keys in parameters
|
41
|
-
These issues or choices, will not be fixed before 2.0, if at all. They are
|
42
|
-
very major breaking changes. Users are free to write alternative parameter
|
43
|
-
parsers, and their own Request and Response wrappers. Moreover, users are
|
44
|
-
encouraged to do so.
|