#160 - Add option to set encoding of response body
This commit is contained in:
parent
91ae01aa83
commit
fda7288859
|
@ -31,6 +31,7 @@ require 'google/api_client/media'
|
||||||
require 'google/api_client/service_account'
|
require 'google/api_client/service_account'
|
||||||
require 'google/api_client/batch'
|
require 'google/api_client/batch'
|
||||||
require 'google/api_client/gzip'
|
require 'google/api_client/gzip'
|
||||||
|
require 'google/api_client/charset'
|
||||||
require 'google/api_client/client_secrets'
|
require 'google/api_client/client_secrets'
|
||||||
require 'google/api_client/railtie' if defined?(Rails)
|
require 'google/api_client/railtie' if defined?(Rails)
|
||||||
|
|
||||||
|
@ -75,6 +76,9 @@ module Google
|
||||||
# @option options [String] :ca_file
|
# @option options [String] :ca_file
|
||||||
# Optional set of root certificates to use when validating SSL connections.
|
# Optional set of root certificates to use when validating SSL connections.
|
||||||
# By default, a bundled set of trusted roots will be used.
|
# By default, a bundled set of trusted roots will be used.
|
||||||
|
# @options options[Hash] :force_encoding
|
||||||
|
# Experimental option. True if response body should be force encoded into the charset
|
||||||
|
# specified in the Content-Type header. Mostly intended for compressed content.
|
||||||
# @options options[Hash] :faraday_options
|
# @options options[Hash] :faraday_options
|
||||||
# Pass through of options to set on the Faraday connection
|
# Pass through of options to set on the Faraday connection
|
||||||
def initialize(options={})
|
def initialize(options={})
|
||||||
|
@ -119,6 +123,7 @@ module Google
|
||||||
@discovered_apis = {}
|
@discovered_apis = {}
|
||||||
ca_file = options[:ca_file] || File.expand_path('../../cacerts.pem', __FILE__)
|
ca_file = options[:ca_file] || File.expand_path('../../cacerts.pem', __FILE__)
|
||||||
self.connection = Faraday.new do |faraday|
|
self.connection = Faraday.new do |faraday|
|
||||||
|
faraday.response :charset if options[:force_encoding]
|
||||||
faraday.response :gzip
|
faraday.response :gzip
|
||||||
faraday.options.params_encoder = Faraday::FlatParamsEncoder
|
faraday.options.params_encoder = Faraday::FlatParamsEncoder
|
||||||
faraday.ssl.ca_file = ca_file
|
faraday.ssl.ca_file = ca_file
|
||||||
|
@ -265,10 +270,12 @@ module Google
|
||||||
# @param [String, Symbol] api The API name.
|
# @param [String, Symbol] api The API name.
|
||||||
# @param [String] version The desired version of the API.
|
# @param [String] version The desired version of the API.
|
||||||
# @param [Addressable::URI] uri The URI of the discovery document.
|
# @param [Addressable::URI] uri The URI of the discovery document.
|
||||||
|
# @return [Google::APIClient::API] The service object.
|
||||||
def register_discovery_uri(api, version, uri)
|
def register_discovery_uri(api, version, uri)
|
||||||
api = api.to_s
|
api = api.to_s
|
||||||
version = version || 'v1'
|
version = version || 'v1'
|
||||||
@discovery_uris["#{api}:#{version}"] = uri
|
@discovery_uris["#{api}:#{version}"] = uri
|
||||||
|
discovered_api(api, version)
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -297,6 +304,7 @@ module Google
|
||||||
# @param [String] version The desired version of the API.
|
# @param [String] version The desired version of the API.
|
||||||
# @param [String, StringIO] discovery_document
|
# @param [String, StringIO] discovery_document
|
||||||
# The contents of the discovery document.
|
# The contents of the discovery document.
|
||||||
|
# @return [Google::APIClient::API] The service object.
|
||||||
def register_discovery_document(api, version, discovery_document)
|
def register_discovery_document(api, version, discovery_document)
|
||||||
api = api.to_s
|
api = api.to_s
|
||||||
version = version || 'v1'
|
version = version || 'v1'
|
||||||
|
@ -311,6 +319,7 @@ module Google
|
||||||
end
|
end
|
||||||
@discovery_documents["#{api}:#{version}"] =
|
@discovery_documents["#{api}:#{version}"] =
|
||||||
MultiJson.load(discovery_document)
|
MultiJson.load(discovery_document)
|
||||||
|
discovered_api(api, version)
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
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
|
|
@ -0,0 +1,584 @@
|
||||||
|
{
|
||||||
|
"kind": "discovery#describeItem",
|
||||||
|
"name": "zoo",
|
||||||
|
"version": "v1",
|
||||||
|
"description": "Zoo API used for testing",
|
||||||
|
"basePath": "/zoo/",
|
||||||
|
"rootUrl": "https://www.googleapis.com/",
|
||||||
|
"servicePath": "zoo/v1/",
|
||||||
|
"rpcPath": "/rpc",
|
||||||
|
"parameters": {
|
||||||
|
"alt": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Data format for the response.",
|
||||||
|
"default": "json",
|
||||||
|
"enum": [
|
||||||
|
"json"
|
||||||
|
],
|
||||||
|
"enumDescriptions": [
|
||||||
|
"Responses with Content-Type of application/json"
|
||||||
|
],
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Selector specifying which fields to include in a partial response.",
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"key": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"oauth_token": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "OAuth 2.0 token for the current user.",
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"prettyPrint": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Returns response with indentations and line breaks.",
|
||||||
|
"default": "true",
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"quotaUser": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.",
|
||||||
|
"location": "query"
|
||||||
|
},
|
||||||
|
"userIp": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.",
|
||||||
|
"location": "query"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
"dataWrapper"
|
||||||
|
],
|
||||||
|
"schemas": {
|
||||||
|
"Animal": {
|
||||||
|
"id": "Animal",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"etag": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#animal"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"photo": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"filename": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hash": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hashAlgorithm": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Animal2": {
|
||||||
|
"id": "Animal2",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#animal"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AnimalFeed": {
|
||||||
|
"id": "AnimalFeed",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"etag": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"items": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#animalFeed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"AnimalMap": {
|
||||||
|
"id": "AnimalMap",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"etag": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"animals": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Map of animal id to animal data",
|
||||||
|
"additionalProperties": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#animalMap"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"LoadFeed": {
|
||||||
|
"id": "LoadFeed",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"items": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"doubleVal": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"nullVal": {
|
||||||
|
"type": "null"
|
||||||
|
},
|
||||||
|
"booleanVal": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "True or False."
|
||||||
|
},
|
||||||
|
"anyVal": {
|
||||||
|
"type": "any",
|
||||||
|
"description": "Anything will do."
|
||||||
|
},
|
||||||
|
"enumVal": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#loadValue"
|
||||||
|
},
|
||||||
|
"longVal": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"stringVal": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "zoo#loadFeed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"methods": {
|
||||||
|
"query": {
|
||||||
|
"path": "query",
|
||||||
|
"id": "bigquery.query",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"parameters": {
|
||||||
|
"q": {
|
||||||
|
"type": "string",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false
|
||||||
|
},
|
||||||
|
"i": {
|
||||||
|
"type": "integer",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false,
|
||||||
|
"minimum": "0",
|
||||||
|
"maximum": "4294967295",
|
||||||
|
"default": "20"
|
||||||
|
},
|
||||||
|
"n": {
|
||||||
|
"type": "number",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false
|
||||||
|
},
|
||||||
|
"b": {
|
||||||
|
"type": "boolean",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false
|
||||||
|
},
|
||||||
|
"a": {
|
||||||
|
"type": "any",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false
|
||||||
|
},
|
||||||
|
"o": {
|
||||||
|
"type": "object",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false
|
||||||
|
},
|
||||||
|
"e": {
|
||||||
|
"type": "string",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": false,
|
||||||
|
"enum": [
|
||||||
|
"foo",
|
||||||
|
"bar"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"er": {
|
||||||
|
"type": "string",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": true,
|
||||||
|
"enum": [
|
||||||
|
"one",
|
||||||
|
"two",
|
||||||
|
"three"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"rr": {
|
||||||
|
"type": "string",
|
||||||
|
"location": "query",
|
||||||
|
"required": false,
|
||||||
|
"repeated": true,
|
||||||
|
"pattern": "[a-z]+"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"my": {
|
||||||
|
"resources": {
|
||||||
|
"favorites": {
|
||||||
|
"methods": {
|
||||||
|
"list": {
|
||||||
|
"path": "favorites/@me/mine",
|
||||||
|
"id": "zoo.animals.mine",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"parameters": {
|
||||||
|
"max-results": {
|
||||||
|
"location": "query",
|
||||||
|
"required": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"resources": {
|
||||||
|
"print": {
|
||||||
|
"methods": {
|
||||||
|
"assert": {
|
||||||
|
"path": "global/print/assert",
|
||||||
|
"id": "zoo.animals.mine",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"parameters": {
|
||||||
|
"max-results": {
|
||||||
|
"location": "query",
|
||||||
|
"required": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"animals": {
|
||||||
|
"methods": {
|
||||||
|
"crossbreed": {
|
||||||
|
"path": "animals/crossbreed",
|
||||||
|
"id": "zoo.animals.crossbreed",
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"description": "Cross-breed animals",
|
||||||
|
"response": {
|
||||||
|
"$ref": "Animal2"
|
||||||
|
},
|
||||||
|
"mediaUpload": {
|
||||||
|
"accept": [
|
||||||
|
"image/png"
|
||||||
|
],
|
||||||
|
"protocols": {
|
||||||
|
"simple": {
|
||||||
|
"multipart": true,
|
||||||
|
"path": "upload/activities/{userId}/@self"
|
||||||
|
},
|
||||||
|
"resumable": {
|
||||||
|
"multipart": true,
|
||||||
|
"path": "upload/activities/{userId}/@self"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"delete": {
|
||||||
|
"path": "animals/{name}",
|
||||||
|
"id": "zoo.animals.delete",
|
||||||
|
"httpMethod": "DELETE",
|
||||||
|
"description": "Delete animals",
|
||||||
|
"parameters": {
|
||||||
|
"name": {
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"description": "Name of the animal to delete",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameterOrder": [
|
||||||
|
"name"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"get": {
|
||||||
|
"path": "animals/{name}",
|
||||||
|
"id": "zoo.animals.get",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"description": "Get animals",
|
||||||
|
"supportsMediaDownload": true,
|
||||||
|
"parameters": {
|
||||||
|
"name": {
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"description": "Name of the animal to load",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"projection": {
|
||||||
|
"location": "query",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"full"
|
||||||
|
],
|
||||||
|
"enumDescriptions": [
|
||||||
|
"Include everything"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameterOrder": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"response": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"getmedia": {
|
||||||
|
"path": "animals/{name}",
|
||||||
|
"id": "zoo.animals.get",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"description": "Get animals",
|
||||||
|
"parameters": {
|
||||||
|
"name": {
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"description": "Name of the animal to load",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"projection": {
|
||||||
|
"location": "query",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"full"
|
||||||
|
],
|
||||||
|
"enumDescriptions": [
|
||||||
|
"Include everything"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameterOrder": [
|
||||||
|
"name"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"insert": {
|
||||||
|
"path": "animals",
|
||||||
|
"id": "zoo.animals.insert",
|
||||||
|
"httpMethod": "POST",
|
||||||
|
"description": "Insert animals",
|
||||||
|
"request": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
},
|
||||||
|
"mediaUpload": {
|
||||||
|
"accept": [
|
||||||
|
"image/png"
|
||||||
|
],
|
||||||
|
"maxSize": "1KB",
|
||||||
|
"protocols": {
|
||||||
|
"simple": {
|
||||||
|
"multipart": true,
|
||||||
|
"path": "upload/activities/{userId}/@self"
|
||||||
|
},
|
||||||
|
"resumable": {
|
||||||
|
"multipart": true,
|
||||||
|
"path": "upload/activities/{userId}/@self"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"list": {
|
||||||
|
"path": "animals",
|
||||||
|
"id": "zoo.animals.list",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"description": "List animals",
|
||||||
|
"parameters": {
|
||||||
|
"max-results": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Maximum number of results to return",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": "0"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Restrict result to animals with this name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"projection": {
|
||||||
|
"location": "query",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"full"
|
||||||
|
],
|
||||||
|
"enumDescriptions": [
|
||||||
|
"Include absolutely everything"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"start-token": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Pagination token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "AnimalFeed"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"patch": {
|
||||||
|
"path": "animals/{name}",
|
||||||
|
"id": "zoo.animals.patch",
|
||||||
|
"httpMethod": "PATCH",
|
||||||
|
"description": "Update animals",
|
||||||
|
"parameters": {
|
||||||
|
"name": {
|
||||||
|
"location": "path",
|
||||||
|
"required": true,
|
||||||
|
"description": "Name of the animal to update",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameterOrder": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"request": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"path": "animals/{name}",
|
||||||
|
"id": "zoo.animals.update",
|
||||||
|
"httpMethod": "PUT",
|
||||||
|
"description": "Update animals",
|
||||||
|
"parameters": {
|
||||||
|
"name": {
|
||||||
|
"location": "path",
|
||||||
|
"description": "Name of the animal to update",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"parameterOrder": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"request": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "Animal"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"load": {
|
||||||
|
"methods": {
|
||||||
|
"list": {
|
||||||
|
"path": "load",
|
||||||
|
"id": "zoo.load.list",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"response": {
|
||||||
|
"$ref": "LoadFeed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"loadNoTemplate": {
|
||||||
|
"methods": {
|
||||||
|
"list": {
|
||||||
|
"path": "loadNoTemplate",
|
||||||
|
"id": "zoo.loadNoTemplate.list",
|
||||||
|
"httpMethod": "GET"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scopedAnimals": {
|
||||||
|
"methods": {
|
||||||
|
"list": {
|
||||||
|
"path": "scopedanimals",
|
||||||
|
"id": "zoo.scopedAnimals.list",
|
||||||
|
"httpMethod": "GET",
|
||||||
|
"description": "List animals (scoped)",
|
||||||
|
"parameters": {
|
||||||
|
"max-results": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Maximum number of results to return",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": "0"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Restrict result to animals with this name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"projection": {
|
||||||
|
"location": "query",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"full"
|
||||||
|
],
|
||||||
|
"enumDescriptions": [
|
||||||
|
"Include absolutely everything"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"start-token": {
|
||||||
|
"location": "query",
|
||||||
|
"description": "Pagination token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": {
|
||||||
|
"$ref": "AnimalFeed"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,6 +23,8 @@ require 'compat/multi_json'
|
||||||
require 'signet/oauth_1/client'
|
require 'signet/oauth_1/client'
|
||||||
require 'google/api_client'
|
require 'google/api_client'
|
||||||
|
|
||||||
|
fixtures_path = File.expand_path('../../../fixtures', __FILE__)
|
||||||
|
|
||||||
RSpec.describe Google::APIClient do
|
RSpec.describe Google::APIClient do
|
||||||
include ConnectionHelpers
|
include ConnectionHelpers
|
||||||
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
||||||
|
@ -70,6 +72,15 @@ RSpec.describe Google::APIClient do
|
||||||
expect(CLIENT.preferred_version('bogus')).to eq(nil)
|
expect(CLIENT.preferred_version('bogus')).to eq(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'with zoo API' do
|
||||||
|
it 'should return API instance registered from file' do
|
||||||
|
zoo_json = File.join(fixtures_path, 'files', 'zoo.json')
|
||||||
|
contents = File.open(zoo_json, 'rb') { |io| io.read }
|
||||||
|
api = CLIENT.register_discovery_document('zoo', 'v1', contents)
|
||||||
|
expect(api).to be_kind_of(Google::APIClient::API)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe 'with the prediction API' do
|
describe 'with the prediction API' do
|
||||||
before do
|
before do
|
||||||
CLIENT.authorization = nil
|
CLIENT.authorization = nil
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# Encoding: utf-8
|
||||||
# Copyright 2012 Google Inc.
|
# Copyright 2012 Google Inc.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@ -20,6 +21,7 @@ RSpec.describe Google::APIClient::Gzip do
|
||||||
|
|
||||||
def create_connection(&block)
|
def create_connection(&block)
|
||||||
Faraday.new do |b|
|
Faraday.new do |b|
|
||||||
|
b.response :charset
|
||||||
b.response :gzip
|
b.response :gzip
|
||||||
b.adapter :test do |stub|
|
b.adapter :test do |stub|
|
||||||
stub.get '/', &block
|
stub.get '/', &block
|
||||||
|
@ -43,6 +45,17 @@ RSpec.describe Google::APIClient::Gzip do
|
||||||
expect(result.body).to eq("Hello world\n")
|
expect(result.body).to eq("Hello world\n")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should inflate with the correct charset encoding' do
|
||||||
|
conn = create_connection do |env|
|
||||||
|
[200,
|
||||||
|
{ 'Content-Encoding' => 'deflate', 'Content-Type' => 'application/json;charset=BIG5'},
|
||||||
|
Base64.decode64('eJxb8nLp7t2VAA8fBCI=')]
|
||||||
|
end
|
||||||
|
result = conn.get('/')
|
||||||
|
expect(result.body.encoding).to eq(Encoding::BIG5)
|
||||||
|
expect(result.body).to eq('日本語'.encode("BIG5"))
|
||||||
|
end
|
||||||
|
|
||||||
describe 'with API Client' do
|
describe 'with API Client' do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
|
|
Loading…
Reference in New Issue