rack 1.6.12 → 2.0.7

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 (141) hide show
  1. checksums.yaml +5 -5
  2. data/COPYING +1 -1
  3. data/HISTORY.md +138 -8
  4. data/README.rdoc +18 -28
  5. data/Rakefile +6 -14
  6. data/SPEC +10 -11
  7. data/contrib/rack_logo.svg +164 -111
  8. data/example/protectedlobster.rb +1 -1
  9. data/example/protectedlobster.ru +1 -1
  10. data/lib/rack.rb +70 -21
  11. data/lib/rack/auth/abstract/request.rb +5 -1
  12. data/lib/rack/auth/digest/params.rb +2 -3
  13. data/lib/rack/auth/digest/request.rb +1 -1
  14. data/lib/rack/body_proxy.rb +14 -9
  15. data/lib/rack/builder.rb +3 -3
  16. data/lib/rack/chunked.rb +5 -5
  17. data/lib/rack/{commonlogger.rb → common_logger.rb} +3 -3
  18. data/lib/rack/{conditionalget.rb → conditional_get.rb} +0 -0
  19. data/lib/rack/content_length.rb +2 -2
  20. data/lib/rack/deflater.rb +4 -39
  21. data/lib/rack/directory.rb +66 -54
  22. data/lib/rack/etag.rb +5 -4
  23. data/lib/rack/events.rb +154 -0
  24. data/lib/rack/file.rb +64 -40
  25. data/lib/rack/handler.rb +3 -25
  26. data/lib/rack/handler/cgi.rb +15 -16
  27. data/lib/rack/handler/fastcgi.rb +13 -14
  28. data/lib/rack/handler/lsws.rb +11 -11
  29. data/lib/rack/handler/scgi.rb +15 -15
  30. data/lib/rack/handler/thin.rb +3 -0
  31. data/lib/rack/handler/webrick.rb +24 -26
  32. data/lib/rack/head.rb +15 -17
  33. data/lib/rack/lint.rb +40 -40
  34. data/lib/rack/lobster.rb +1 -1
  35. data/lib/rack/lock.rb +15 -10
  36. data/lib/rack/logger.rb +2 -2
  37. data/lib/rack/media_type.rb +38 -0
  38. data/lib/rack/{methodoverride.rb → method_override.rb} +6 -6
  39. data/lib/rack/mime.rb +18 -5
  40. data/lib/rack/mock.rb +36 -54
  41. data/lib/rack/multipart.rb +35 -6
  42. data/lib/rack/multipart/generator.rb +5 -5
  43. data/lib/rack/multipart/parser.rb +270 -157
  44. data/lib/rack/multipart/uploaded_file.rb +1 -2
  45. data/lib/rack/{nulllogger.rb → null_logger.rb} +1 -1
  46. data/lib/rack/query_parser.rb +192 -0
  47. data/lib/rack/recursive.rb +8 -8
  48. data/lib/rack/request.rb +394 -305
  49. data/lib/rack/response.rb +130 -57
  50. data/lib/rack/rewindable_input.rb +1 -12
  51. data/lib/rack/runtime.rb +10 -18
  52. data/lib/rack/sendfile.rb +5 -7
  53. data/lib/rack/server.rb +30 -23
  54. data/lib/rack/session/abstract/id.rb +108 -138
  55. data/lib/rack/session/cookie.rb +26 -28
  56. data/lib/rack/session/memcache.rb +8 -14
  57. data/lib/rack/session/pool.rb +14 -21
  58. data/lib/rack/show_exceptions.rb +386 -0
  59. data/lib/rack/{showstatus.rb → show_status.rb} +3 -3
  60. data/lib/rack/static.rb +30 -5
  61. data/lib/rack/tempfile_reaper.rb +2 -2
  62. data/lib/rack/urlmap.rb +15 -14
  63. data/lib/rack/utils.rb +136 -211
  64. data/rack.gemspec +10 -9
  65. data/test/builder/an_underscore_app.rb +5 -0
  66. data/test/builder/options.ru +1 -1
  67. data/test/cgi/test.fcgi +1 -0
  68. data/test/cgi/test.gz +0 -0
  69. data/test/helper.rb +34 -0
  70. data/test/multipart/filename_with_encoded_words +7 -0
  71. data/test/multipart/filename_with_single_quote +7 -0
  72. data/test/multipart/quoted +15 -0
  73. data/test/multipart/rack-logo.png +0 -0
  74. data/test/multipart/unity3d_wwwform +11 -0
  75. data/test/registering_handler/rack/handler/registering_myself.rb +1 -1
  76. data/test/spec_auth_basic.rb +27 -19
  77. data/test/spec_auth_digest.rb +47 -46
  78. data/test/spec_body_proxy.rb +27 -27
  79. data/test/spec_builder.rb +51 -41
  80. data/test/spec_cascade.rb +24 -22
  81. data/test/spec_cgi.rb +49 -67
  82. data/test/spec_chunked.rb +37 -35
  83. data/test/{spec_commonlogger.rb → spec_common_logger.rb} +23 -21
  84. data/test/{spec_conditionalget.rb → spec_conditional_get.rb} +29 -28
  85. data/test/spec_config.rb +3 -2
  86. data/test/spec_content_length.rb +18 -17
  87. data/test/spec_content_type.rb +13 -12
  88. data/test/spec_deflater.rb +85 -49
  89. data/test/spec_directory.rb +87 -27
  90. data/test/spec_etag.rb +32 -31
  91. data/test/spec_events.rb +133 -0
  92. data/test/spec_fastcgi.rb +50 -72
  93. data/test/spec_file.rb +120 -77
  94. data/test/spec_handler.rb +19 -34
  95. data/test/spec_head.rb +15 -14
  96. data/test/spec_lint.rb +164 -199
  97. data/test/spec_lobster.rb +24 -23
  98. data/test/spec_lock.rb +79 -39
  99. data/test/spec_logger.rb +4 -3
  100. data/test/spec_media_type.rb +42 -0
  101. data/test/{spec_methodoverride.rb → spec_method_override.rb} +34 -35
  102. data/test/spec_mime.rb +19 -19
  103. data/test/spec_mock.rb +206 -144
  104. data/test/spec_multipart.rb +322 -200
  105. data/test/{spec_nulllogger.rb → spec_null_logger.rb} +5 -4
  106. data/test/spec_recursive.rb +17 -14
  107. data/test/spec_request.rb +780 -605
  108. data/test/spec_response.rb +215 -112
  109. data/test/spec_rewindable_input.rb +50 -40
  110. data/test/spec_runtime.rb +11 -10
  111. data/test/spec_sendfile.rb +30 -35
  112. data/test/spec_server.rb +78 -52
  113. data/test/spec_session_abstract_id.rb +11 -33
  114. data/test/spec_session_abstract_session_hash.rb +45 -0
  115. data/test/spec_session_cookie.rb +99 -67
  116. data/test/spec_session_memcache.rb +63 -101
  117. data/test/spec_session_pool.rb +48 -84
  118. data/test/{spec_showexceptions.rb → spec_show_exceptions.rb} +23 -28
  119. data/test/{spec_showstatus.rb → spec_show_status.rb} +36 -35
  120. data/test/spec_static.rb +71 -32
  121. data/test/spec_tempfile_reaper.rb +11 -10
  122. data/test/spec_thin.rb +55 -50
  123. data/test/spec_urlmap.rb +79 -78
  124. data/test/spec_utils.rb +441 -346
  125. data/test/spec_version.rb +2 -8
  126. data/test/spec_webrick.rb +93 -71
  127. data/test/static/foo.html +1 -0
  128. data/test/testrequest.rb +1 -1
  129. data/test/unregistered_handler/rack/handler/unregistered.rb +1 -1
  130. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +1 -1
  131. metadata +92 -70
  132. data/KNOWN-ISSUES +0 -44
  133. data/lib/rack/backports/uri/common_18.rb +0 -56
  134. data/lib/rack/backports/uri/common_192.rb +0 -52
  135. data/lib/rack/backports/uri/common_193.rb +0 -29
  136. data/lib/rack/handler/evented_mongrel.rb +0 -8
  137. data/lib/rack/handler/mongrel.rb +0 -106
  138. data/lib/rack/handler/swiftiplied_mongrel.rb +0 -8
  139. data/lib/rack/showexceptions.rb +0 -387
  140. data/lib/rack/utils/okjson.rb +0 -600
  141. data/test/spec_mongrel.rb +0 -182
@@ -1,4 +1,5 @@
1
- require 'rack/showexceptions'
1
+ require 'minitest/autorun'
2
+ require 'rack/show_exceptions'
2
3
  require 'rack/lint'
3
4
  require 'rack/mock'
4
5
 
@@ -6,7 +7,7 @@ describe Rack::ShowExceptions do
6
7
  def show_exceptions(app)
7
8
  Rack::Lint.new Rack::ShowExceptions.new(app)
8
9
  end
9
-
10
+
10
11
  it "catches exceptions" do
11
12
  res = nil
12
13
 
@@ -15,15 +16,13 @@ describe Rack::ShowExceptions do
15
16
  lambda{|env| raise RuntimeError }
16
17
  ))
17
18
 
18
- lambda{
19
- res = req.get("/", "HTTP_ACCEPT" => "text/html")
20
- }.should.not.raise
19
+ res = req.get("/", "HTTP_ACCEPT" => "text/html")
21
20
 
22
- res.should.be.a.server_error
23
- res.status.should.equal 500
21
+ res.must_be :server_error?
22
+ res.status.must_equal 500
24
23
 
25
- res.should =~ /RuntimeError/
26
- res.should =~ /ShowExceptions/
24
+ assert_match(res, /RuntimeError/)
25
+ assert_match(res, /ShowExceptions/)
27
26
  end
28
27
 
29
28
  it "responds with HTML only to requests accepting HTML" do
@@ -42,22 +41,20 @@ describe Rack::ShowExceptions do
42
41
  ["text/plain", ["/"]],
43
42
  ["text/plain", ["/", {"HTTP_ACCEPT" => "application/json"}]]
44
43
  ].each do |exmime, rargs|
45
- lambda{
46
- res = req.get(*rargs)
47
- }.should.not.raise
44
+ res = req.get(*rargs)
48
45
 
49
- res.should.be.a.server_error
50
- res.status.should.equal 500
46
+ res.must_be :server_error?
47
+ res.status.must_equal 500
51
48
 
52
- res.content_type.should.equal exmime
49
+ res.content_type.must_equal exmime
53
50
 
54
- res.body.should.include "RuntimeError"
55
- res.body.should.include "It was never supposed to work"
51
+ res.body.must_include "RuntimeError"
52
+ res.body.must_include "It was never supposed to work"
56
53
 
57
54
  if exmime == "text/html"
58
- res.body.should.include '</html>'
55
+ res.body.must_include '</html>'
59
56
  else
60
- res.body.should.not.include '</html>'
57
+ res.body.wont_include '</html>'
61
58
  end
62
59
  end
63
60
  end
@@ -71,16 +68,14 @@ describe Rack::ShowExceptions do
71
68
  )
72
69
  )
73
70
 
74
- lambda{
75
- res = req.get("/", "HTTP_ACCEPT" => "text/html")
76
- }.should.not.raise
71
+ res = req.get("/", "HTTP_ACCEPT" => "text/html")
77
72
 
78
- res.should.be.a.server_error
79
- res.status.should.equal 500
73
+ res.must_be :server_error?
74
+ res.status.must_equal 500
80
75
 
81
- res.should =~ /RuntimeError/
82
- res.should =~ /ShowExceptions/
83
- res.should =~ /unknown location/
76
+ assert_match(res, /RuntimeError/)
77
+ assert_match(res, /ShowExceptions/)
78
+ assert_match(res, /unknown location/)
84
79
  end
85
80
 
86
81
  it "knows to prefer plaintext for non-html" do
@@ -92,7 +87,7 @@ describe Rack::ShowExceptions do
92
87
  [{ "HTTP_ACCEPT" => "text/foo" }, true],
93
88
  [{ "HTTP_ACCEPT" => "text/html" }, false]
94
89
  ].each do |env, expected|
95
- expected.should.equal exc.prefers_plaintext?(env)
90
+ assert_equal(expected, exc.prefers_plaintext?(env))
96
91
  end
97
92
  end
98
93
  end
@@ -1,4 +1,5 @@
1
- require 'rack/showstatus'
1
+ require 'minitest/autorun'
2
+ require 'rack/show_status'
2
3
  require 'rack/lint'
3
4
  require 'rack/mock'
4
5
  require 'rack/utils'
@@ -7,23 +8,23 @@ describe Rack::ShowStatus do
7
8
  def show_status(app)
8
9
  Rack::Lint.new Rack::ShowStatus.new(app)
9
10
  end
10
-
11
- should "provide a default status message" do
11
+
12
+ it "provide a default status message" do
12
13
  req = Rack::MockRequest.new(
13
14
  show_status(lambda{|env|
14
15
  [404, {"Content-Type" => "text/plain", "Content-Length" => "0"}, []]
15
16
  }))
16
17
 
17
18
  res = req.get("/", :lint => true)
18
- res.should.be.not_found
19
- res.should.be.not.empty
19
+ res.must_be :not_found?
20
+ res.wont_be_empty
20
21
 
21
- res["Content-Type"].should.equal("text/html")
22
- res.should =~ /404/
23
- res.should =~ /Not Found/
22
+ res["Content-Type"].must_equal "text/html"
23
+ assert_match(res, /404/)
24
+ assert_match(res, /Not Found/)
24
25
  end
25
26
 
26
- should "let the app provide additional information" do
27
+ it "let the app provide additional information" do
27
28
  req = Rack::MockRequest.new(
28
29
  show_status(
29
30
  lambda{|env|
@@ -32,16 +33,16 @@ describe Rack::ShowStatus do
32
33
  }))
33
34
 
34
35
  res = req.get("/", :lint => true)
35
- res.should.be.not_found
36
- res.should.be.not.empty
36
+ res.must_be :not_found?
37
+ res.wont_be_empty
37
38
 
38
- res["Content-Type"].should.equal("text/html")
39
- res.should =~ /404/
40
- res.should =~ /Not Found/
41
- res.should =~ /too meta/
39
+ res["Content-Type"].must_equal "text/html"
40
+ assert_match(res, /404/)
41
+ assert_match(res, /Not Found/)
42
+ assert_match(res, /too meta/)
42
43
  end
43
44
 
44
- should "escape error" do
45
+ it "escape error" do
45
46
  detail = "<script>alert('hi \"')</script>"
46
47
  req = Rack::MockRequest.new(
47
48
  show_status(
@@ -51,15 +52,15 @@ describe Rack::ShowStatus do
51
52
  }))
52
53
 
53
54
  res = req.get("/", :lint => true)
54
- res.should.be.not.empty
55
+ res.wont_be_empty
55
56
 
56
- res["Content-Type"].should.equal("text/html")
57
- res.should =~ /500/
58
- res.should.not.include detail
59
- res.body.should.include Rack::Utils.escape_html(detail)
57
+ res["Content-Type"].must_equal "text/html"
58
+ assert_match(res, /500/)
59
+ res.wont_include detail
60
+ res.body.must_include Rack::Utils.escape_html(detail)
60
61
  end
61
62
 
62
- should "not replace existing messages" do
63
+ it "not replace existing messages" do
63
64
  req = Rack::MockRequest.new(
64
65
  show_status(
65
66
  lambda{|env|
@@ -67,22 +68,22 @@ describe Rack::ShowStatus do
67
68
  }))
68
69
 
69
70
  res = req.get("/", :lint => true)
70
- res.should.be.not_found
71
+ res.must_be :not_found?
71
72
 
72
- res.body.should == "foo!"
73
+ res.body.must_equal "foo!"
73
74
  end
74
75
 
75
- should "pass on original headers" do
76
+ it "pass on original headers" do
76
77
  headers = {"WWW-Authenticate" => "Basic blah"}
77
78
 
78
79
  req = Rack::MockRequest.new(
79
80
  show_status(lambda{|env| [401, headers, []] }))
80
81
  res = req.get("/", :lint => true)
81
82
 
82
- res["WWW-Authenticate"].should.equal("Basic blah")
83
+ res["WWW-Authenticate"].must_equal "Basic blah"
83
84
  end
84
85
 
85
- should "replace existing messages if there is detail" do
86
+ it "replace existing messages if there is detail" do
86
87
  req = Rack::MockRequest.new(
87
88
  show_status(
88
89
  lambda{|env|
@@ -91,13 +92,13 @@ describe Rack::ShowStatus do
91
92
  }))
92
93
 
93
94
  res = req.get("/", :lint => true)
94
- res.should.be.not_found
95
- res.should.be.not.empty
96
-
97
- res["Content-Type"].should.equal("text/html")
98
- res["Content-Length"].should.not.equal("4")
99
- res.should =~ /404/
100
- res.should =~ /too meta/
101
- res.body.should.not =~ /foo/
95
+ res.must_be :not_found?
96
+ res.wont_be_empty
97
+
98
+ res["Content-Type"].must_equal "text/html"
99
+ res["Content-Length"].wont_equal "4"
100
+ assert_match(res, /404/)
101
+ assert_match(res, /too meta/)
102
+ res.body.wont_match(/foo/)
102
103
  end
103
104
  end
@@ -1,6 +1,9 @@
1
+ require 'minitest/autorun'
1
2
  require 'rack/static'
2
3
  require 'rack/lint'
3
4
  require 'rack/mock'
5
+ require 'zlib'
6
+ require 'stringio'
4
7
 
5
8
  class DummyApp
6
9
  def call(env)
@@ -18,64 +21,101 @@ describe Rack::Static do
18
21
  OPTIONS = {:urls => ["/cgi"], :root => root}
19
22
  STATIC_OPTIONS = {:urls => [""], :root => "#{root}/static", :index => 'index.html'}
20
23
  HASH_OPTIONS = {:urls => {"/cgi/sekret" => 'cgi/test'}, :root => root}
24
+ HASH_ROOT_OPTIONS = {:urls => {"/" => "static/foo.html"}, :root => root}
25
+ GZIP_OPTIONS = {:urls => ["/cgi"], :root => root, :gzip=>true}
21
26
 
27
+ before do
22
28
  @request = Rack::MockRequest.new(static(DummyApp.new, OPTIONS))
23
29
  @static_request = Rack::MockRequest.new(static(DummyApp.new, STATIC_OPTIONS))
24
30
  @hash_request = Rack::MockRequest.new(static(DummyApp.new, HASH_OPTIONS))
31
+ @hash_root_request = Rack::MockRequest.new(static(DummyApp.new, HASH_ROOT_OPTIONS))
32
+ @gzip_request = Rack::MockRequest.new(static(DummyApp.new, GZIP_OPTIONS))
33
+ @header_request = Rack::MockRequest.new(static(DummyApp.new, HEADER_OPTIONS))
34
+ end
25
35
 
26
36
  it "serves files" do
27
37
  res = @request.get("/cgi/test")
28
- res.should.be.ok
29
- res.body.should =~ /ruby/
38
+ res.must_be :ok?
39
+ res.body.must_match(/ruby/)
30
40
  end
31
41
 
32
42
  it "404s if url root is known but it can't find the file" do
33
43
  res = @request.get("/cgi/foo")
34
- res.should.be.not_found
44
+ res.must_be :not_found?
35
45
  end
36
46
 
37
47
  it "calls down the chain if url root is not known" do
38
48
  res = @request.get("/something/else")
39
- res.should.be.ok
40
- res.body.should == "Hello World"
49
+ res.must_be :ok?
50
+ res.body.must_equal "Hello World"
41
51
  end
42
52
 
43
53
  it "calls index file when requesting root in the given folder" do
44
54
  res = @static_request.get("/")
45
- res.should.be.ok
46
- res.body.should =~ /index!/
55
+ res.must_be :ok?
56
+ res.body.must_match(/index!/)
47
57
 
48
58
  res = @static_request.get("/other/")
49
- res.should.be.not_found
59
+ res.must_be :not_found?
50
60
 
51
61
  res = @static_request.get("/another/")
52
- res.should.be.ok
53
- res.body.should =~ /another index!/
62
+ res.must_be :ok?
63
+ res.body.must_match(/another index!/)
54
64
  end
55
65
 
56
66
  it "doesn't call index file if :index option was omitted" do
57
67
  res = @request.get("/")
58
- res.body.should == "Hello World"
68
+ res.body.must_equal "Hello World"
59
69
  end
60
70
 
61
71
  it "serves hidden files" do
62
72
  res = @hash_request.get("/cgi/sekret")
63
- res.should.be.ok
64
- res.body.should =~ /ruby/
73
+ res.must_be :ok?
74
+ res.body.must_match(/ruby/)
65
75
  end
66
76
 
67
77
  it "calls down the chain if the URI is not specified" do
68
78
  res = @hash_request.get("/something/else")
69
- res.should.be.ok
70
- res.body.should == "Hello World"
79
+ res.must_be :ok?
80
+ res.body.must_equal "Hello World"
81
+ end
82
+
83
+ it "allows the root URI to be configured via hash options" do
84
+ res = @hash_root_request.get("/")
85
+ res.must_be :ok?
86
+ res.body.must_match(/foo.html!/)
87
+ end
88
+
89
+ it "serves gzipped files if client accepts gzip encoding and gzip files are present" do
90
+ res = @gzip_request.get("/cgi/test", 'HTTP_ACCEPT_ENCODING'=>'deflate, gzip')
91
+ res.must_be :ok?
92
+ res.headers['Content-Encoding'].must_equal 'gzip'
93
+ res.headers['Content-Type'].must_equal 'text/plain'
94
+ Zlib::GzipReader.wrap(StringIO.new(res.body), &:read).must_match(/ruby/)
95
+ end
96
+
97
+ it "serves regular files if client accepts gzip encoding and gzip files are not present" do
98
+ res = @gzip_request.get("/cgi/rackup_stub.rb", 'HTTP_ACCEPT_ENCODING'=>'deflate, gzip')
99
+ res.must_be :ok?
100
+ res.headers['Content-Encoding'].must_be_nil
101
+ res.headers['Content-Type'].must_equal 'text/x-script.ruby'
102
+ res.body.must_match(/ruby/)
103
+ end
104
+
105
+ it "serves regular files if client does not accept gzip encoding" do
106
+ res = @gzip_request.get("/cgi/test")
107
+ res.must_be :ok?
108
+ res.headers['Content-Encoding'].must_be_nil
109
+ res.headers['Content-Type'].must_equal 'text/plain'
110
+ res.body.must_match(/ruby/)
71
111
  end
72
112
 
73
113
  it "supports serving fixed cache-control (legacy option)" do
74
114
  opts = OPTIONS.merge(:cache_control => 'public')
75
115
  request = Rack::MockRequest.new(static(DummyApp.new, opts))
76
116
  res = request.get("/cgi/test")
77
- res.should.be.ok
78
- res.headers['Cache-Control'].should == 'public'
117
+ res.must_be :ok?
118
+ res.headers['Cache-Control'].must_equal 'public'
79
119
  end
80
120
 
81
121
  HEADER_OPTIONS = {:urls => ["/cgi"], :root => root, :header_rules => [
@@ -86,47 +126,46 @@ describe Rack::Static do
86
126
  ['cgi/assets/javascripts', {'Cache-Control' => 'public, max-age=500'}],
87
127
  [/\.(css|erb)\z/, {'Cache-Control' => 'public, max-age=600'}]
88
128
  ]}
89
- @header_request = Rack::MockRequest.new(static(DummyApp.new, HEADER_OPTIONS))
90
129
 
91
130
  it "supports header rule :all" do
92
131
  # Headers for all files via :all shortcut
93
132
  res = @header_request.get('/cgi/assets/index.html')
94
- res.should.be.ok
95
- res.headers['Cache-Control'].should == 'public, max-age=100'
133
+ res.must_be :ok?
134
+ res.headers['Cache-Control'].must_equal 'public, max-age=100'
96
135
  end
97
136
 
98
137
  it "supports header rule :fonts" do
99
138
  # Headers for web fonts via :fonts shortcut
100
139
  res = @header_request.get('/cgi/assets/fonts/font.eot')
101
- res.should.be.ok
102
- res.headers['Cache-Control'].should == 'public, max-age=200'
140
+ res.must_be :ok?
141
+ res.headers['Cache-Control'].must_equal 'public, max-age=200'
103
142
  end
104
143
 
105
144
  it "supports file extension header rules provided as an Array" do
106
145
  # Headers for file extensions via array
107
146
  res = @header_request.get('/cgi/assets/images/image.png')
108
- res.should.be.ok
109
- res.headers['Cache-Control'].should == 'public, max-age=300'
147
+ res.must_be :ok?
148
+ res.headers['Cache-Control'].must_equal 'public, max-age=300'
110
149
  end
111
150
 
112
151
  it "supports folder rules provided as a String" do
113
152
  # Headers for files in folder via string
114
153
  res = @header_request.get('/cgi/assets/folder/test.js')
115
- res.should.be.ok
116
- res.headers['Cache-Control'].should == 'public, max-age=400'
154
+ res.must_be :ok?
155
+ res.headers['Cache-Control'].must_equal 'public, max-age=400'
117
156
  end
118
157
 
119
158
  it "supports folder header rules provided as a String not starting with a slash" do
120
159
  res = @header_request.get('/cgi/assets/javascripts/app.js')
121
- res.should.be.ok
122
- res.headers['Cache-Control'].should == 'public, max-age=500'
160
+ res.must_be :ok?
161
+ res.headers['Cache-Control'].must_equal 'public, max-age=500'
123
162
  end
124
163
 
125
164
  it "supports flexible header rules provided as Regexp" do
126
165
  # Flexible Headers via Regexp
127
166
  res = @header_request.get('/cgi/assets/stylesheets/app.css')
128
- res.should.be.ok
129
- res.headers['Cache-Control'].should == 'public, max-age=600'
167
+ res.must_be :ok?
168
+ res.headers['Cache-Control'].must_equal 'public, max-age=600'
130
169
  end
131
170
 
132
171
  it "prioritizes header rules over fixed cache-control setting (legacy option)" do
@@ -138,8 +177,8 @@ describe Rack::Static do
138
177
 
139
178
  request = Rack::MockRequest.new(static(DummyApp.new, opts))
140
179
  res = request.get("/cgi/test")
141
- res.should.be.ok
142
- res.headers['Cache-Control'].should == 'public, max-age=42'
180
+ res.must_be :ok?
181
+ res.headers['Cache-Control'].must_equal 'public, max-age=42'
143
182
  end
144
183
 
145
184
  end
@@ -1,3 +1,4 @@
1
+ require 'minitest/autorun'
1
2
  require 'rack/tempfile_reaper'
2
3
  require 'rack/lint'
3
4
  require 'rack/mock'
@@ -23,33 +24,33 @@ describe Rack::TempfileReaper do
23
24
  Rack::Lint.new(Rack::TempfileReaper.new(app)).call(@env)
24
25
  end
25
26
 
26
- should 'do nothing (i.e. not bomb out) without env[rack.tempfiles]' do
27
+ it 'do nothing (i.e. not bomb out) without env[rack.tempfiles]' do
27
28
  app = lambda { |_| [200, {}, ['Hello, World!']] }
28
29
  response = call(app)
29
30
  response[2].close
30
- response[0].should.equal(200)
31
+ response[0].must_equal 200
31
32
  end
32
33
 
33
- should 'close env[rack.tempfiles] when body is closed' do
34
+ it 'close env[rack.tempfiles] when body is closed' do
34
35
  tempfile1, tempfile2 = MockTempfile.new, MockTempfile.new
35
36
  @env['rack.tempfiles'] = [ tempfile1, tempfile2 ]
36
37
  app = lambda { |_| [200, {}, ['Hello, World!']] }
37
38
  call(app)[2].close
38
- tempfile1.closed.should.equal true
39
- tempfile2.closed.should.equal true
39
+ tempfile1.closed.must_equal true
40
+ tempfile2.closed.must_equal true
40
41
  end
41
42
 
42
- should 'initialize env[rack.tempfiles] when not already present' do
43
+ it 'initialize env[rack.tempfiles] when not already present' do
43
44
  tempfile = MockTempfile.new
44
45
  app = lambda do |env|
45
46
  env['rack.tempfiles'] << tempfile
46
47
  [200, {}, ['Hello, World!']]
47
48
  end
48
49
  call(app)[2].close
49
- tempfile.closed.should.equal true
50
+ tempfile.closed.must_equal true
50
51
  end
51
52
 
52
- should 'append env[rack.tempfiles] when already present' do
53
+ it 'append env[rack.tempfiles] when already present' do
53
54
  tempfile1, tempfile2 = MockTempfile.new, MockTempfile.new
54
55
  @env['rack.tempfiles'] = [ tempfile1 ]
55
56
  app = lambda do |env|
@@ -57,7 +58,7 @@ describe Rack::TempfileReaper do
57
58
  [200, {}, ['Hello, World!']]
58
59
  end
59
60
  call(app)[2].close
60
- tempfile1.closed.should.equal true
61
- tempfile2.closed.should.equal true
61
+ tempfile1.closed.must_equal true
62
+ tempfile2.closed.must_equal true
62
63
  end
63
64
  end