Skip to content

Commit d2d51ff

Browse files
sophiebitsleahneukirchen
authored andcommitted
added mtime for Deflater.gzip and fixed gzip spec
1 parent 6967688 commit d2d51ff

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

lib/rack/deflater.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
require "zlib"
22
require "stringio"
3+
require "time"
34

45
module Rack
56

@@ -17,7 +18,8 @@ def call(env)
1718

1819
case encoding
1920
when "gzip"
20-
[status, headers.merge("Content-Encoding" => "gzip"), self.class.gzip(body)]
21+
mtime = headers["Last-Modified"] || Time.now
22+
[status, headers.merge("Content-Encoding" => "gzip"), self.class.gzip(body, mtime)]
2123
when "deflate"
2224
[status, headers.merge("Content-Encoding" => "deflate"), self.class.deflate(body)]
2325
when "identity"
@@ -28,9 +30,10 @@ def call(env)
2830
end
2931
end
3032

31-
def self.gzip(body)
33+
def self.gzip(body, mtime=Time.now)
3234
io = StringIO.new
3335
gzip = Zlib::GzipWriter.new(io)
36+
gzip.mtime = mtime
3437

3538
# TODO: Add streaming
3639
# TODO: Consider all part types

test/spec_rack_deflater.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ class << body; def each; yield("foo"); yield("bar"); end; end
4141

4242
response[0].should.equal(200)
4343
response[1].should.equal({ "Content-Encoding" => "gzip" })
44-
# response[2].to_s.should.equal("\037\213\b\000J\340mH\000\003K\313\317OJ,\002\000\225\037\366\236\006\000\000\000")
44+
45+
io = StringIO.new(response[2].to_s)
46+
gz = Zlib::GzipReader.new(io)
47+
gz.read.should.equal("foobar")
48+
gz.close
4549
end
4650

4751
specify "should be able to fallback to no deflation" do

0 commit comments

Comments
 (0)