File: deflate.rb

package info (click to toggle)
ruby-httpx 1.7.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,816 kB
  • sloc: ruby: 12,209; makefile: 4
file content (42 lines) | stat: -rw-r--r-- 961 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# frozen_string_literal: true

require "zlib"
require_relative "utils/deflater"

module HTTPX
  module Transcoder
    module Deflate
      class Deflater < Transcoder::Deflater
        def deflate(chunk)
          @deflater ||= Zlib::Deflate.new

          unless chunk.nil?
            chunk = @deflater.deflate(chunk)

            # deflate call may return nil, while still
            # retaining the last chunk in the deflater.
            return chunk unless chunk.empty?
          end

          return if @deflater.closed?

          last = @deflater.finish
          @deflater.close

          last unless last.empty?
        end
      end

      module_function

      def encode(body)
        Deflater.new(body)
      end

      def decode(response, bytesize: nil)
        bytesize ||= response.headers.key?("content-length") ? response.headers["content-length"].to_i : Float::INFINITY
        GZIP::Inflater.new(bytesize)
      end
    end
  end
end