rack 2.0.4 → 2.1.0

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 (187) hide show
  1. checksums.yaml +4 -4
  2. data/{HISTORY.md → CHANGELOG.md} +220 -155
  3. data/{COPYING → MIT-LICENSE} +4 -2
  4. data/README.rdoc +77 -119
  5. data/Rakefile +25 -18
  6. data/SPEC +3 -4
  7. data/bin/rackup +1 -0
  8. data/example/lobster.ru +2 -0
  9. data/example/protectedlobster.rb +3 -1
  10. data/example/protectedlobster.ru +2 -0
  11. data/lib/rack.rb +63 -60
  12. data/lib/rack/auth/abstract/handler.rb +3 -1
  13. data/lib/rack/auth/abstract/request.rb +2 -0
  14. data/lib/rack/auth/basic.rb +4 -1
  15. data/lib/rack/auth/digest/md5.rb +9 -7
  16. data/lib/rack/auth/digest/nonce.rb +6 -3
  17. data/lib/rack/auth/digest/params.rb +4 -2
  18. data/lib/rack/auth/digest/request.rb +2 -0
  19. data/lib/rack/body_proxy.rb +3 -6
  20. data/lib/rack/builder.rb +38 -15
  21. data/lib/rack/cascade.rb +6 -5
  22. data/lib/rack/chunked.rb +29 -6
  23. data/lib/rack/common_logger.rb +9 -8
  24. data/lib/rack/conditional_get.rb +3 -1
  25. data/lib/rack/config.rb +2 -0
  26. data/lib/rack/content_length.rb +3 -1
  27. data/lib/rack/content_type.rb +3 -1
  28. data/lib/rack/core_ext/regexp.rb +14 -0
  29. data/lib/rack/deflater.rb +28 -17
  30. data/lib/rack/directory.rb +17 -14
  31. data/lib/rack/etag.rb +3 -1
  32. data/lib/rack/events.rb +5 -3
  33. data/lib/rack/file.rb +5 -173
  34. data/lib/rack/files.rb +178 -0
  35. data/lib/rack/handler.rb +7 -2
  36. data/lib/rack/handler/cgi.rb +3 -1
  37. data/lib/rack/handler/fastcgi.rb +4 -2
  38. data/lib/rack/handler/lsws.rb +3 -1
  39. data/lib/rack/handler/scgi.rb +9 -6
  40. data/lib/rack/handler/thin.rb +3 -1
  41. data/lib/rack/handler/webrick.rb +4 -2
  42. data/lib/rack/head.rb +2 -0
  43. data/lib/rack/lint.rb +14 -11
  44. data/lib/rack/lobster.rb +7 -5
  45. data/lib/rack/lock.rb +2 -0
  46. data/lib/rack/logger.rb +2 -0
  47. data/lib/rack/media_type.rb +10 -5
  48. data/lib/rack/method_override.rb +9 -3
  49. data/lib/rack/mime.rb +9 -1
  50. data/lib/rack/mock.rb +74 -15
  51. data/lib/rack/multipart.rb +5 -3
  52. data/lib/rack/multipart/generator.rb +6 -7
  53. data/lib/rack/multipart/parser.rb +54 -51
  54. data/lib/rack/multipart/uploaded_file.rb +2 -0
  55. data/lib/rack/null_logger.rb +2 -0
  56. data/lib/rack/query_parser.rb +51 -25
  57. data/lib/rack/recursive.rb +7 -5
  58. data/lib/rack/reloader.rb +10 -4
  59. data/lib/rack/request.rb +89 -23
  60. data/lib/rack/response.rb +71 -31
  61. data/lib/rack/rewindable_input.rb +4 -2
  62. data/lib/rack/runtime.rb +4 -2
  63. data/lib/rack/sendfile.rb +15 -8
  64. data/lib/rack/server.rb +88 -16
  65. data/lib/rack/session/abstract/id.rb +104 -21
  66. data/lib/rack/session/cookie.rb +21 -11
  67. data/lib/rack/session/memcache.rb +4 -87
  68. data/lib/rack/session/pool.rb +17 -8
  69. data/lib/rack/show_exceptions.rb +16 -10
  70. data/lib/rack/show_status.rb +4 -2
  71. data/lib/rack/static.rb +15 -10
  72. data/lib/rack/tempfile_reaper.rb +2 -0
  73. data/lib/rack/urlmap.rb +11 -2
  74. data/lib/rack/utils.rb +55 -70
  75. data/rack.gemspec +19 -9
  76. metadata +32 -173
  77. data/test/builder/an_underscore_app.rb +0 -5
  78. data/test/builder/anything.rb +0 -5
  79. data/test/builder/comment.ru +0 -4
  80. data/test/builder/end.ru +0 -5
  81. data/test/builder/line.ru +0 -1
  82. data/test/builder/options.ru +0 -2
  83. data/test/cgi/assets/folder/test.js +0 -1
  84. data/test/cgi/assets/fonts/font.eot +0 -1
  85. data/test/cgi/assets/images/image.png +0 -1
  86. data/test/cgi/assets/index.html +0 -1
  87. data/test/cgi/assets/javascripts/app.js +0 -1
  88. data/test/cgi/assets/stylesheets/app.css +0 -1
  89. data/test/cgi/lighttpd.conf +0 -26
  90. data/test/cgi/rackup_stub.rb +0 -6
  91. data/test/cgi/sample_rackup.ru +0 -5
  92. data/test/cgi/test +0 -9
  93. data/test/cgi/test+directory/test+file +0 -1
  94. data/test/cgi/test.fcgi +0 -9
  95. data/test/cgi/test.gz +0 -0
  96. data/test/cgi/test.ru +0 -5
  97. data/test/gemloader.rb +0 -10
  98. data/test/helper.rb +0 -34
  99. data/test/multipart/bad_robots +0 -259
  100. data/test/multipart/binary +0 -0
  101. data/test/multipart/content_type_and_no_filename +0 -6
  102. data/test/multipart/empty +0 -10
  103. data/test/multipart/fail_16384_nofile +0 -814
  104. data/test/multipart/file1.txt +0 -1
  105. data/test/multipart/filename_and_modification_param +0 -7
  106. data/test/multipart/filename_and_no_name +0 -6
  107. data/test/multipart/filename_with_encoded_words +0 -7
  108. data/test/multipart/filename_with_escaped_quotes +0 -6
  109. data/test/multipart/filename_with_escaped_quotes_and_modification_param +0 -7
  110. data/test/multipart/filename_with_null_byte +0 -7
  111. data/test/multipart/filename_with_percent_escaped_quotes +0 -6
  112. data/test/multipart/filename_with_single_quote +0 -7
  113. data/test/multipart/filename_with_unescaped_percentages +0 -6
  114. data/test/multipart/filename_with_unescaped_percentages2 +0 -6
  115. data/test/multipart/filename_with_unescaped_percentages3 +0 -6
  116. data/test/multipart/filename_with_unescaped_quotes +0 -6
  117. data/test/multipart/ie +0 -6
  118. data/test/multipart/invalid_character +0 -6
  119. data/test/multipart/mixed_files +0 -21
  120. data/test/multipart/nested +0 -10
  121. data/test/multipart/none +0 -9
  122. data/test/multipart/quoted +0 -15
  123. data/test/multipart/rack-logo.png +0 -0
  124. data/test/multipart/semicolon +0 -6
  125. data/test/multipart/text +0 -15
  126. data/test/multipart/three_files_three_fields +0 -31
  127. data/test/multipart/unity3d_wwwform +0 -11
  128. data/test/multipart/webkit +0 -32
  129. data/test/rackup/config.ru +0 -31
  130. data/test/registering_handler/rack/handler/registering_myself.rb +0 -8
  131. data/test/spec_auth_basic.rb +0 -89
  132. data/test/spec_auth_digest.rb +0 -260
  133. data/test/spec_body_proxy.rb +0 -85
  134. data/test/spec_builder.rb +0 -233
  135. data/test/spec_cascade.rb +0 -63
  136. data/test/spec_cgi.rb +0 -84
  137. data/test/spec_chunked.rb +0 -103
  138. data/test/spec_common_logger.rb +0 -95
  139. data/test/spec_conditional_get.rb +0 -103
  140. data/test/spec_config.rb +0 -23
  141. data/test/spec_content_length.rb +0 -86
  142. data/test/spec_content_type.rb +0 -46
  143. data/test/spec_deflater.rb +0 -375
  144. data/test/spec_directory.rb +0 -148
  145. data/test/spec_etag.rb +0 -108
  146. data/test/spec_events.rb +0 -133
  147. data/test/spec_fastcgi.rb +0 -85
  148. data/test/spec_file.rb +0 -264
  149. data/test/spec_handler.rb +0 -57
  150. data/test/spec_head.rb +0 -46
  151. data/test/spec_lint.rb +0 -515
  152. data/test/spec_lobster.rb +0 -59
  153. data/test/spec_lock.rb +0 -204
  154. data/test/spec_logger.rb +0 -24
  155. data/test/spec_media_type.rb +0 -42
  156. data/test/spec_method_override.rb +0 -96
  157. data/test/spec_mime.rb +0 -51
  158. data/test/spec_mock.rb +0 -359
  159. data/test/spec_multipart.rb +0 -722
  160. data/test/spec_null_logger.rb +0 -21
  161. data/test/spec_recursive.rb +0 -75
  162. data/test/spec_request.rb +0 -1393
  163. data/test/spec_response.rb +0 -510
  164. data/test/spec_rewindable_input.rb +0 -128
  165. data/test/spec_runtime.rb +0 -50
  166. data/test/spec_sendfile.rb +0 -125
  167. data/test/spec_server.rb +0 -193
  168. data/test/spec_session_abstract_id.rb +0 -31
  169. data/test/spec_session_abstract_session_hash.rb +0 -45
  170. data/test/spec_session_cookie.rb +0 -442
  171. data/test/spec_session_memcache.rb +0 -320
  172. data/test/spec_session_pool.rb +0 -210
  173. data/test/spec_show_exceptions.rb +0 -80
  174. data/test/spec_show_status.rb +0 -104
  175. data/test/spec_static.rb +0 -184
  176. data/test/spec_tempfile_reaper.rb +0 -64
  177. data/test/spec_thin.rb +0 -96
  178. data/test/spec_urlmap.rb +0 -237
  179. data/test/spec_utils.rb +0 -742
  180. data/test/spec_version.rb +0 -11
  181. data/test/spec_webrick.rb +0 -206
  182. data/test/static/another/index.html +0 -1
  183. data/test/static/foo.html +0 -1
  184. data/test/static/index.html +0 -1
  185. data/test/testrequest.rb +0 -78
  186. data/test/unregistered_handler/rack/handler/unregistered.rb +0 -7
  187. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +0 -7
@@ -1,4 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
+ # frozen_string_literal: true
3
+
2
4
  require 'uri'
3
5
  require 'fileutils'
4
6
  require 'set'
@@ -6,11 +8,15 @@ require 'tempfile'
6
8
  require 'rack/query_parser'
7
9
  require 'time'
8
10
 
11
+ require_relative 'core_ext/regexp'
12
+
9
13
  module Rack
10
14
  # Rack::Utils contains a grab-bag of useful methods for writing web
11
15
  # applications adopted from all kinds of Ruby libraries.
12
16
 
13
17
  module Utils
18
+ using ::Rack::RegexpExtensions
19
+
14
20
  ParameterTypeError = QueryParser::ParameterTypeError
15
21
  InvalidParameterError = QueryParser::InvalidParameterError
16
22
  DEFAULT_SEP = QueryParser::DEFAULT_SEP
@@ -118,7 +124,7 @@ module Rack
118
124
  when Hash
119
125
  value.map { |k, v|
120
126
  build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
121
- }.reject(&:empty?).join('&')
127
+ }.delete_if(&:empty?).join('&')
122
128
  when nil
123
129
  prefix
124
130
  else
@@ -132,7 +138,7 @@ module Rack
132
138
  q_value_header.to_s.split(/\s*,\s*/).map do |part|
133
139
  value, parameters = part.split(/\s*;\s*/, 2)
134
140
  quality = 1.0
135
- if md = /\Aq=([\d.]+)/.match(parameters)
141
+ if parameters && (md = /\Aq=([\d.]+)/.match(parameters))
136
142
  quality = md[1].to_f
137
143
  end
138
144
  [value, quality]
@@ -175,27 +181,26 @@ module Rack
175
181
  # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
176
182
 
177
183
  expanded_accept_encoding =
178
- accept_encoding.map { |m, q|
184
+ accept_encoding.each_with_object([]) do |(m, q), list|
179
185
  if m == "*"
180
- (available_encodings - accept_encoding.map { |m2, _| m2 }).map { |m2| [m2, q] }
186
+ (available_encodings - accept_encoding.map(&:first))
187
+ .each { |m2| list << [m2, q] }
181
188
  else
182
- [[m, q]]
189
+ list << [m, q]
183
190
  end
184
- }.inject([]) { |mem, list|
185
- mem + list
186
- }
191
+ end
187
192
 
188
- encoding_candidates = expanded_accept_encoding.sort_by { |_, q| -q }.map { |m, _| m }
193
+ encoding_candidates = expanded_accept_encoding.sort_by { |_, q| -q }.map!(&:first)
189
194
 
190
195
  unless encoding_candidates.include?("identity")
191
196
  encoding_candidates.push("identity")
192
197
  end
193
198
 
194
- expanded_accept_encoding.each { |m, q|
199
+ expanded_accept_encoding.each do |m, q|
195
200
  encoding_candidates.delete(m) if q == 0.0
196
- }
201
+ end
197
202
 
198
- return (encoding_candidates & available_encodings)[0]
203
+ (encoding_candidates & available_encodings)[0]
199
204
  end
200
205
  module_function :select_best_encoding
201
206
 
@@ -211,7 +216,7 @@ module Rack
211
216
  # precede those with less specific. Ordering with respect to other
212
217
  # attributes (e.g., Domain) is unspecified.
213
218
  cookies = parse_query(header, ';,') { |s| unescape(s) rescue s }
214
- cookies.each_with_object({}) { |(k,v), hash| hash[k] = Array === v ? v.first : v }
219
+ cookies.each_with_object({}) { |(k, v), hash| hash[k] = Array === v ? v.first : v }
215
220
  end
216
221
  module_function :parse_cookies_header
217
222
 
@@ -221,41 +226,19 @@ module Rack
221
226
  domain = "; domain=#{value[:domain]}" if value[:domain]
222
227
  path = "; path=#{value[:path]}" if value[:path]
223
228
  max_age = "; max-age=#{value[:max_age]}" if value[:max_age]
224
- # There is an RFC mess in the area of date formatting for Cookies. Not
225
- # only are there contradicting RFCs and examples within RFC text, but
226
- # there are also numerous conflicting names of fields and partially
227
- # cross-applicable specifications.
228
- #
229
- # These are best described in RFC 2616 3.3.1. This RFC text also
230
- # specifies that RFC 822 as updated by RFC 1123 is preferred. That is a
231
- # fixed length format with space-date delimited fields.
232
- #
233
- # See also RFC 1123 section 5.2.14.
234
- #
235
- # RFC 6265 also specifies "sane-cookie-date" as RFC 1123 date, defined
236
- # in RFC 2616 3.3.1. RFC 6265 also gives examples that clearly denote
237
- # the space delimited format. These formats are compliant with RFC 2822.
238
- #
239
- # For reference, all involved RFCs are:
240
- # RFC 822
241
- # RFC 1123
242
- # RFC 2109
243
- # RFC 2616
244
- # RFC 2822
245
- # RFC 2965
246
- # RFC 6265
247
- expires = "; expires=" +
248
- rfc2822(value[:expires].clone.gmtime) if value[:expires]
229
+ expires = "; expires=#{value[:expires].httpdate}" if value[:expires]
249
230
  secure = "; secure" if value[:secure]
250
231
  httponly = "; HttpOnly" if (value.key?(:httponly) ? value[:httponly] : value[:http_only])
251
232
  same_site =
252
233
  case value[:same_site]
253
234
  when false, nil
254
235
  nil
236
+ when :none, 'None', :None
237
+ '; SameSite=None'
255
238
  when :lax, 'Lax', :Lax
256
- '; SameSite=Lax'.freeze
239
+ '; SameSite=Lax'
257
240
  when true, :strict, 'Strict', :Strict
258
- '; SameSite=Strict'.freeze
241
+ '; SameSite=Strict'
259
242
  else
260
243
  raise ArgumentError, "Invalid SameSite value: #{value[:same_site].inspect}"
261
244
  end
@@ -295,15 +278,15 @@ module Rack
295
278
  cookies = header
296
279
  end
297
280
 
298
- cookies.reject! { |cookie|
299
- if value[:domain]
300
- cookie =~ /\A#{escape(key)}=.*domain=#{value[:domain]}/
301
- elsif value[:path]
302
- cookie =~ /\A#{escape(key)}=.*path=#{value[:path]}/
303
- else
304
- cookie =~ /\A#{escape(key)}=/
305
- end
306
- }
281
+ regexp = if value[:domain]
282
+ /\A#{escape(key)}=.*domain=#{value[:domain]}/
283
+ elsif value[:path]
284
+ /\A#{escape(key)}=.*path=#{value[:path]}/
285
+ else
286
+ /\A#{escape(key)}=/
287
+ end
288
+
289
+ cookies.reject! { |cookie| regexp.match? cookie }
307
290
 
308
291
  cookies.join("\n")
309
292
  end
@@ -321,9 +304,9 @@ module Rack
321
304
  new_header = make_delete_cookie_header(header, key, value)
322
305
 
323
306
  add_cookie_to_header(new_header, key,
324
- {:value => '', :path => nil, :domain => nil,
325
- :max_age => '0',
326
- :expires => Time.at(0) }.merge(value))
307
+ { value: '', path: nil, domain: nil,
308
+ max_age: '0',
309
+ expires: Time.at(0) }.merge(value))
327
310
 
328
311
  end
329
312
  module_function :add_remove_cookie_to_header
@@ -364,7 +347,7 @@ module Rack
364
347
  ranges = []
365
348
  $1.split(/,\s*/).each do |range_spec|
366
349
  return nil unless range_spec =~ /(\d*)-(\d*)/
367
- r0,r1 = $1, $2
350
+ r0, r1 = $1, $2
368
351
  if r0.empty?
369
352
  return nil if r1.empty?
370
353
  # suffix-byte-range-spec, represents trailing suffix of file
@@ -378,7 +361,7 @@ module Rack
378
361
  else
379
362
  r1 = r1.to_i
380
363
  return nil if r1 < r0 # backwards range is syntactically invalid
381
- r1 = size-1 if r1 >= size
364
+ r1 = size - 1 if r1 >= size
382
365
  end
383
366
  end
384
367
  ranges << (r0..r1) if r0 <= r1
@@ -399,7 +382,7 @@ module Rack
399
382
  l = a.unpack("C*")
400
383
 
401
384
  r, i = 0, -1
402
- b.each_byte { |v| r |= v ^ l[i+=1] }
385
+ b.each_byte { |v| r |= v ^ l[i += 1] }
403
386
  r == 0
404
387
  end
405
388
  module_function :secure_compare
@@ -425,19 +408,17 @@ module Rack
425
408
  self.class.new(@for, app)
426
409
  end
427
410
 
428
- def context(env, app=@app)
411
+ def context(env, app = @app)
429
412
  recontext(app).call(env)
430
413
  end
431
414
  end
432
415
 
433
416
  # A case-insensitive Hash that preserves the original case of a
434
417
  # header when set.
435
- class HeaderHash < Hash
436
- def self.new(hash={})
437
- HeaderHash === hash ? hash : super(hash)
438
- end
439
-
440
- def initialize(hash={})
418
+ #
419
+ # @api private
420
+ class HeaderHash < Hash # :nodoc:
421
+ def initialize(hash = {})
441
422
  super()
442
423
  @names = {}
443
424
  hash.each { |k, v| self[k] = v }
@@ -457,7 +438,7 @@ module Rack
457
438
 
458
439
  def to_hash
459
440
  hash = {}
460
- each { |k,v| hash[k] = v }
441
+ each { |k, v| hash[k] = v }
461
442
  hash
462
443
  end
463
444
 
@@ -510,13 +491,14 @@ module Rack
510
491
 
511
492
  # Every standard HTTP code mapped to the appropriate message.
512
493
  # Generated with:
513
- # curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \
514
- # ruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \
515
- # puts "#{m[1]} => \x27#{m[2].strip}\x27,"'
494
+ # curl -s https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv | \
495
+ # ruby -ne 'm = /^(\d{3}),(?!Unassigned|\(Unused\))([^,]+)/.match($_) and \
496
+ # puts "#{m[1]} => \x27#{m[2].strip}\x27,"'
516
497
  HTTP_STATUS_CODES = {
517
498
  100 => 'Continue',
518
499
  101 => 'Switching Protocols',
519
500
  102 => 'Processing',
501
+ 103 => 'Early Hints',
520
502
  200 => 'OK',
521
503
  201 => 'Created',
522
504
  202 => 'Accepted',
@@ -533,6 +515,7 @@ module Rack
533
515
  303 => 'See Other',
534
516
  304 => 'Not Modified',
535
517
  305 => 'Use Proxy',
518
+ 306 => '(Unused)',
536
519
  307 => 'Temporary Redirect',
537
520
  308 => 'Permanent Redirect',
538
521
  400 => 'Bad Request',
@@ -557,6 +540,7 @@ module Rack
557
540
  422 => 'Unprocessable Entity',
558
541
  423 => 'Locked',
559
542
  424 => 'Failed Dependency',
543
+ 425 => 'Too Early',
560
544
  426 => 'Upgrade Required',
561
545
  428 => 'Precondition Required',
562
546
  429 => 'Too Many Requests',
@@ -571,12 +555,13 @@ module Rack
571
555
  506 => 'Variant Also Negotiates',
572
556
  507 => 'Insufficient Storage',
573
557
  508 => 'Loop Detected',
558
+ 509 => 'Bandwidth Limit Exceeded',
574
559
  510 => 'Not Extended',
575
560
  511 => 'Network Authentication Required'
576
561
  }
577
562
 
578
563
  # Responses with HTTP status codes that should not have an entity body
579
- STATUS_WITH_NO_ENTITY_BODY = Set.new((100..199).to_a << 204 << 304)
564
+ STATUS_WITH_NO_ENTITY_BODY = Hash[((100..199).to_a << 204 << 304).product([true])]
580
565
 
581
566
  SYMBOL_TO_STATUS_CODE = Hash[*HTTP_STATUS_CODES.map { |code, message|
582
567
  [message.downcase.gsub(/\s|-|'/, '_').to_sym, code]
@@ -584,7 +569,7 @@ module Rack
584
569
 
585
570
  def status_code(status)
586
571
  if status.is_a?(Symbol)
587
- SYMBOL_TO_STATUS_CODE[status] || 500
572
+ SYMBOL_TO_STATUS_CODE.fetch(status) { raise ArgumentError, "Unrecognized status code #{status.inspect}" }
588
573
  else
589
574
  status.to_i
590
575
  end
@@ -605,11 +590,11 @@ module Rack
605
590
 
606
591
  clean.unshift '/' if parts.empty? || parts.first.empty?
607
592
 
608
- ::File.join(*clean)
593
+ ::File.join clean
609
594
  end
610
595
  module_function :clean_path_info
611
596
 
612
- NULL_BYTE = "\0".freeze
597
+ NULL_BYTE = "\0"
613
598
 
614
599
  def valid_path?(path)
615
600
  path.valid_encoding? && !path.include?(NULL_BYTE)
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Gem::Specification.new do |s|
2
- s.name = "rack"
4
+ s.name = "rack"
3
5
  s.version = File.read('lib/rack.rb')[/RELEASE += +([\"\'])([\d][\w\.]+)\1/, 2]
4
6
  s.platform = Gem::Platform::RUBY
5
7
  s.summary = "a modular Ruby webserver interface"
@@ -15,20 +17,28 @@ middleware) into a single method call.
15
17
  Also see https://rack.github.io/.
16
18
  EOF
17
19
 
18
- s.files = Dir['{bin/*,contrib/*,example/*,lib/**/*,test/**/*}'] +
19
- %w(COPYING rack.gemspec Rakefile README.rdoc SPEC)
20
+ s.files = Dir['{bin/*,contrib/*,example/*,lib/**/*}'] +
21
+ %w(MIT-LICENSE rack.gemspec Rakefile README.rdoc SPEC)
20
22
  s.bindir = 'bin'
21
- s.executables << 'rackup'
22
- s.require_path = 'lib'
23
- s.extra_rdoc_files = ['README.rdoc', 'HISTORY.md']
24
- s.test_files = Dir['test/spec_*.rb']
23
+ s.executables << 'rackup'
24
+ s.require_path = 'lib'
25
+ s.extra_rdoc_files = ['README.rdoc', 'CHANGELOG.md']
25
26
 
26
- s.author = 'Christian Neukirchen'
27
- s.email = 'chneukirchen@gmail.com'
27
+ s.author = 'Leah Neukirchen'
28
+ s.email = 'leah@vuxu.org'
28
29
  s.homepage = 'https://rack.github.io/'
29
30
  s.required_ruby_version = '>= 2.2.2'
31
+ s.metadata = {
32
+ "bug_tracker_uri" => "https://github.com/rack/rack/issues",
33
+ "changelog_uri" => "https://github.com/rack/rack/blob/master/CHANGELOG.md",
34
+ "documentation_uri" => "https://rubydoc.info/github/rack/rack",
35
+ "homepage_uri" => "https://rack.github.io",
36
+ "mailing_list_uri" => "https://groups.google.com/forum/#!forum/rack-devel",
37
+ "source_code_uri" => "https://github.com/rack/rack"
38
+ }
30
39
 
31
40
  s.add_development_dependency 'minitest', "~> 5.0"
32
41
  s.add_development_dependency 'minitest-sprint'
42
+ s.add_development_dependency 'minitest-global_expectations'
33
43
  s.add_development_dependency 'rake'
34
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
- - Christian Neukirchen
7
+ - Leah Neukirchen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-31 00:00:00.000000000 Z
11
+ date: 2020-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-global_expectations
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'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -60,16 +74,16 @@ description: |
60
74
  middleware) into a single method call.
61
75
 
62
76
  Also see https://rack.github.io/.
63
- email: chneukirchen@gmail.com
77
+ email: leah@vuxu.org
64
78
  executables:
65
79
  - rackup
66
80
  extensions: []
67
81
  extra_rdoc_files:
68
82
  - README.rdoc
69
- - HISTORY.md
83
+ - CHANGELOG.md
70
84
  files:
71
- - COPYING
72
- - HISTORY.md
85
+ - CHANGELOG.md
86
+ - MIT-LICENSE
73
87
  - README.rdoc
74
88
  - Rakefile
75
89
  - SPEC
@@ -98,11 +112,13 @@ files:
98
112
  - lib/rack/config.rb
99
113
  - lib/rack/content_length.rb
100
114
  - lib/rack/content_type.rb
115
+ - lib/rack/core_ext/regexp.rb
101
116
  - lib/rack/deflater.rb
102
117
  - lib/rack/directory.rb
103
118
  - lib/rack/etag.rb
104
119
  - lib/rack/events.rb
105
120
  - lib/rack/file.rb
121
+ - lib/rack/files.rb
106
122
  - lib/rack/handler.rb
107
123
  - lib/rack/handler/cgi.rb
108
124
  - lib/rack/handler/fastcgi.rb
@@ -144,121 +160,16 @@ files:
144
160
  - lib/rack/urlmap.rb
145
161
  - lib/rack/utils.rb
146
162
  - rack.gemspec
147
- - test/builder/an_underscore_app.rb
148
- - test/builder/anything.rb
149
- - test/builder/comment.ru
150
- - test/builder/end.ru
151
- - test/builder/line.ru
152
- - test/builder/options.ru
153
- - test/cgi/assets/folder/test.js
154
- - test/cgi/assets/fonts/font.eot
155
- - test/cgi/assets/images/image.png
156
- - test/cgi/assets/index.html
157
- - test/cgi/assets/javascripts/app.js
158
- - test/cgi/assets/stylesheets/app.css
159
- - test/cgi/lighttpd.conf
160
- - test/cgi/rackup_stub.rb
161
- - test/cgi/sample_rackup.ru
162
- - test/cgi/test
163
- - test/cgi/test+directory/test+file
164
- - test/cgi/test.fcgi
165
- - test/cgi/test.gz
166
- - test/cgi/test.ru
167
- - test/gemloader.rb
168
- - test/helper.rb
169
- - test/multipart/bad_robots
170
- - test/multipart/binary
171
- - test/multipart/content_type_and_no_filename
172
- - test/multipart/empty
173
- - test/multipart/fail_16384_nofile
174
- - test/multipart/file1.txt
175
- - test/multipart/filename_and_modification_param
176
- - test/multipart/filename_and_no_name
177
- - test/multipart/filename_with_encoded_words
178
- - test/multipart/filename_with_escaped_quotes
179
- - test/multipart/filename_with_escaped_quotes_and_modification_param
180
- - test/multipart/filename_with_null_byte
181
- - test/multipart/filename_with_percent_escaped_quotes
182
- - test/multipart/filename_with_single_quote
183
- - test/multipart/filename_with_unescaped_percentages
184
- - test/multipart/filename_with_unescaped_percentages2
185
- - test/multipart/filename_with_unescaped_percentages3
186
- - test/multipart/filename_with_unescaped_quotes
187
- - test/multipart/ie
188
- - test/multipart/invalid_character
189
- - test/multipart/mixed_files
190
- - test/multipart/nested
191
- - test/multipart/none
192
- - test/multipart/quoted
193
- - test/multipart/rack-logo.png
194
- - test/multipart/semicolon
195
- - test/multipart/text
196
- - test/multipart/three_files_three_fields
197
- - test/multipart/unity3d_wwwform
198
- - test/multipart/webkit
199
- - test/rackup/config.ru
200
- - test/registering_handler/rack/handler/registering_myself.rb
201
- - test/spec_auth_basic.rb
202
- - test/spec_auth_digest.rb
203
- - test/spec_body_proxy.rb
204
- - test/spec_builder.rb
205
- - test/spec_cascade.rb
206
- - test/spec_cgi.rb
207
- - test/spec_chunked.rb
208
- - test/spec_common_logger.rb
209
- - test/spec_conditional_get.rb
210
- - test/spec_config.rb
211
- - test/spec_content_length.rb
212
- - test/spec_content_type.rb
213
- - test/spec_deflater.rb
214
- - test/spec_directory.rb
215
- - test/spec_etag.rb
216
- - test/spec_events.rb
217
- - test/spec_fastcgi.rb
218
- - test/spec_file.rb
219
- - test/spec_handler.rb
220
- - test/spec_head.rb
221
- - test/spec_lint.rb
222
- - test/spec_lobster.rb
223
- - test/spec_lock.rb
224
- - test/spec_logger.rb
225
- - test/spec_media_type.rb
226
- - test/spec_method_override.rb
227
- - test/spec_mime.rb
228
- - test/spec_mock.rb
229
- - test/spec_multipart.rb
230
- - test/spec_null_logger.rb
231
- - test/spec_recursive.rb
232
- - test/spec_request.rb
233
- - test/spec_response.rb
234
- - test/spec_rewindable_input.rb
235
- - test/spec_runtime.rb
236
- - test/spec_sendfile.rb
237
- - test/spec_server.rb
238
- - test/spec_session_abstract_id.rb
239
- - test/spec_session_abstract_session_hash.rb
240
- - test/spec_session_cookie.rb
241
- - test/spec_session_memcache.rb
242
- - test/spec_session_pool.rb
243
- - test/spec_show_exceptions.rb
244
- - test/spec_show_status.rb
245
- - test/spec_static.rb
246
- - test/spec_tempfile_reaper.rb
247
- - test/spec_thin.rb
248
- - test/spec_urlmap.rb
249
- - test/spec_utils.rb
250
- - test/spec_version.rb
251
- - test/spec_webrick.rb
252
- - test/static/another/index.html
253
- - test/static/foo.html
254
- - test/static/index.html
255
- - test/testrequest.rb
256
- - test/unregistered_handler/rack/handler/unregistered.rb
257
- - test/unregistered_handler/rack/handler/unregistered_long_one.rb
258
163
  homepage: https://rack.github.io/
259
164
  licenses:
260
165
  - MIT
261
- metadata: {}
166
+ metadata:
167
+ bug_tracker_uri: https://github.com/rack/rack/issues
168
+ changelog_uri: https://github.com/rack/rack/blob/master/CHANGELOG.md
169
+ documentation_uri: https://rubydoc.info/github/rack/rack
170
+ homepage_uri: https://rack.github.io
171
+ mailing_list_uri: https://groups.google.com/forum/#!forum/rack-devel
172
+ source_code_uri: https://github.com/rack/rack
262
173
  post_install_message:
263
174
  rdoc_options: []
264
175
  require_paths:
@@ -274,60 +185,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
185
  - !ruby/object:Gem::Version
275
186
  version: '0'
276
187
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.7.3
188
+ rubygems_version: 3.1.1
279
189
  signing_key:
280
190
  specification_version: 4
281
191
  summary: a modular Ruby webserver interface
282
- test_files:
283
- - test/spec_multipart.rb
284
- - test/spec_deflater.rb
285
- - test/spec_static.rb
286
- - test/spec_session_cookie.rb
287
- - test/spec_session_pool.rb
288
- - test/spec_etag.rb
289
- - test/spec_version.rb
290
- - test/spec_handler.rb
291
- - test/spec_thin.rb
292
- - test/spec_session_abstract_id.rb
293
- - test/spec_mime.rb
294
- - test/spec_recursive.rb
295
- - test/spec_null_logger.rb
296
- - test/spec_media_type.rb
297
- - test/spec_cgi.rb
298
- - test/spec_method_override.rb
299
- - test/spec_content_type.rb
300
- - test/spec_session_abstract_session_hash.rb
301
- - test/spec_request.rb
302
- - test/spec_chunked.rb
303
- - test/spec_show_exceptions.rb
304
- - test/spec_runtime.rb
305
- - test/spec_fastcgi.rb
306
- - test/spec_common_logger.rb
307
- - test/spec_builder.rb
308
- - test/spec_config.rb
309
- - test/spec_utils.rb
310
- - test/spec_sendfile.rb
311
- - test/spec_lobster.rb
312
- - test/spec_lint.rb
313
- - test/spec_conditional_get.rb
314
- - test/spec_tempfile_reaper.rb
315
- - test/spec_mock.rb
316
- - test/spec_server.rb
317
- - test/spec_directory.rb
318
- - test/spec_webrick.rb
319
- - test/spec_response.rb
320
- - test/spec_file.rb
321
- - test/spec_show_status.rb
322
- - test/spec_body_proxy.rb
323
- - test/spec_logger.rb
324
- - test/spec_auth_digest.rb
325
- - test/spec_urlmap.rb
326
- - test/spec_events.rb
327
- - test/spec_cascade.rb
328
- - test/spec_auth_basic.rb
329
- - test/spec_head.rb
330
- - test/spec_lock.rb
331
- - test/spec_rewindable_input.rb
332
- - test/spec_session_memcache.rb
333
- - test/spec_content_length.rb
192
+ test_files: []