33 lines
789 B
Ruby
33 lines
789 B
Ruby
require 'faraday'
|
|
require 'zlib'
|
|
|
|
module Google
|
|
class APIClient
|
|
class Charset < Faraday::Response::Middleware
|
|
include Google::APIClient::Logging
|
|
|
|
def charset_for_content_type(type)
|
|
if type
|
|
m = type.match(/(?:charset|encoding)="?([a-z0-9-]+)"?/i)
|
|
if m
|
|
return Encoding.find(m[1])
|
|
end
|
|
end
|
|
nil
|
|
end
|
|
|
|
def adjust_encoding(env)
|
|
charset = charset_for_content_type(env[:response_headers]['content-type'])
|
|
if charset && env[:body].encoding != charset
|
|
env[:body].force_encoding(charset)
|
|
end
|
|
end
|
|
|
|
def on_complete(env)
|
|
adjust_encoding(env)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Faraday::Response.register_middleware :charset => Google::APIClient::Charset |