# 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 85
    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 114
    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 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) click to toggle source

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

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