class HTTP::Features::AutoDeflate::CompressedBody

Public Class Methods

new(body) click to toggle source
# File lib/http/features/auto_deflate.rb, line 30
def initialize(body)
  @body       = body
  @compressed = nil
end

Public Instance Methods

each(&block) click to toggle source
# File lib/http/features/auto_deflate.rb, line 40
def each(&block)
  return to_enum __method__ unless block

  if @compressed
    compressed_each(&block)
  else
    compress(&block)
  end

  self
end
size() click to toggle source
# File lib/http/features/auto_deflate.rb, line 35
def size
  compress_all! unless @compressed
  @compressed.size
end

Private Instance Methods

compressed_each() click to toggle source
# File lib/http/features/auto_deflate.rb, line 54
  def compressed_each
    while (data = @compressed.read(Connection::BUFFER_SIZE))
      yield data
    end
  ensure
    @compressed.close!
  end

  def compress_all!
    @compressed = Tempfile.new("http-compressed_body", :binmode => true)
    compress { |data| @compressed.write(data) }
    @compressed.rewind
  end
end