Method: Rack::Deflater::GzipStream#each

Defined in:
lib/rack/deflater.rb

#each(&block) ⇒ Object

Yield gzip compressed strings to the given block.



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/rack/deflater.rb', line 99

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