class Rack::Deflater::GzipStream

Body class used for gzip encoded responses.

Public Class Methods

new(body, mtime, sync) click to toggle source

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.

# File lib/rack/deflater.rb, line 84
def initialize(body, mtime, sync)
  @body = body
  @mtime = mtime
  @sync = sync
end

Public Instance Methods

close() click to toggle source

Close the original body if possible.

# File lib/rack/deflater.rb, line 113
def close
  @body.close if @body.respond_to?(:close)
end
each(&block) click to toggle source

Yield gzip compressed strings to the given block.

# File lib/rack/deflater.rb, line 91
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) click to toggle source

Call the block passed to each with the the gzipped data.

# File lib/rack/deflater.rb, line 108
def write(data)
  @writer.call(data)
end