28 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
require 'faraday'
 | 
						|
require 'zlib'
 | 
						|
 
 | 
						|
module Google
 | 
						|
  class APIClient
 | 
						|
    class Gzip < Faraday::Response::Middleware
 | 
						|
      include Google::APIClient::Logging
 | 
						|
 
 | 
						|
      def on_complete(env)
 | 
						|
        encoding = env[:response_headers]['content-encoding'].to_s.downcase
 | 
						|
        case encoding
 | 
						|
        when 'gzip'
 | 
						|
          logger.debug { "Decompressing gzip encoded response (#{env[:body].length} bytes)" }        
 | 
						|
          env[:body] = Zlib::GzipReader.new(StringIO.new(env[:body])).read
 | 
						|
          env[:response_headers].delete('content-encoding')
 | 
						|
          logger.debug { "Decompressed (#{env[:body].length} bytes)" }        
 | 
						|
        when 'deflate'
 | 
						|
          logger.debug{ "Decompressing deflate encoded response (#{env[:body].length} bytes)" }        
 | 
						|
          env[:body] = Zlib::Inflate.inflate(env[:body])
 | 
						|
          env[:response_headers].delete('content-encoding')
 | 
						|
          logger.debug { "Decompressed (#{env[:body].length} bytes)" }        
 | 
						|
        end
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 
 | 
						|
Faraday::Response.register_middleware :gzip => Google::APIClient::Gzip |