class HTTParty::Decompressor
Decompresses the response body based on the Content-Encoding header.
Net::HTTP automatically decompresses Content-Encoding values “gzip” and “deflate”. This class will handle “br” (Brotli) and “compress” (LZW) if the requisite gems are installed. Otherwise, it returns nil if the body data cannot be decompressed.
@abstract Read the HTTP Compression section for more information.
Constants
- SupportedEncodings
“gzip” and “deflate” are handled by Net::HTTP hence they do not need to be handled by
HTTParty
Attributes
The response body of the request @return [String]
The Content-Encoding algorithm used to encode the body @return [Symbol] e.g. :gzip
Public Class Methods
@param [String] body - the response body of the request @param [Symbol] encoding - the Content-Encoding algorithm used to encode the body
# File lib/httparty/decompressor.rb, line 33 def initialize(body, encoding) @body = body @encoding = encoding end
Public Instance Methods
Perform decompression on the response body @return [String] the decompressed body @return [nil] when the response body is nil or cannot decompressed
# File lib/httparty/decompressor.rb, line 41 def decompress return nil if body.nil? return body if encoding.nil? || encoding.strip.empty? if supports_encoding? decompress_supported_encoding else nil end end
Protected Instance Methods
# File lib/httparty/decompressor.rb, line 71 def brotli return nil unless defined?(::Brotli) begin ::Brotli.inflate(body) rescue StandardError nil end end
# File lib/httparty/decompressor.rb, line 58 def decompress_supported_encoding method = SupportedEncodings[encoding] if respond_to?(method, true) send(method) else raise NotImplementedError, "#{self.class.name} has not implemented a decompression method for #{encoding.inspect} encoding." end end
# File lib/httparty/decompressor.rb, line 80 def lzw begin if defined?(::LZWS::String) ::LZWS::String.decompress(body) elsif defined?(::LZW::Simple) ::LZW::Simple.new.decompress(body) end rescue StandardError nil end end
# File lib/httparty/decompressor.rb, line 67 def none body end
# File lib/httparty/decompressor.rb, line 54 def supports_encoding? SupportedEncodings.keys.include?(encoding) end