rack 1.5.2 → 1.5.3

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.

@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e7aa32fd28459ce2c2e164f12fb33c2599493a01
4
+ data.tar.gz: 3335d110a0d071412aae13ac81072f5ddbf59806
5
+ SHA512:
6
+ metadata.gz: efa5a3a838fca1bafcd280c7aa149ccbb0b96bc9b5137eb4b98d22da87f065c283aa2f84241223ec156771e5fc6c450c88ce1a78bd9bece75d33f4947097fc5c
7
+ data.tar.gz: 1ccd7cb881db9bb604337d2f00b25d784b263eaba81e9f357d9335413adbe98385621026200716288b96e86c412cacf79d3bf689318905d58687c6fd5b628297
data/Rakefile CHANGED
@@ -33,7 +33,7 @@ task :officialrelease do
33
33
  end
34
34
 
35
35
  task :officialrelease_really => %w[SPEC dist gem] do
36
- sh "sha1sum #{release}.tar.gz #{release}.gem"
36
+ sh "shasum #{release}.tar.gz #{release}.gem"
37
37
  end
38
38
 
39
39
  def release
@@ -20,7 +20,7 @@ module Rack
20
20
 
21
21
  # Return the Rack release as a dotted string.
22
22
  def self.release
23
- "1.5"
23
+ "1.5.3"
24
24
  end
25
25
 
26
26
  autoload :Builder, "rack/builder"
@@ -100,6 +100,8 @@ module Rack
100
100
  port.to_i
101
101
  elsif @env.has_key?("HTTP_X_FORWARDED_HOST")
102
102
  DEFAULT_PORTS[scheme]
103
+ elsif @env.has_key?("HTTP_X_FORWARDED_PROTO")
104
+ DEFAULT_PORTS[@env['HTTP_X_FORWARDED_PROTO']]
103
105
  else
104
106
  @env["SERVER_PORT"].to_i
105
107
  end
@@ -196,7 +198,7 @@ module Rack
196
198
  def POST
197
199
  if @env["rack.input"].nil?
198
200
  raise "Missing rack.input"
199
- elsif @env["rack.request.form_input"].eql? @env["rack.input"]
201
+ elsif @env["rack.request.form_input"].equal? @env["rack.input"]
200
202
  @env["rack.request.form_hash"]
201
203
  elsif form_data? || parseable_data?
202
204
  @env["rack.request.form_input"] = @env["rack.input"]
@@ -130,7 +130,7 @@ module Rack
130
130
  body = []
131
131
  when '', nil
132
132
  else
133
- env['rack.errors'].puts "Unknown x-sendfile variation: '#{variation}'.\n"
133
+ env['rack.errors'].puts "Unknown x-sendfile variation: '#{type}'.\n"
134
134
  end
135
135
  end
136
136
  [status, headers, body]
@@ -21,16 +21,14 @@
21
21
  # THE SOFTWARE.
22
22
 
23
23
  # See https://github.com/kr/okjson for updates.
24
- # Imported from the above repo @ d4e8643ad92e14b37d11326855499c7e4108ed17
25
- # Namespace modified for vendoring under Rack::Utils
26
24
 
27
25
  require 'stringio'
28
26
 
29
27
  # Some parts adapted from
30
- # http://golang.org/src/pkg/json/decode.go and
31
- # http://golang.org/src/pkg/utf8/utf8.go
28
+ # https://golang.org/src/encoding/json/decode.go and
29
+ # https://golang.org/src/unicode/utf8/utf8.go
32
30
  module Rack::Utils::OkJson
33
- Upstream = 'LTD7LBKLZWFF7OZK'
31
+ Upstream = '43'
34
32
  extend self
35
33
 
36
34
 
@@ -52,12 +50,49 @@ module Rack::Utils::OkJson
52
50
  end
53
51
 
54
52
 
53
+ # Encodes x into a json text. It may contain only
54
+ # Array, Hash, String, Numeric, true, false, nil.
55
+ # (Note, this list excludes Symbol.)
56
+ # X itself must be an Array or a Hash.
57
+ # No other value can be encoded, and an error will
58
+ # be raised if x contains any other value, such as
59
+ # Nan, Infinity, Symbol, and Proc, or if a Hash key
60
+ # is not a String.
61
+ # Strings contained in x must be valid UTF-8.
62
+ def encode(x)
63
+ case x
64
+ when Hash then objenc(x)
65
+ when Array then arrenc(x)
66
+ else
67
+ raise Error, 'root value must be an Array or a Hash'
68
+ end
69
+ end
70
+
71
+
72
+ def valenc(x)
73
+ case x
74
+ when Hash then objenc(x)
75
+ when Array then arrenc(x)
76
+ when String then strenc(x)
77
+ when Numeric then numenc(x)
78
+ when true then "true"
79
+ when false then "false"
80
+ when nil then "null"
81
+ else
82
+ raise Error, "cannot encode #{x.class}: #{x.inspect}"
83
+ end
84
+ end
85
+
86
+
87
+ private
88
+
89
+
55
90
  # Parses a "json text" in the sense of RFC 4627.
56
91
  # Returns the parsed value and any trailing tokens.
57
92
  # Note: this is almost the same as valparse,
58
93
  # except that it does not accept atomic values.
59
94
  def textparse(ts)
60
- if ts.length < 0
95
+ if ts.length <= 0
61
96
  raise Error, 'empty'
62
97
  end
63
98
 
@@ -74,7 +109,7 @@ module Rack::Utils::OkJson
74
109
  # Parses a "value" in the sense of RFC 4627.
75
110
  # Returns the parsed value and any trailing tokens.
76
111
  def valparse(ts)
77
- if ts.length < 0
112
+ if ts.length <= 0
78
113
  raise Error, 'empty'
79
114
  end
80
115
 
@@ -203,21 +238,19 @@ module Rack::Utils::OkJson
203
238
  # it is the lexeme.
204
239
  def tok(s)
205
240
  case s[0]
206
- when ?{ then ['{', s[0,1], s[0,1]]
207
- when ?} then ['}', s[0,1], s[0,1]]
208
- when ?: then [':', s[0,1], s[0,1]]
209
- when ?, then [',', s[0,1], s[0,1]]
210
- when ?[ then ['[', s[0,1], s[0,1]]
211
- when ?] then [']', s[0,1], s[0,1]]
212
- when ?n then nulltok(s)
213
- when ?t then truetok(s)
214
- when ?f then falsetok(s)
215
- when ?" then strtok(s)
216
- when Spc then [:space, s[0,1], s[0,1]]
217
- when ?\t then [:space, s[0,1], s[0,1]]
218
- when ?\n then [:space, s[0,1], s[0,1]]
219
- when ?\r then [:space, s[0,1], s[0,1]]
220
- else numtok(s)
241
+ when ?{ then ['{', s[0,1], s[0,1]]
242
+ when ?} then ['}', s[0,1], s[0,1]]
243
+ when ?: then [':', s[0,1], s[0,1]]
244
+ when ?, then [',', s[0,1], s[0,1]]
245
+ when ?[ then ['[', s[0,1], s[0,1]]
246
+ when ?] then [']', s[0,1], s[0,1]]
247
+ when ?n then nulltok(s)
248
+ when ?t then truetok(s)
249
+ when ?f then falsetok(s)
250
+ when ?" then strtok(s)
251
+ when Spc, ?\t, ?\n, ?\r then [:space, s[0,1], s[0,1]]
252
+ else
253
+ numtok(s)
221
254
  end
222
255
  end
223
256
 
@@ -230,12 +263,12 @@ module Rack::Utils::OkJson
230
263
  def numtok(s)
231
264
  m = /-?([1-9][0-9]+|[0-9])([.][0-9]+)?([eE][+-]?[0-9]+)?/.match(s)
232
265
  if m && m.begin(0) == 0
233
- if m[3] && !m[2]
234
- [:val, m[0], Integer(m[1])*(10**Integer(m[3][1..-1]))]
266
+ if !m[2] && !m[3]
267
+ [:val, m[0], Integer(m[0])]
235
268
  elsif m[2]
236
269
  [:val, m[0], Float(m[0])]
237
270
  else
238
- [:val, m[0], Integer(m[0])]
271
+ [:val, m[0], Integer(m[1])*(10**m[3][1..-1].to_i(10))]
239
272
  end
240
273
  else
241
274
  []
@@ -267,17 +300,14 @@ module Rack::Utils::OkJson
267
300
  def unquote(q)
268
301
  q = q[1...-1]
269
302
  a = q.dup # allocate a big enough string
270
- rubydoesenc = false
271
303
  # In ruby >= 1.9, a[w] is a codepoint, not a byte.
272
- if a.class.method_defined?(:force_encoding)
304
+ if rubydoesenc?
273
305
  a.force_encoding('UTF-8')
274
- rubydoesenc = true
275
306
  end
276
307
  r, w = 0, 0
277
308
  while r < q.length
278
309
  c = q[r]
279
- case true
280
- when c == ?\\
310
+ if c == ?\\
281
311
  r += 1
282
312
  if r >= q.length
283
313
  raise Error, "string literal ends with a \"\\\": \"#{q}\""
@@ -310,7 +340,7 @@ module Rack::Utils::OkJson
310
340
  end
311
341
  end
312
342
  end
313
- if rubydoesenc
343
+ if rubydoesenc?
314
344
  a[w] = '' << uchar
315
345
  w += 1
316
346
  else
@@ -319,7 +349,7 @@ module Rack::Utils::OkJson
319
349
  else
320
350
  raise Error, "invalid escape char #{q[r]} in \"#{q}\""
321
351
  end
322
- when c == ?", c < Spc
352
+ elsif c == ?" || c < Spc
323
353
  raise Error, "invalid character in string literal \"#{q}\""
324
354
  else
325
355
  # Copy anything else byte-for-byte.
@@ -340,15 +370,14 @@ module Rack::Utils::OkJson
340
370
  # bytes in string a at position i.
341
371
  # Returns the number of bytes written.
342
372
  def ucharenc(a, i, u)
343
- case true
344
- when u <= Uchar1max
373
+ if u <= Uchar1max
345
374
  a[i] = (u & 0xff).chr
346
375
  1
347
- when u <= Uchar2max
376
+ elsif u <= Uchar2max
348
377
  a[i+0] = (Utag2 | ((u>>6)&0xff)).chr
349
378
  a[i+1] = (Utagx | (u&Umaskx)).chr
350
379
  2
351
- when u <= Uchar3max
380
+ elsif u <= Uchar3max
352
381
  a[i+0] = (Utag3 | ((u>>12)&0xff)).chr
353
382
  a[i+1] = (Utagx | ((u>>6)&Umaskx)).chr
354
383
  a[i+2] = (Utagx | (u&Umaskx)).chr
@@ -385,50 +414,15 @@ module Rack::Utils::OkJson
385
414
 
386
415
 
387
416
  def nibble(c)
388
- case true
389
- when ?0 <= c && c <= ?9 then c.ord - ?0.ord
390
- when ?a <= c && c <= ?z then c.ord - ?a.ord + 10
391
- when ?A <= c && c <= ?Z then c.ord - ?A.ord + 10
417
+ if ?0 <= c && c <= ?9 then c.ord - ?0.ord
418
+ elsif ?a <= c && c <= ?z then c.ord - ?a.ord + 10
419
+ elsif ?A <= c && c <= ?Z then c.ord - ?A.ord + 10
392
420
  else
393
421
  raise Error, "invalid hex code #{c}"
394
422
  end
395
423
  end
396
424
 
397
425
 
398
- # Encodes x into a json text. It may contain only
399
- # Array, Hash, String, Numeric, true, false, nil.
400
- # (Note, this list excludes Symbol.)
401
- # X itself must be an Array or a Hash.
402
- # No other value can be encoded, and an error will
403
- # be raised if x contains any other value, such as
404
- # Nan, Infinity, Symbol, and Proc, or if a Hash key
405
- # is not a String.
406
- # Strings contained in x must be valid UTF-8.
407
- def encode(x)
408
- case x
409
- when Hash then objenc(x)
410
- when Array then arrenc(x)
411
- else
412
- raise Error, 'root value must be an Array or a Hash'
413
- end
414
- end
415
-
416
-
417
- def valenc(x)
418
- case x
419
- when Hash then objenc(x)
420
- when Array then arrenc(x)
421
- when String then strenc(x)
422
- when Numeric then numenc(x)
423
- when true then "true"
424
- when false then "false"
425
- when nil then "null"
426
- else
427
- raise Error, "cannot encode #{x.class}: #{x.inspect}"
428
- end
429
- end
430
-
431
-
432
426
  def objenc(x)
433
427
  '{' + x.map{|k,v| keyenc(k) + ':' + valenc(v)}.join(',') + '}'
434
428
  end
@@ -453,9 +447,6 @@ module Rack::Utils::OkJson
453
447
  t.putc(?")
454
448
  r = 0
455
449
 
456
- # In ruby >= 1.9, s[r] is a codepoint, not a byte.
457
- rubydoesenc = s.class.method_defined?(:encoding)
458
-
459
450
  while r < s.length
460
451
  case s[r]
461
452
  when ?" then t.print('\\"')
@@ -467,15 +458,20 @@ module Rack::Utils::OkJson
467
458
  when ?\t then t.print('\\t')
468
459
  else
469
460
  c = s[r]
470
- case true
471
- when rubydoesenc
461
+ # In ruby >= 1.9, s[r] is a codepoint, not a byte.
462
+ if rubydoesenc?
472
463
  begin
473
- c.ord # will raise an error if c is invalid UTF-8
464
+ # c.ord will raise an error if c is invalid UTF-8
465
+ if c.ord < Spc.ord
466
+ c = "\\u%04x" % [c.ord]
467
+ end
474
468
  t.write(c)
475
469
  rescue
476
470
  t.write(Ustrerr)
477
471
  end
478
- when Spc <= c && c <= ?~
472
+ elsif c < Spc
473
+ t.write("\\u%04x" % c)
474
+ elsif Spc <= c && c <= ?~
479
475
  t.putc(c)
480
476
  else
481
477
  n = ucharcopy(t, s, r) # ensure valid UTF-8 output
@@ -567,6 +563,11 @@ module Rack::Utils::OkJson
567
563
  end
568
564
 
569
565
 
566
+ def rubydoesenc?
567
+ ::String.method_defined?(:force_encoding)
568
+ end
569
+
570
+
570
571
  class Utf8Error < ::StandardError
571
572
  end
572
573
 
@@ -575,15 +576,15 @@ module Rack::Utils::OkJson
575
576
  end
576
577
 
577
578
 
578
- Utagx = 0x80 # 1000 0000
579
- Utag2 = 0xc0 # 1100 0000
580
- Utag3 = 0xe0 # 1110 0000
581
- Utag4 = 0xf0 # 1111 0000
582
- Utag5 = 0xF8 # 1111 1000
583
- Umaskx = 0x3f # 0011 1111
584
- Umask2 = 0x1f # 0001 1111
585
- Umask3 = 0x0f # 0000 1111
586
- Umask4 = 0x07 # 0000 0111
579
+ Utagx = 0b1000_0000
580
+ Utag2 = 0b1100_0000
581
+ Utag3 = 0b1110_0000
582
+ Utag4 = 0b1111_0000
583
+ Utag5 = 0b1111_1000
584
+ Umaskx = 0b0011_1111
585
+ Umask2 = 0b0001_1111
586
+ Umask3 = 0b0000_1111
587
+ Umask4 = 0b0000_0111
587
588
  Uchar1max = (1<<7) - 1
588
589
  Uchar2max = (1<<11) - 1
589
590
  Uchar3max = (1<<16) - 1
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "rack"
3
- s.version = "1.5.2"
3
+ s.version = "1.5.3"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.summary = "a modular Ruby webserver interface"
6
6
  s.license = "MIT"
@@ -93,6 +93,11 @@ describe Rack::Request do
93
93
  req = Rack::Request.new \
94
94
  Rack::MockRequest.env_for("/", "HTTP_HOST" => "localhost:81", "HTTP_X_FORWARDED_HOST" => "example.org", "SERVER_PORT" => "9393")
95
95
  req.port.should.equal 80
96
+
97
+ req = Rack::Request.new \
98
+ Rack::MockRequest.env_for("/", "HTTP_HOST" => "localhost", "HTTP_X_FORWARDED_PROTO" => "https", "SERVER_PORT" => "80")
99
+
100
+ req.port.should.equal 443
96
101
  end
97
102
 
98
103
  should "figure out the correct host with port" do
@@ -859,6 +864,21 @@ EOF
859
864
  lambda{ req.POST }.should.not.raise("input re-processed!")
860
865
  end
861
866
 
867
+ should "use form_hash when form_input is a Tempfile" do
868
+ input = "{foo: 'bar'}"
869
+
870
+ rack_input = Tempfile.new("rackspec")
871
+ rack_input.write(input)
872
+ rack_input.rewind
873
+
874
+ req = Rack::Request.new Rack::MockRequest.env_for("/",
875
+ "rack.request.form_hash" => {'foo' => 'bar'},
876
+ "rack.request.form_input" => rack_input,
877
+ :input => rack_input)
878
+
879
+ req.POST.should.equal(req.env['rack.request.form_hash'])
880
+ end
881
+
862
882
  should "conform to the Rack spec" do
863
883
  app = lambda { |env|
864
884
  content = Rack::Request.new(env).POST["file"].inspect
metadata CHANGED
@@ -1,68 +1,64 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rack
3
- version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease:
6
- segments:
7
- - 1
8
- - 5
9
- - 2
10
- version: 1.5.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.5.3
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Christian Neukirchen
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-02-08 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2015-05-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: bacon
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rake
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
40
31
  - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
46
34
  type: :development
47
- version_requirements: *id002
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
48
41
  description: |
49
42
  Rack provides a minimal, modular and adaptable interface for developing
50
43
  web applications in Ruby. By wrapping HTTP requests and responses in
51
44
  the simplest way possible, it unifies and distills the API for web
52
45
  servers, web frameworks, and software in between (the so-called
53
46
  middleware) into a single method call.
54
-
55
- Also see http://rack.github.com/.
56
47
 
48
+ Also see http://rack.github.com/.
57
49
  email: chneukirchen@gmail.com
58
- executables:
50
+ executables:
59
51
  - rackup
60
52
  extensions: []
61
-
62
- extra_rdoc_files:
53
+ extra_rdoc_files:
63
54
  - README.rdoc
64
55
  - KNOWN-ISSUES
65
- files:
56
+ files:
57
+ - COPYING
58
+ - KNOWN-ISSUES
59
+ - README.rdoc
60
+ - Rakefile
61
+ - SPEC
66
62
  - bin/rackup
67
63
  - contrib/rack.png
68
64
  - contrib/rack.svg
@@ -71,6 +67,7 @@ files:
71
67
  - example/lobster.ru
72
68
  - example/protectedlobster.rb
73
69
  - example/protectedlobster.ru
70
+ - lib/rack.rb
74
71
  - lib/rack/auth/abstract/handler.rb
75
72
  - lib/rack/auth/abstract/request.rb
76
73
  - lib/rack/auth/basic.rb
@@ -94,6 +91,7 @@ files:
94
91
  - lib/rack/directory.rb
95
92
  - lib/rack/etag.rb
96
93
  - lib/rack/file.rb
94
+ - lib/rack/handler.rb
97
95
  - lib/rack/handler/cgi.rb
98
96
  - lib/rack/handler/evented_mongrel.rb
99
97
  - lib/rack/handler/fastcgi.rb
@@ -103,7 +101,6 @@ files:
103
101
  - lib/rack/handler/swiftiplied_mongrel.rb
104
102
  - lib/rack/handler/thin.rb
105
103
  - lib/rack/handler/webrick.rb
106
- - lib/rack/handler.rb
107
104
  - lib/rack/head.rb
108
105
  - lib/rack/lint.rb
109
106
  - lib/rack/lobster.rb
@@ -112,10 +109,10 @@ files:
112
109
  - lib/rack/methodoverride.rb
113
110
  - lib/rack/mime.rb
114
111
  - lib/rack/mock.rb
112
+ - lib/rack/multipart.rb
115
113
  - lib/rack/multipart/generator.rb
116
114
  - lib/rack/multipart/parser.rb
117
115
  - lib/rack/multipart/uploaded_file.rb
118
- - lib/rack/multipart.rb
119
116
  - lib/rack/nulllogger.rb
120
117
  - lib/rack/recursive.rb
121
118
  - lib/rack/reloader.rb
@@ -133,9 +130,9 @@ files:
133
130
  - lib/rack/showstatus.rb
134
131
  - lib/rack/static.rb
135
132
  - lib/rack/urlmap.rb
136
- - lib/rack/utils/okjson.rb
137
133
  - lib/rack/utils.rb
138
- - lib/rack.rb
134
+ - lib/rack/utils/okjson.rb
135
+ - rack.gemspec
139
136
  - test/builder/anything.rb
140
137
  - test/builder/comment.ru
141
138
  - test/builder/end.ru
@@ -230,46 +227,31 @@ files:
230
227
  - test/testrequest.rb
231
228
  - test/unregistered_handler/rack/handler/unregistered.rb
232
229
  - test/unregistered_handler/rack/handler/unregistered_long_one.rb
233
- - COPYING
234
- - KNOWN-ISSUES
235
- - rack.gemspec
236
- - Rakefile
237
- - README.rdoc
238
- - SPEC
239
230
  homepage: http://rack.github.com/
240
- licenses:
231
+ licenses:
241
232
  - MIT
233
+ metadata: {}
242
234
  post_install_message:
243
235
  rdoc_options: []
244
-
245
- require_paths:
236
+ require_paths:
246
237
  - lib
247
- required_ruby_version: !ruby/object:Gem::Requirement
248
- none: false
249
- requirements:
238
+ required_ruby_version: !ruby/object:Gem::Requirement
239
+ requirements:
250
240
  - - ">="
251
- - !ruby/object:Gem::Version
252
- hash: 3
253
- segments:
254
- - 0
255
- version: "0"
256
- required_rubygems_version: !ruby/object:Gem::Requirement
257
- none: false
258
- requirements:
241
+ - !ruby/object:Gem::Version
242
+ version: '0'
243
+ required_rubygems_version: !ruby/object:Gem::Requirement
244
+ requirements:
259
245
  - - ">="
260
- - !ruby/object:Gem::Version
261
- hash: 3
262
- segments:
263
- - 0
264
- version: "0"
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
265
248
  requirements: []
266
-
267
249
  rubyforge_project: rack
268
- rubygems_version: 1.8.24
250
+ rubygems_version: 2.4.6
269
251
  signing_key:
270
- specification_version: 3
252
+ specification_version: 4
271
253
  summary: a modular Ruby webserver interface
272
- test_files:
254
+ test_files:
273
255
  - test/spec_auth_basic.rb
274
256
  - test/spec_auth_digest.rb
275
257
  - test/spec_body_proxy.rb