Sha256: e4d2f4507a0a87639f4f58b028a0f9fa7943efc7d3414358cce05f3f4fde1d56
Contents?: true
Size: 1.92 KB
Versions: 3
Compression:
Stored size: 1.92 KB
Contents
# frozen_string_literal: true require "forwardable" module HTTPX module Plugins module Compression module GZIP def self.load_dependencies(*) require "zlib" end def self.configure(klass) klass.default_options.encodings.register "gzip", self end class Deflater def initialize @compressed_chunk = "".b end def deflate(raw, buffer, chunk_size:) gzip = Zlib::GzipWriter.new(self) begin while (chunk = raw.read(chunk_size)) gzip.write(chunk) gzip.flush compressed = compressed_chunk buffer << compressed yield compressed if block_given? end ensure gzip.close end return unless (compressed = compressed_chunk) buffer << compressed yield compressed if block_given? end private def write(chunk) @compressed_chunk << chunk end def compressed_chunk @compressed_chunk.dup ensure @compressed_chunk.clear end end class Inflater def initialize(bytesize) @inflater = Zlib::Inflate.new(32 + Zlib::MAX_WBITS) @bytesize = bytesize @buffer = nil end def inflate(chunk) buffer = @inflater.inflate(chunk) @bytesize -= chunk.bytesize if @bytesize <= 0 buffer << @inflater.finish @inflater.close end buffer end end module_function def deflater Deflater.new end def inflater(bytesize) Inflater.new(bytesize) end end end register_plugin :"compression/gzip", Compression::GZIP end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
httpx-0.13.2 | lib/httpx/plugins/compression/gzip.rb |
httpx-0.13.1 | lib/httpx/plugins/compression/gzip.rb |
httpx-0.13.0 | lib/httpx/plugins/compression/gzip.rb |