class Rack::Deflater::GzipStream
Body class used for gzip encoded responses.
def close
def close @body.close if @body.respond_to?(:close) end
def each(&block)
def each(&block) @writer = block gzip = ::Zlib::GzipWriter.new(self) gzip.mtime = @mtime if @mtime # @body.each is equivalent to @body.gets (slow) if @body.is_a? ::File # XXX: Should probably be ::IO while part = @body.read(BUFFER_LENGTH) gzip.write(part) gzip.flush if @sync end else @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 } end ensure gzip.finish end
def initialize(body, mtime, sync)
modification time in the gzip header.
mtime :: The modification time of the body, used to set the
body :: Response body to compress with gzip
Initialize the gzip stream. Arguments:
def initialize(body, mtime, sync) @body = body @mtime = mtime @sync = sync end
def write(data)
def write(data) @writer.call(data) end