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 |