rack 1.4.7 → 1.5.0.beta.1

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.

Files changed (60) hide show
  1. data/README.rdoc +2 -30
  2. data/Rakefile +1 -0
  3. data/SPEC +68 -4
  4. data/example/protectedlobster.rb +1 -1
  5. data/lib/rack.rb +2 -14
  6. data/lib/rack/auth/abstract/request.rb +1 -5
  7. data/lib/rack/builder.rb +8 -4
  8. data/lib/rack/cascade.rb +2 -2
  9. data/lib/rack/config.rb +5 -0
  10. data/lib/rack/deflater.rb +2 -1
  11. data/lib/rack/file.rb +25 -28
  12. data/lib/rack/handler.rb +18 -5
  13. data/lib/rack/handler/mongrel.rb +1 -1
  14. data/lib/rack/handler/scgi.rb +1 -1
  15. data/lib/rack/handler/thin.rb +6 -3
  16. data/lib/rack/handler/webrick.rb +1 -0
  17. data/lib/rack/head.rb +2 -0
  18. data/lib/rack/lint.rb +132 -7
  19. data/lib/rack/lobster.rb +3 -3
  20. data/lib/rack/lock.rb +2 -0
  21. data/lib/rack/methodoverride.rb +0 -2
  22. data/lib/rack/mime.rb +29 -0
  23. data/lib/rack/multipart/parser.rb +0 -9
  24. data/lib/rack/request.rb +66 -25
  25. data/lib/rack/response.rb +1 -2
  26. data/lib/rack/sendfile.rb +18 -4
  27. data/lib/rack/server.rb +20 -12
  28. data/lib/rack/session/abstract/id.rb +60 -59
  29. data/lib/rack/session/cookie.rb +11 -16
  30. data/lib/rack/utils.rb +97 -85
  31. data/rack.gemspec +1 -6
  32. data/test/spec_builder.rb +7 -0
  33. data/test/spec_cgi.rb +1 -1
  34. data/test/spec_chunked.rb +3 -5
  35. data/test/spec_content_length.rb +3 -6
  36. data/test/spec_deflater.rb +26 -9
  37. data/test/spec_fastcgi.rb +1 -1
  38. data/test/spec_file.rb +24 -11
  39. data/test/spec_head.rb +3 -8
  40. data/test/spec_lint.rb +6 -6
  41. data/test/spec_lock.rb +4 -7
  42. data/test/spec_methodoverride.rb +4 -1
  43. data/test/spec_mime.rb +51 -0
  44. data/test/spec_mongrel.rb +1 -1
  45. data/test/spec_multipart.rb +15 -49
  46. data/test/spec_nulllogger.rb +3 -6
  47. data/test/spec_request.rb +112 -18
  48. data/test/spec_response.rb +8 -8
  49. data/test/spec_sendfile.rb +52 -13
  50. data/test/spec_server.rb +6 -0
  51. data/test/spec_session_abstract_id.rb +11 -1
  52. data/test/spec_session_cookie.rb +140 -153
  53. data/test/spec_thin.rb +6 -1
  54. data/test/spec_utils.rb +23 -17
  55. data/test/spec_webrick.rb +1 -1
  56. metadata +37 -83
  57. checksums.yaml +0 -7
  58. data/test/cgi/lighttpd.errors +0 -1
  59. data/test/multipart/three_files_three_fields +0 -31
  60. data/test/spec_auth.rb +0 -57
@@ -11,7 +11,7 @@ describe Rack::Handler::Thin do
11
11
  Thin::Logging.silent = true
12
12
 
13
13
  @thread = Thread.new do
14
- Rack::Handler::Thin.run(@app, :Host => @host='127.0.0.1', :Port => @port=9204) do |server|
14
+ Rack::Handler::Thin.run(@app, :Host => @host='127.0.0.1', :Port => @port=9204, :tag => "tag") do |server|
15
15
  @server = server
16
16
  end
17
17
  end
@@ -77,8 +77,13 @@ describe Rack::Handler::Thin do
77
77
  response["rack.url_scheme"].should.equal "http"
78
78
  end
79
79
 
80
+ should "set tag for server" do
81
+ @server.tag.should.equal 'tag'
82
+ end
83
+
80
84
  @server.stop!
81
85
  @thread.kill
86
+
82
87
  end
83
88
 
84
89
  rescue LoadError
@@ -123,18 +123,6 @@ describe Rack::Utils do
123
123
  Rack::Utils.parse_query(",foo=bar;,", ";,").should.equal "foo" => "bar"
124
124
  end
125
125
 
126
- should "raise an exception if the params are too deep" do
127
- len = Rack::Utils.param_depth_limit
128
-
129
- lambda {
130
- Rack::Utils.parse_nested_query("foo#{"[a]" * len}=bar")
131
- }.should.raise(RangeError)
132
-
133
- lambda {
134
- Rack::Utils.parse_nested_query("foo#{"[a]" * (len - 1)}=bar")
135
- }.should.not.raise
136
- end
137
-
138
126
  should "parse nested query strings correctly" do
139
127
  Rack::Utils.parse_nested_query("foo").
140
128
  should.equal "foo" => nil
@@ -284,6 +272,29 @@ describe Rack::Utils do
284
272
  Rack::Utils.build_query(key => nil).should.equal Rack::Utils.escape(key)
285
273
  end
286
274
 
275
+ should "parse q-values" do
276
+ # XXX handle accept-extension
277
+ Rack::Utils.q_values("foo;q=0.5,bar,baz;q=0.9").should.equal [
278
+ [ 'foo', 0.5 ],
279
+ [ 'bar', 1.0 ],
280
+ [ 'baz', 0.9 ]
281
+ ]
282
+ end
283
+
284
+ should "select best quality match" do
285
+ Rack::Utils.best_q_match("text/html", %w[text/html]).should == "text/html"
286
+
287
+ # More specific matches are preferred
288
+ Rack::Utils.best_q_match("text/*;q=0.5,text/html;q=1.0", %w[text/html]).should == "text/html"
289
+
290
+ # Higher quality matches are preferred
291
+ Rack::Utils.best_q_match("text/*;q=0.5,text/plain;q=1.0", %w[text/plain text/html]).should == "text/plain"
292
+
293
+ # All else equal, the available mimes are preferred in order
294
+ Rack::Utils.best_q_match("text/*", %w[text/html text/plain]).should == "text/html"
295
+ Rack::Utils.best_q_match("text/plain,text/html", %w[text/html text/plain]).should == "text/html"
296
+ end
297
+
287
298
  should "escape html entities [&><'\"/]" do
288
299
  Rack::Utils.escape_html("foo").should.equal "foo"
289
300
  Rack::Utils.escape_html("f&o").should.equal "f&amp;o"
@@ -343,11 +354,6 @@ describe Rack::Utils do
343
354
  Rack::Utils.bytesize("FOO\xE2\x82\xAC").should.equal 6
344
355
  end
345
356
 
346
- should "should perform constant time string comparison" do
347
- Rack::Utils.secure_compare('a', 'a').should.equal true
348
- Rack::Utils.secure_compare('a', 'b').should.equal false
349
- end
350
-
351
357
  should "return status code for integer" do
352
358
  Rack::Utils.status_code(200).should.equal 200
353
359
  end
@@ -33,7 +33,7 @@ describe Rack::Handler::WEBrick do
33
33
 
34
34
  should "have rack headers" do
35
35
  GET("/test")
36
- response["rack.version"].should.equal [1,1]
36
+ response["rack.version"].should.equal [1,2]
37
37
  response["rack.multithread"].should.be.true
38
38
  response["rack.multiprocess"].should.be.false
39
39
  response["rack.run_once"].should.be.false
metadata CHANGED
@@ -1,107 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.7
4
+ version: 1.5.0.beta.1
5
+ prerelease: 6
5
6
  platform: ruby
6
7
  authors:
7
8
  - Christian Neukirchen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
12
+ date: 2013-01-11 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: bacon
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - ">="
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :development
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - ">="
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: rake
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - ">="
35
+ - - ! '>='
32
36
  - !ruby/object:Gem::Version
33
37
  version: '0'
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - ">="
43
+ - - ! '>='
39
44
  - !ruby/object:Gem::Version
40
45
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: ruby-fcgi
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: memcache-client
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: mongrel
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 1.2.0.pre2
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 1.2.0.pre2
83
- - !ruby/object:Gem::Dependency
84
- name: thin
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- description: |
98
- Rack provides a minimal, modular and adaptable interface for developing
46
+ description: ! 'Rack provides a minimal, modular and adaptable interface for developing
47
+
99
48
  web applications in Ruby. By wrapping HTTP requests and responses in
49
+
100
50
  the simplest way possible, it unifies and distills the API for web
51
+
101
52
  servers, web frameworks, and software in between (the so-called
53
+
102
54
  middleware) into a single method call.
103
55
 
56
+
104
57
  Also see http://rack.github.com/.
58
+
59
+ '
105
60
  email: chneukirchen@gmail.com
106
61
  executables:
107
62
  - rackup
@@ -110,11 +65,6 @@ extra_rdoc_files:
110
65
  - README.rdoc
111
66
  - KNOWN-ISSUES
112
67
  files:
113
- - COPYING
114
- - KNOWN-ISSUES
115
- - README.rdoc
116
- - Rakefile
117
- - SPEC
118
68
  - bin/rackup
119
69
  - contrib/rack.png
120
70
  - contrib/rack.svg
@@ -123,7 +73,6 @@ files:
123
73
  - example/lobster.ru
124
74
  - example/protectedlobster.rb
125
75
  - example/protectedlobster.ru
126
- - lib/rack.rb
127
76
  - lib/rack/auth/abstract/handler.rb
128
77
  - lib/rack/auth/abstract/request.rb
129
78
  - lib/rack/auth/basic.rb
@@ -147,7 +96,6 @@ files:
147
96
  - lib/rack/directory.rb
148
97
  - lib/rack/etag.rb
149
98
  - lib/rack/file.rb
150
- - lib/rack/handler.rb
151
99
  - lib/rack/handler/cgi.rb
152
100
  - lib/rack/handler/evented_mongrel.rb
153
101
  - lib/rack/handler/fastcgi.rb
@@ -157,6 +105,7 @@ files:
157
105
  - lib/rack/handler/swiftiplied_mongrel.rb
158
106
  - lib/rack/handler/thin.rb
159
107
  - lib/rack/handler/webrick.rb
108
+ - lib/rack/handler.rb
160
109
  - lib/rack/head.rb
161
110
  - lib/rack/lint.rb
162
111
  - lib/rack/lobster.rb
@@ -165,10 +114,10 @@ files:
165
114
  - lib/rack/methodoverride.rb
166
115
  - lib/rack/mime.rb
167
116
  - lib/rack/mock.rb
168
- - lib/rack/multipart.rb
169
117
  - lib/rack/multipart/generator.rb
170
118
  - lib/rack/multipart/parser.rb
171
119
  - lib/rack/multipart/uploaded_file.rb
120
+ - lib/rack/multipart.rb
172
121
  - lib/rack/nulllogger.rb
173
122
  - lib/rack/recursive.rb
174
123
  - lib/rack/reloader.rb
@@ -187,7 +136,7 @@ files:
187
136
  - lib/rack/static.rb
188
137
  - lib/rack/urlmap.rb
189
138
  - lib/rack/utils.rb
190
- - rack.gemspec
139
+ - lib/rack.rb
191
140
  - test/builder/anything.rb
192
141
  - test/builder/comment.ru
193
142
  - test/builder/end.ru
@@ -200,7 +149,6 @@ files:
200
149
  - test/cgi/assets/javascripts/app.js
201
150
  - test/cgi/assets/stylesheets/app.css
202
151
  - test/cgi/lighttpd.conf
203
- - test/cgi/lighttpd.errors
204
152
  - test/cgi/rackup_stub.rb
205
153
  - test/cgi/sample_rackup.ru
206
154
  - test/cgi/test
@@ -228,11 +176,9 @@ files:
228
176
  - test/multipart/none
229
177
  - test/multipart/semicolon
230
178
  - test/multipart/text
231
- - test/multipart/three_files_three_fields
232
179
  - test/multipart/webkit
233
180
  - test/rackup/config.ru
234
181
  - test/registering_handler/rack/handler/registering_myself.rb
235
- - test/spec_auth.rb
236
182
  - test/spec_auth_basic.rb
237
183
  - test/spec_auth_digest.rb
238
184
  - test/spec_body_proxy.rb
@@ -257,6 +203,7 @@ files:
257
203
  - test/spec_lock.rb
258
204
  - test/spec_logger.rb
259
205
  - test/spec_methodoverride.rb
206
+ - test/spec_mime.rb
260
207
  - test/spec_mock.rb
261
208
  - test/spec_mongrel.rb
262
209
  - test/spec_multipart.rb
@@ -284,31 +231,37 @@ files:
284
231
  - test/testrequest.rb
285
232
  - test/unregistered_handler/rack/handler/unregistered.rb
286
233
  - test/unregistered_handler/rack/handler/unregistered_long_one.rb
234
+ - COPYING
235
+ - KNOWN-ISSUES
236
+ - rack.gemspec
237
+ - Rakefile
238
+ - README.rdoc
239
+ - SPEC
287
240
  homepage: http://rack.github.com/
288
241
  licenses: []
289
- metadata: {}
290
242
  post_install_message:
291
243
  rdoc_options: []
292
244
  require_paths:
293
245
  - lib
294
246
  required_ruby_version: !ruby/object:Gem::Requirement
247
+ none: false
295
248
  requirements:
296
- - - ">="
249
+ - - ! '>='
297
250
  - !ruby/object:Gem::Version
298
251
  version: '0'
299
252
  required_rubygems_version: !ruby/object:Gem::Requirement
253
+ none: false
300
254
  requirements:
301
- - - ">="
255
+ - - ! '>'
302
256
  - !ruby/object:Gem::Version
303
- version: '0'
257
+ version: 1.3.1
304
258
  requirements: []
305
259
  rubyforge_project: rack
306
- rubygems_version: 2.4.5
260
+ rubygems_version: 1.8.23
307
261
  signing_key:
308
- specification_version: 4
262
+ specification_version: 3
309
263
  summary: a modular Ruby webserver interface
310
264
  test_files:
311
- - test/spec_auth.rb
312
265
  - test/spec_auth_basic.rb
313
266
  - test/spec_auth_digest.rb
314
267
  - test/spec_body_proxy.rb
@@ -333,6 +286,7 @@ test_files:
333
286
  - test/spec_lock.rb
334
287
  - test/spec_logger.rb
335
288
  - test/spec_methodoverride.rb
289
+ - test/spec_mime.rb
336
290
  - test/spec_mock.rb
337
291
  - test/spec_mongrel.rb
338
292
  - test/spec_multipart.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: e3c31ab2a14865deb3a2572ffb4e5041805e03b6
4
- data.tar.gz: 4c46599689ac47586891e494975865d24047c364
5
- SHA512:
6
- metadata.gz: 46969b1d5dd0866d2fe3bc407cd15d862ea6cdafb05260fa7c7f4fea7832c927e690de1a46e685ef0e52f0dafbbee19780fc164b27e672b2d598ff4ffd758565
7
- data.tar.gz: 3ad91dddc637cd4e7285d4e4dee55aab4fad2c3327cb0dfa8b6e10fbb3d00643bb0a83985f3e28f6eafb9c9439cb9295d4d8d9e62f1a6f54013e626a55e05e44
@@ -1 +0,0 @@
1
- 2015-06-16 14:11:43: (log.c.164) server started
@@ -1,31 +0,0 @@
1
- --AaB03x
2
- content-disposition: form-data; name="reply"
3
-
4
- yes
5
- --AaB03x
6
- content-disposition: form-data; name="to"
7
-
8
- people
9
- --AaB03x
10
- content-disposition: form-data; name="from"
11
-
12
- others
13
- --AaB03x
14
- content-disposition: form-data; name="fileupload1"; filename="file1.jpg"
15
- Content-Type: image/jpeg
16
- Content-Transfer-Encoding: base64
17
-
18
- /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
19
- --AaB03x
20
- content-disposition: form-data; name="fileupload2"; filename="file2.jpg"
21
- Content-Type: image/jpeg
22
- Content-Transfer-Encoding: base64
23
-
24
- /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
25
- --AaB03x
26
- content-disposition: form-data; name="fileupload3"; filename="file3.jpg"
27
- Content-Type: image/jpeg
28
- Content-Transfer-Encoding: base64
29
-
30
- /9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcg
31
- --AaB03x--
@@ -1,57 +0,0 @@
1
- require 'rack'
2
-
3
- describe Rack::Auth do
4
- it "should have all common authentication schemes" do
5
- Rack::Auth.schemes.should.include? 'basic'
6
- Rack::Auth.schemes.should.include? 'digest'
7
- Rack::Auth.schemes.should.include? 'bearer'
8
- Rack::Auth.schemes.should.include? 'token'
9
- end
10
-
11
- it "should allow registration of new auth schemes" do
12
- Rack::Auth.schemes.should.not.include "test"
13
- Rack::Auth.add_scheme "test"
14
- Rack::Auth.schemes.should.include "test"
15
- end
16
- end
17
-
18
- describe Rack::Auth::AbstractRequest do
19
- it "should symbolize known auth schemes" do
20
- env = Rack::MockRequest.env_for('/')
21
- env['HTTP_AUTHORIZATION'] = 'Basic aXJyZXNwb25zaWJsZQ=='
22
- req = Rack::Auth::AbstractRequest.new(env)
23
- req.scheme.should.equal :basic
24
-
25
-
26
- env['HTTP_AUTHORIZATION'] = 'Digest aXJyZXNwb25zaWJsZQ=='
27
- req = Rack::Auth::AbstractRequest.new(env)
28
- req.scheme.should.equal :digest
29
-
30
- env['HTTP_AUTHORIZATION'] = 'Bearer aXJyZXNwb25zaWJsZQ=='
31
- req = Rack::Auth::AbstractRequest.new(env)
32
- req.scheme.should.equal :bearer
33
-
34
- env['HTTP_AUTHORIZATION'] = 'MAC aXJyZXNwb25zaWJsZQ=='
35
- req = Rack::Auth::AbstractRequest.new(env)
36
- req.scheme.should.equal :mac
37
-
38
- env['HTTP_AUTHORIZATION'] = 'Token aXJyZXNwb25zaWJsZQ=='
39
- req = Rack::Auth::AbstractRequest.new(env)
40
- req.scheme.should.equal :token
41
-
42
- env['HTTP_AUTHORIZATION'] = 'OAuth aXJyZXNwb25zaWJsZQ=='
43
- req = Rack::Auth::AbstractRequest.new(env)
44
- req.scheme.should.equal :oauth
45
-
46
- env['HTTP_AUTHORIZATION'] = 'OAuth2 aXJyZXNwb25zaWJsZQ=='
47
- req = Rack::Auth::AbstractRequest.new(env)
48
- req.scheme.should.equal :oauth2
49
- end
50
-
51
- it "should not symbolize unknown auth schemes" do
52
- env = Rack::MockRequest.env_for('/')
53
- env['HTTP_AUTHORIZATION'] = 'magic aXJyZXNwb25zaWJsZQ=='
54
- req = Rack::Auth::AbstractRequest.new(env)
55
- req.scheme.should == "magic"
56
- end
57
- end