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
|