Class: Rack::Deflater::GzipStream
- Inherits:
-
Object
- Object
- Rack::Deflater::GzipStream
- Defined in:
- lib/rack/deflater.rb
Overview
Body class used for gzip encoded responses.
Instance Method Summary collapse
-
#close ⇒ Object
Close the original body if possible.
-
#each(&block) ⇒ Object
Yield gzip compressed strings to the given block.
-
#initialize(body, mtime, sync) ⇒ GzipStream
constructor
Initialize the gzip stream.
-
#write(data) ⇒ Object
Call the block passed to #each with the the gzipped data.
Constructor Details
#initialize(body, mtime, sync) ⇒ GzipStream
Initialize the gzip stream. Arguments:
- body
-
Response body to compress with gzip
- mtime
-
The modification time of the body, used to set the modification time in the gzip header.
- sync
-
Whether to flush each gzip chunk as soon as it is ready.
85 86 87 88 89 |
# File 'lib/rack/deflater.rb', line 85 def initialize(body, mtime, sync) @body = body @mtime = mtime @sync = sync end |
Instance Method Details
#close ⇒ Object
Close the original body if possible.
114 115 116 |
# File 'lib/rack/deflater.rb', line 114 def close @body.close if @body.respond_to?(:close) end |
#each(&block) ⇒ Object
Yield gzip compressed strings to the given block.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/rack/deflater.rb', line 92 def each(&block) @writer = block gzip = ::Zlib::GzipWriter.new(self) gzip.mtime = @mtime if @mtime @body.each { |part| # Skip empty strings, as they would result in no output, # and flushing empty parts would raise Zlib::BufError. next if part.empty? gzip.write(part) gzip.flush if @sync } ensure gzip.close end |
#write(data) ⇒ Object
Call the block passed to #each with the the gzipped data.
109 110 111 |
# File 'lib/rack/deflater.rb', line 109 def write(data) @writer.call(data) end |