rack 2.0.1 → 2.2.17

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 (189) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +795 -0
  3. data/CONTRIBUTING.md +136 -0
  4. data/{COPYING → MIT-LICENSE} +4 -2
  5. data/README.rdoc +188 -145
  6. data/Rakefile +37 -23
  7. data/{SPEC → SPEC.rdoc} +46 -17
  8. data/bin/rackup +1 -0
  9. data/example/lobster.ru +2 -0
  10. data/example/protectedlobster.rb +3 -1
  11. data/example/protectedlobster.ru +2 -0
  12. data/lib/rack/auth/abstract/handler.rb +3 -1
  13. data/lib/rack/auth/abstract/request.rb +1 -1
  14. data/lib/rack/auth/basic.rb +6 -4
  15. data/lib/rack/auth/digest/md5.rb +13 -11
  16. data/lib/rack/auth/digest/nonce.rb +5 -3
  17. data/lib/rack/auth/digest/params.rb +4 -2
  18. data/lib/rack/auth/digest/request.rb +5 -3
  19. data/lib/rack/body_proxy.rb +15 -14
  20. data/lib/rack/builder.rb +116 -23
  21. data/lib/rack/cascade.rb +28 -12
  22. data/lib/rack/chunked.rb +68 -20
  23. data/lib/rack/common_logger.rb +37 -25
  24. data/lib/rack/conditional_get.rb +20 -16
  25. data/lib/rack/config.rb +2 -0
  26. data/lib/rack/content_length.rb +8 -7
  27. data/lib/rack/content_type.rb +5 -4
  28. data/lib/rack/core_ext/regexp.rb +14 -0
  29. data/lib/rack/deflater.rb +60 -70
  30. data/lib/rack/directory.rb +84 -64
  31. data/lib/rack/etag.rb +8 -5
  32. data/lib/rack/events.rb +19 -20
  33. data/lib/rack/file.rb +4 -173
  34. data/lib/rack/files.rb +218 -0
  35. data/lib/rack/handler/cgi.rb +2 -3
  36. data/lib/rack/handler/fastcgi.rb +4 -4
  37. data/lib/rack/handler/lsws.rb +3 -3
  38. data/lib/rack/handler/scgi.rb +9 -8
  39. data/lib/rack/handler/thin.rb +3 -3
  40. data/lib/rack/handler/webrick.rb +19 -10
  41. data/lib/rack/handler.rb +7 -2
  42. data/lib/rack/head.rb +1 -1
  43. data/lib/rack/lint.rb +221 -186
  44. data/lib/rack/lobster.rb +10 -10
  45. data/lib/rack/lock.rb +14 -4
  46. data/lib/rack/logger.rb +2 -0
  47. data/lib/rack/media_type.rb +23 -8
  48. data/lib/rack/method_override.rb +13 -4
  49. data/lib/rack/mime.rb +9 -1
  50. data/lib/rack/mock.rb +135 -29
  51. data/lib/rack/multipart/generator.rb +17 -13
  52. data/lib/rack/multipart/parser.rb +85 -68
  53. data/lib/rack/multipart/uploaded_file.rb +15 -7
  54. data/lib/rack/multipart.rb +6 -5
  55. data/lib/rack/null_logger.rb +2 -0
  56. data/lib/rack/query_parser.rb +108 -36
  57. data/lib/rack/recursive.rb +7 -5
  58. data/lib/rack/reloader.rb +8 -4
  59. data/lib/rack/request.rb +232 -60
  60. data/lib/rack/response.rb +127 -44
  61. data/lib/rack/rewindable_input.rb +4 -3
  62. data/lib/rack/runtime.rb +6 -4
  63. data/lib/rack/sendfile.rb +14 -10
  64. data/lib/rack/server.rb +97 -25
  65. data/lib/rack/session/abstract/id.rb +113 -25
  66. data/lib/rack/session/cookie.rb +22 -14
  67. data/lib/rack/session/memcache.rb +4 -87
  68. data/lib/rack/session/pool.rb +24 -10
  69. data/lib/rack/show_exceptions.rb +22 -18
  70. data/lib/rack/show_status.rb +9 -9
  71. data/lib/rack/static.rb +25 -12
  72. data/lib/rack/tempfile_reaper.rb +1 -1
  73. data/lib/rack/urlmap.rb +13 -7
  74. data/lib/rack/utils.rb +135 -123
  75. data/lib/rack/version.rb +29 -0
  76. data/lib/rack.rb +67 -73
  77. data/rack.gemspec +40 -29
  78. metadata +25 -184
  79. data/HISTORY.md +0 -505
  80. data/test/builder/an_underscore_app.rb +0 -5
  81. data/test/builder/anything.rb +0 -5
  82. data/test/builder/comment.ru +0 -4
  83. data/test/builder/end.ru +0 -5
  84. data/test/builder/line.ru +0 -1
  85. data/test/builder/options.ru +0 -2
  86. data/test/cgi/assets/folder/test.js +0 -1
  87. data/test/cgi/assets/fonts/font.eot +0 -1
  88. data/test/cgi/assets/images/image.png +0 -1
  89. data/test/cgi/assets/index.html +0 -1
  90. data/test/cgi/assets/javascripts/app.js +0 -1
  91. data/test/cgi/assets/stylesheets/app.css +0 -1
  92. data/test/cgi/lighttpd.conf +0 -26
  93. data/test/cgi/rackup_stub.rb +0 -6
  94. data/test/cgi/sample_rackup.ru +0 -5
  95. data/test/cgi/test +0 -9
  96. data/test/cgi/test+directory/test+file +0 -1
  97. data/test/cgi/test.fcgi +0 -9
  98. data/test/cgi/test.gz +0 -0
  99. data/test/cgi/test.ru +0 -5
  100. data/test/gemloader.rb +0 -10
  101. data/test/helper.rb +0 -34
  102. data/test/multipart/bad_robots +0 -259
  103. data/test/multipart/binary +0 -0
  104. data/test/multipart/content_type_and_no_filename +0 -6
  105. data/test/multipart/empty +0 -10
  106. data/test/multipart/fail_16384_nofile +0 -814
  107. data/test/multipart/file1.txt +0 -1
  108. data/test/multipart/filename_and_modification_param +0 -7
  109. data/test/multipart/filename_and_no_name +0 -6
  110. data/test/multipart/filename_with_encoded_words +0 -7
  111. data/test/multipart/filename_with_escaped_quotes +0 -6
  112. data/test/multipart/filename_with_escaped_quotes_and_modification_param +0 -7
  113. data/test/multipart/filename_with_percent_escaped_quotes +0 -6
  114. data/test/multipart/filename_with_single_quote +0 -7
  115. data/test/multipart/filename_with_unescaped_percentages +0 -6
  116. data/test/multipart/filename_with_unescaped_percentages2 +0 -6
  117. data/test/multipart/filename_with_unescaped_percentages3 +0 -6
  118. data/test/multipart/filename_with_unescaped_quotes +0 -6
  119. data/test/multipart/ie +0 -6
  120. data/test/multipart/invalid_character +0 -6
  121. data/test/multipart/mixed_files +0 -21
  122. data/test/multipart/nested +0 -10
  123. data/test/multipart/none +0 -9
  124. data/test/multipart/quoted +0 -15
  125. data/test/multipart/rack-logo.png +0 -0
  126. data/test/multipart/semicolon +0 -6
  127. data/test/multipart/text +0 -15
  128. data/test/multipart/three_files_three_fields +0 -31
  129. data/test/multipart/unity3d_wwwform +0 -11
  130. data/test/multipart/webkit +0 -32
  131. data/test/rackup/config.ru +0 -31
  132. data/test/registering_handler/rack/handler/registering_myself.rb +0 -8
  133. data/test/spec_auth_basic.rb +0 -89
  134. data/test/spec_auth_digest.rb +0 -260
  135. data/test/spec_body_proxy.rb +0 -85
  136. data/test/spec_builder.rb +0 -233
  137. data/test/spec_cascade.rb +0 -63
  138. data/test/spec_cgi.rb +0 -84
  139. data/test/spec_chunked.rb +0 -103
  140. data/test/spec_common_logger.rb +0 -95
  141. data/test/spec_conditional_get.rb +0 -103
  142. data/test/spec_config.rb +0 -23
  143. data/test/spec_content_length.rb +0 -86
  144. data/test/spec_content_type.rb +0 -46
  145. data/test/spec_deflater.rb +0 -365
  146. data/test/spec_directory.rb +0 -148
  147. data/test/spec_etag.rb +0 -108
  148. data/test/spec_events.rb +0 -133
  149. data/test/spec_fastcgi.rb +0 -85
  150. data/test/spec_file.rb +0 -251
  151. data/test/spec_handler.rb +0 -57
  152. data/test/spec_head.rb +0 -46
  153. data/test/spec_lint.rb +0 -515
  154. data/test/spec_lobster.rb +0 -59
  155. data/test/spec_lock.rb +0 -194
  156. data/test/spec_logger.rb +0 -24
  157. data/test/spec_media_type.rb +0 -42
  158. data/test/spec_method_override.rb +0 -83
  159. data/test/spec_mime.rb +0 -51
  160. data/test/spec_mock.rb +0 -342
  161. data/test/spec_multipart.rb +0 -716
  162. data/test/spec_null_logger.rb +0 -21
  163. data/test/spec_recursive.rb +0 -75
  164. data/test/spec_request.rb +0 -1393
  165. data/test/spec_response.rb +0 -510
  166. data/test/spec_rewindable_input.rb +0 -128
  167. data/test/spec_runtime.rb +0 -50
  168. data/test/spec_sendfile.rb +0 -125
  169. data/test/spec_server.rb +0 -193
  170. data/test/spec_session_abstract_id.rb +0 -31
  171. data/test/spec_session_abstract_session_hash.rb +0 -28
  172. data/test/spec_session_cookie.rb +0 -442
  173. data/test/spec_session_memcache.rb +0 -320
  174. data/test/spec_session_pool.rb +0 -210
  175. data/test/spec_show_exceptions.rb +0 -80
  176. data/test/spec_show_status.rb +0 -104
  177. data/test/spec_static.rb +0 -184
  178. data/test/spec_tempfile_reaper.rb +0 -64
  179. data/test/spec_thin.rb +0 -96
  180. data/test/spec_urlmap.rb +0 -237
  181. data/test/spec_utils.rb +0 -742
  182. data/test/spec_version.rb +0 -11
  183. data/test/spec_webrick.rb +0 -208
  184. data/test/static/another/index.html +0 -1
  185. data/test/static/foo.html +0 -1
  186. data/test/static/index.html +0 -1
  187. data/test/testrequest.rb +0 -78
  188. data/test/unregistered_handler/rack/handler/unregistered.rb +0 -7
  189. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +0 -7
data/test/spec_lock.rb DELETED
@@ -1,194 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'rack/lint'
3
- require 'rack/lock'
4
- require 'rack/mock'
5
-
6
- class Lock
7
- attr_reader :synchronized
8
-
9
- def initialize
10
- @synchronized = false
11
- end
12
-
13
- def lock
14
- @synchronized = true
15
- end
16
-
17
- def unlock
18
- @synchronized = false
19
- end
20
- end
21
-
22
- module LockHelpers
23
- def lock_app(app, lock = Lock.new)
24
- app = if lock
25
- Rack::Lock.new app, lock
26
- else
27
- Rack::Lock.new app
28
- end
29
- Rack::Lint.new app
30
- end
31
- end
32
-
33
- describe Rack::Lock do
34
- include LockHelpers
35
-
36
- describe 'Proxy' do
37
- include LockHelpers
38
-
39
- it 'delegate each' do
40
- env = Rack::MockRequest.env_for("/")
41
- response = Class.new {
42
- attr_accessor :close_called
43
- def initialize; @close_called = false; end
44
- def each; %w{ hi mom }.each { |x| yield x }; end
45
- }.new
46
-
47
- app = lock_app(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, response] })
48
- response = app.call(env)[2]
49
- list = []
50
- response.each { |x| list << x }
51
- list.must_equal %w{ hi mom }
52
- end
53
-
54
- it 'delegate to_path' do
55
- lock = Lock.new
56
- env = Rack::MockRequest.env_for("/")
57
-
58
- res = ['Hello World']
59
- def res.to_path ; "/tmp/hello.txt" ; end
60
-
61
- app = Rack::Lock.new(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, res] }, lock)
62
- body = app.call(env)[2]
63
-
64
- body.must_respond_to :to_path
65
- body.to_path.must_equal "/tmp/hello.txt"
66
- end
67
-
68
- it 'not delegate to_path if body does not implement it' do
69
- env = Rack::MockRequest.env_for("/")
70
-
71
- res = ['Hello World']
72
-
73
- app = lock_app(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, res] })
74
- body = app.call(env)[2]
75
-
76
- body.wont_respond_to :to_path
77
- end
78
- end
79
-
80
- it 'call super on close' do
81
- env = Rack::MockRequest.env_for("/")
82
- response = Class.new {
83
- attr_accessor :close_called
84
- def initialize; @close_called = false; end
85
- def close; @close_called = true; end
86
- }.new
87
-
88
- app = lock_app(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, response] })
89
- app.call(env)
90
- response.close_called.must_equal false
91
- response.close
92
- response.close_called.must_equal true
93
- end
94
-
95
- it "not unlock until body is closed" do
96
- lock = Lock.new
97
- env = Rack::MockRequest.env_for("/")
98
- response = Object.new
99
- app = lock_app(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, response] }, lock)
100
- lock.synchronized.must_equal false
101
- response = app.call(env)[2]
102
- lock.synchronized.must_equal true
103
- response.close
104
- lock.synchronized.must_equal false
105
- end
106
-
107
- it "return value from app" do
108
- env = Rack::MockRequest.env_for("/")
109
- body = [200, {"Content-Type" => "text/plain"}, %w{ hi mom }]
110
- app = lock_app(lambda { |inner_env| body })
111
-
112
- res = app.call(env)
113
- res[0].must_equal body[0]
114
- res[1].must_equal body[1]
115
- res[2].to_enum.to_a.must_equal ["hi", "mom"]
116
- end
117
-
118
- it "call synchronize on lock" do
119
- lock = Lock.new
120
- env = Rack::MockRequest.env_for("/")
121
- app = lock_app(lambda { |inner_env| [200, {"Content-Type" => "text/plain"}, %w{ a b c }] }, lock)
122
- lock.synchronized.must_equal false
123
- app.call(env)
124
- lock.synchronized.must_equal true
125
- end
126
-
127
- it "unlock if the app raises" do
128
- lock = Lock.new
129
- env = Rack::MockRequest.env_for("/")
130
- app = lock_app(lambda { raise Exception }, lock)
131
- lambda { app.call(env) }.must_raise Exception
132
- lock.synchronized.must_equal false
133
- end
134
-
135
- it "unlock if the app throws" do
136
- lock = Lock.new
137
- env = Rack::MockRequest.env_for("/")
138
- app = lock_app(lambda {|_| throw :bacon }, lock)
139
- lambda { app.call(env) }.must_throw :bacon
140
- lock.synchronized.must_equal false
141
- end
142
-
143
- it "set multithread flag to false" do
144
- app = lock_app(lambda { |env|
145
- env['rack.multithread'].must_equal false
146
- [200, {"Content-Type" => "text/plain"}, %w{ a b c }]
147
- }, false)
148
- env = Rack::MockRequest.env_for("/")
149
- env['rack.multithread'].must_equal true
150
- app.call(env)
151
- env['rack.multithread'].must_equal true
152
- end
153
-
154
- it "reset original multithread flag when exiting lock" do
155
- app = Class.new(Rack::Lock) {
156
- def call(env)
157
- env['rack.multithread'].must_equal true
158
- super
159
- end
160
- }.new(lambda { |env| [200, {"Content-Type" => "text/plain"}, %w{ a b c }] })
161
- Rack::Lint.new(app).call(Rack::MockRequest.env_for("/"))
162
- end
163
-
164
- it 'not unlock if an error is raised before the mutex is locked' do
165
- lock = Class.new do
166
- def initialize() @unlocked = false end
167
- def unlocked?() @unlocked end
168
- def lock() raise Exception end
169
- def unlock() @unlocked = true end
170
- end.new
171
- env = Rack::MockRequest.env_for("/")
172
- app = lock_app(proc { [200, {"Content-Type" => "text/plain"}, []] }, lock)
173
- lambda { app.call(env) }.must_raise Exception
174
- lock.unlocked?.must_equal false
175
- end
176
-
177
- it "not reset the environment while the body is proxied" do
178
- proxy = Class.new do
179
- attr_reader :env
180
- def initialize(env) @env = env end
181
- end
182
- app = Rack::Lock.new lambda { |env| [200, {"Content-Type" => "text/plain"}, proxy.new(env)] }
183
- response = app.call(Rack::MockRequest.env_for("/"))[2]
184
- response.env['rack.multithread'].must_equal false
185
- end
186
-
187
- it "unlock if an exception occurs before returning" do
188
- lock = Lock.new
189
- env = Rack::MockRequest.env_for("/")
190
- app = lock_app(proc { [].freeze }, lock)
191
- lambda { app.call(env) }.must_raise Exception
192
- lock.synchronized.must_equal false
193
- end
194
- end
data/test/spec_logger.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'stringio'
3
- require 'rack/lint'
4
- require 'rack/logger'
5
- require 'rack/mock'
6
-
7
- describe Rack::Logger do
8
- app = lambda { |env|
9
- log = env['rack.logger']
10
- log.debug("Created logger")
11
- log.info("Program started")
12
- log.warn("Nothing to do!")
13
-
14
- [200, {'Content-Type' => 'text/plain'}, ["Hello, World!"]]
15
- }
16
-
17
- it "conform to Rack::Lint" do
18
- errors = StringIO.new
19
- a = Rack::Lint.new(Rack::Logger.new(app))
20
- Rack::MockRequest.new(a).get('/', 'rack.errors' => errors)
21
- errors.string.must_match(/INFO -- : Program started/)
22
- errors.string.must_match(/WARN -- : Nothing to do/)
23
- end
24
- end
@@ -1,42 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'rack/media_type'
3
-
4
- describe Rack::MediaType do
5
- before { @empty_hash = {} }
6
-
7
- describe 'when content_type nil' do
8
- before { @content_type = nil }
9
-
10
- it '#type is nil' do
11
- Rack::MediaType.type(@content_type).must_equal nil
12
- end
13
-
14
- it '#params is empty' do
15
- Rack::MediaType.params(@content_type).must_equal @empty_hash
16
- end
17
- end
18
-
19
- describe 'when content_type contains only media_type' do
20
- before { @content_type = 'application/text' }
21
-
22
- it '#type is application/text' do
23
- Rack::MediaType.type(@content_type).must_equal 'application/text'
24
- end
25
-
26
- it '#params is empty' do
27
- Rack::MediaType.params(@content_type).must_equal @empty_hash
28
- end
29
- end
30
-
31
- describe 'when content_type contains media_type and params' do
32
- before { @content_type = 'application/text;CHARSET="utf-8"' }
33
-
34
- it '#type is application/text' do
35
- Rack::MediaType.type(@content_type).must_equal 'application/text'
36
- end
37
-
38
- it '#params has key "charset" with value "utf-8"' do
39
- Rack::MediaType.params(@content_type)['charset'].must_equal 'utf-8'
40
- end
41
- end
42
- end
@@ -1,83 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'stringio'
3
- require 'rack/method_override'
4
- require 'rack/mock'
5
-
6
- describe Rack::MethodOverride do
7
- def app
8
- Rack::Lint.new(Rack::MethodOverride.new(lambda {|e|
9
- [200, {"Content-Type" => "text/plain"}, []]
10
- }))
11
- end
12
-
13
- it "not affect GET requests" do
14
- env = Rack::MockRequest.env_for("/?_method=delete", :method => "GET")
15
- app.call env
16
-
17
- env["REQUEST_METHOD"].must_equal "GET"
18
- end
19
-
20
- it "modify REQUEST_METHOD for POST requests when _method parameter is set" do
21
- env = Rack::MockRequest.env_for("/", :method => "POST", :input => "_method=put")
22
- app.call env
23
-
24
- env["REQUEST_METHOD"].must_equal "PUT"
25
- end
26
-
27
- it "modify REQUEST_METHOD for POST requests when X-HTTP-Method-Override is set" do
28
- env = Rack::MockRequest.env_for("/",
29
- :method => "POST",
30
- "HTTP_X_HTTP_METHOD_OVERRIDE" => "PATCH"
31
- )
32
- app.call env
33
-
34
- env["REQUEST_METHOD"].must_equal "PATCH"
35
- end
36
-
37
- it "not modify REQUEST_METHOD if the method is unknown" do
38
- env = Rack::MockRequest.env_for("/", :method => "POST", :input => "_method=foo")
39
- app.call env
40
-
41
- env["REQUEST_METHOD"].must_equal "POST"
42
- end
43
-
44
- it "not modify REQUEST_METHOD when _method is nil" do
45
- env = Rack::MockRequest.env_for("/", :method => "POST", :input => "foo=bar")
46
- app.call env
47
-
48
- env["REQUEST_METHOD"].must_equal "POST"
49
- end
50
-
51
- it "store the original REQUEST_METHOD prior to overriding" do
52
- env = Rack::MockRequest.env_for("/",
53
- :method => "POST",
54
- :input => "_method=options")
55
- app.call env
56
-
57
- env["rack.methodoverride.original_method"].must_equal "POST"
58
- end
59
-
60
- it "not modify REQUEST_METHOD when given invalid multipart form data" do
61
- input = <<EOF
62
- --AaB03x\r
63
- content-disposition: form-data; name="huge"; filename="huge"\r
64
- EOF
65
- env = Rack::MockRequest.env_for("/",
66
- "CONTENT_TYPE" => "multipart/form-data, boundary=AaB03x",
67
- "CONTENT_LENGTH" => input.size.to_s,
68
- :method => "POST", :input => input)
69
- begin
70
- app.call env
71
- rescue EOFError
72
- end
73
-
74
- env["REQUEST_METHOD"].must_equal "POST"
75
- end
76
-
77
- it "not modify REQUEST_METHOD for POST requests when the params are unparseable" do
78
- env = Rack::MockRequest.env_for("/", :method => "POST", :input => "(%bad-params%)")
79
- app.call env
80
-
81
- env["REQUEST_METHOD"].must_equal "POST"
82
- end
83
- end
data/test/spec_mime.rb DELETED
@@ -1,51 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'rack/mime'
3
-
4
- describe Rack::Mime do
5
-
6
- it "should return the fallback mime-type for files with no extension" do
7
- fallback = 'image/jpg'
8
- Rack::Mime.mime_type(File.extname('no_ext'), fallback).must_equal fallback
9
- end
10
-
11
- it "should always return 'application/octet-stream' for unknown file extensions" do
12
- unknown_ext = File.extname('unknown_ext.abcdefg')
13
- Rack::Mime.mime_type(unknown_ext).must_equal 'application/octet-stream'
14
- end
15
-
16
- it "should return the mime-type for a given extension" do
17
- # sanity check. it would be infeasible test every single mime-type.
18
- Rack::Mime.mime_type(File.extname('image.jpg')).must_equal 'image/jpeg'
19
- end
20
-
21
- it "should support null fallbacks" do
22
- Rack::Mime.mime_type('.nothing', nil).must_equal nil
23
- end
24
-
25
- it "should match exact mimes" do
26
- Rack::Mime.match?('text/html', 'text/html').must_equal true
27
- Rack::Mime.match?('text/html', 'text/meme').must_equal false
28
- Rack::Mime.match?('text', 'text').must_equal true
29
- Rack::Mime.match?('text', 'binary').must_equal false
30
- end
31
-
32
- it "should match class wildcard mimes" do
33
- Rack::Mime.match?('text/html', 'text/*').must_equal true
34
- Rack::Mime.match?('text/plain', 'text/*').must_equal true
35
- Rack::Mime.match?('application/json', 'text/*').must_equal false
36
- Rack::Mime.match?('text/html', 'text').must_equal true
37
- end
38
-
39
- it "should match full wildcards" do
40
- Rack::Mime.match?('text/html', '*').must_equal true
41
- Rack::Mime.match?('text/plain', '*').must_equal true
42
- Rack::Mime.match?('text/html', '*/*').must_equal true
43
- Rack::Mime.match?('text/plain', '*/*').must_equal true
44
- end
45
-
46
- it "should match type wildcard mimes" do
47
- Rack::Mime.match?('text/html', '*/html').must_equal true
48
- Rack::Mime.match?('text/plain', '*/plain').must_equal true
49
- end
50
-
51
- end