google-api-client 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -2
- data/README.md +16 -13
- data/Rakefile +6 -2
- data/bin/google-api +24 -172
- data/lib/compat/multi_json.rb +4 -1
- data/lib/google/api_client.rb +30 -8
- data/lib/google/api_client/auth/installed_app.rb +115 -0
- data/lib/google/api_client/auth/jwt_asserter.rb +48 -50
- data/lib/google/api_client/auth/key_utils.rb +93 -0
- data/lib/google/api_client/auth/pkcs12.rb +4 -11
- data/lib/google/api_client/batch.rb +2 -3
- data/lib/google/api_client/client_secrets.rb +0 -1
- data/lib/google/api_client/discovery/api.rb +15 -1
- data/lib/google/api_client/logging.rb +32 -0
- data/lib/google/api_client/railtie.rb +16 -0
- data/lib/google/api_client/request.rb +36 -28
- data/lib/google/api_client/service_account.rb +1 -0
- data/lib/google/api_client/version.rb +1 -1
- data/spec/fixtures/files/privatekey.p12 +0 -0
- data/spec/fixtures/files/secret.pem +19 -0
- data/spec/google/api_client/batch_spec.rb +1 -1
- data/spec/google/api_client/discovery_spec.rb +20 -3
- data/spec/google/api_client/media_spec.rb +1 -1
- data/spec/google/api_client/result_spec.rb +1 -1
- data/spec/google/api_client/service_account_spec.rb +34 -1
- data/spec/google/api_client_spec.rb +1 -1
- data/tasks/gem.rake +2 -2
- metadata +35 -30
- data/Gemfile.lock +0 -80
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'google/api_client/logging'
|
2
|
+
|
3
|
+
module Google
|
4
|
+
class APIClient
|
5
|
+
|
6
|
+
##
|
7
|
+
# Optional support class for Rails. Currently replaces the built-in logger
|
8
|
+
# with Rails' application log.
|
9
|
+
#
|
10
|
+
class Railtie < Rails::Railtie
|
11
|
+
initializer 'google-api-client' do |app|
|
12
|
+
Google::APIClient.logger = Rails.logger
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -19,6 +19,7 @@ require 'compat/multi_json'
|
|
19
19
|
require 'addressable/uri'
|
20
20
|
require 'stringio'
|
21
21
|
require 'google/api_client/discovery'
|
22
|
+
require 'google/api_client/logging'
|
22
23
|
|
23
24
|
module Google
|
24
25
|
class APIClient
|
@@ -26,8 +27,10 @@ module Google
|
|
26
27
|
##
|
27
28
|
# Represents an API request.
|
28
29
|
class Request
|
29
|
-
|
30
|
+
include Google::APIClient::Logging
|
30
31
|
|
32
|
+
MULTIPART_BOUNDARY = "-----------RubyApiMultipartPost".freeze
|
33
|
+
|
31
34
|
# @return [Hash] Request parameters
|
32
35
|
attr_reader :parameters
|
33
36
|
# @return [Hash] Additional HTTP headers
|
@@ -42,7 +45,7 @@ module Google
|
|
42
45
|
attr_accessor :authenticated
|
43
46
|
# @return [#read, #to_str] Request body
|
44
47
|
attr_accessor :body
|
45
|
-
|
48
|
+
|
46
49
|
##
|
47
50
|
# Build a request
|
48
51
|
#
|
@@ -52,7 +55,7 @@ module Google
|
|
52
55
|
# @option options [Google::APIClient::Method] :api_method
|
53
56
|
# API method to invoke. Either :api_method or :uri must be specified
|
54
57
|
# @option options [TrueClass, FalseClass] :authenticated
|
55
|
-
# True if request should include credentials. Implicitly true if
|
58
|
+
# True if request should include credentials. Implicitly true if
|
56
59
|
# unspecified and :authorization present
|
57
60
|
# @option options [#generate_signed_request] :authorization
|
58
61
|
# OAuth credentials
|
@@ -74,12 +77,12 @@ module Google
|
|
74
77
|
self.api_method = options[:api_method]
|
75
78
|
self.authenticated = options[:authenticated]
|
76
79
|
self.authorization = options[:authorization]
|
77
|
-
|
80
|
+
|
78
81
|
# These parameters are handled differently because they're not
|
79
82
|
# parameters to the API method, but rather to the API system.
|
80
83
|
self.parameters['key'] ||= options[:key] if options[:key]
|
81
84
|
self.parameters['userIp'] ||= options[:user_ip] if options[:user_ip]
|
82
|
-
|
85
|
+
|
83
86
|
if options[:media]
|
84
87
|
self.initialize_media_upload(options)
|
85
88
|
elsif options[:body]
|
@@ -90,13 +93,13 @@ module Google
|
|
90
93
|
else
|
91
94
|
self.body = ''
|
92
95
|
end
|
93
|
-
|
96
|
+
|
94
97
|
unless self.api_method
|
95
98
|
self.http_method = options[:http_method] || 'GET'
|
96
99
|
self.uri = options[:uri]
|
97
100
|
end
|
98
101
|
end
|
99
|
-
|
102
|
+
|
100
103
|
# @!attribute [r] upload_type
|
101
104
|
# @return [String] protocol used for upload
|
102
105
|
def upload_type
|
@@ -128,7 +131,7 @@ module Google
|
|
128
131
|
"Expected Google::APIClient::Method, got #{new_api_method.class}."
|
129
132
|
end
|
130
133
|
end
|
131
|
-
|
134
|
+
|
132
135
|
# @!attribute uri
|
133
136
|
# @return [Addressable::URI] URI to send request
|
134
137
|
def uri
|
@@ -145,26 +148,31 @@ module Google
|
|
145
148
|
#
|
146
149
|
# @api private
|
147
150
|
#
|
148
|
-
# @param [Faraday::Connection] connection
|
151
|
+
# @param [Faraday::Connection] connection
|
149
152
|
# the connection to transmit with
|
150
|
-
#
|
151
|
-
# @return [Google::APIClient::Result]
|
153
|
+
#
|
154
|
+
# @return [Google::APIClient::Result]
|
152
155
|
# result of API request
|
153
156
|
def send(connection)
|
154
|
-
|
157
|
+
env = self.to_env(connection)
|
158
|
+
logger.debug { "#{self.class} Sending API request #{env[:method]} #{env[:url].to_s} #{env[:request_headers]}" }
|
159
|
+
http_response = connection.app.call(env)
|
155
160
|
result = self.process_http_response(http_response)
|
156
|
-
|
161
|
+
|
162
|
+
logger.debug { "#{self.class} Result: #{result.status} #{result.headers}" }
|
163
|
+
|
157
164
|
# Resumamble slightly different than other upload protocols in that it requires at least
|
158
165
|
# 2 requests.
|
159
166
|
if self.upload_type == 'resumable'
|
160
167
|
upload = result.resumable_upload
|
161
168
|
unless upload.complete?
|
169
|
+
logger.debug { "#{self.class} Sending upload body" }
|
162
170
|
result = upload.send(connection)
|
163
171
|
end
|
164
172
|
end
|
165
173
|
return result
|
166
174
|
end
|
167
|
-
|
175
|
+
|
168
176
|
# Convert to an HTTP request. Returns components in order of method, URI,
|
169
177
|
# request headers, and body
|
170
178
|
#
|
@@ -172,7 +180,7 @@ module Google
|
|
172
180
|
#
|
173
181
|
# @return [Array<(Symbol, Addressable::URI, Hash, [#read,#to_str])>]
|
174
182
|
def to_http_request
|
175
|
-
request = (
|
183
|
+
request = (
|
176
184
|
if self.uri
|
177
185
|
unless self.parameters.empty?
|
178
186
|
self.uri.query = Addressable::URI.form_encode(self.parameters)
|
@@ -204,7 +212,7 @@ module Google
|
|
204
212
|
end
|
205
213
|
return options
|
206
214
|
end
|
207
|
-
|
215
|
+
|
208
216
|
##
|
209
217
|
# Prepares the request for execution, building a hash of parts
|
210
218
|
# suitable for sending to Faraday::Connection.
|
@@ -233,7 +241,7 @@ module Google
|
|
233
241
|
|
234
242
|
request_env = http_request.to_env(connection)
|
235
243
|
end
|
236
|
-
|
244
|
+
|
237
245
|
##
|
238
246
|
# Convert HTTP response to an API Result
|
239
247
|
#
|
@@ -247,9 +255,9 @@ module Google
|
|
247
255
|
def process_http_response(response)
|
248
256
|
Result.new(self, response)
|
249
257
|
end
|
250
|
-
|
258
|
+
|
251
259
|
protected
|
252
|
-
|
260
|
+
|
253
261
|
##
|
254
262
|
# Adjust headers & body for media uploads
|
255
263
|
#
|
@@ -269,14 +277,14 @@ module Google
|
|
269
277
|
self.media = options[:media]
|
270
278
|
case self.upload_type
|
271
279
|
when "media"
|
272
|
-
if options[:body] || options[:body_object]
|
280
|
+
if options[:body] || options[:body_object]
|
273
281
|
raise ArgumentError, "Can not specify body & body object for simple uploads"
|
274
282
|
end
|
275
283
|
self.headers['Content-Type'] ||= self.media.content_type
|
276
284
|
self.body = self.media
|
277
285
|
when "multipart"
|
278
|
-
unless options[:body_object]
|
279
|
-
raise ArgumentError, "Multipart requested but no body object"
|
286
|
+
unless options[:body_object]
|
287
|
+
raise ArgumentError, "Multipart requested but no body object"
|
280
288
|
end
|
281
289
|
metadata = StringIO.new(serialize_body(options[:body_object]))
|
282
290
|
build_multipart([Faraday::UploadIO.new(metadata, 'application/json', 'file.json'), self.media])
|
@@ -286,13 +294,13 @@ module Google
|
|
286
294
|
self.headers['X-Upload-Content-Length'] = file_length.to_s
|
287
295
|
if options[:body_object]
|
288
296
|
self.headers['Content-Type'] ||= 'application/json'
|
289
|
-
self.body = serialize_body(options[:body_object])
|
297
|
+
self.body = serialize_body(options[:body_object])
|
290
298
|
else
|
291
299
|
self.body = ''
|
292
300
|
end
|
293
301
|
end
|
294
302
|
end
|
295
|
-
|
303
|
+
|
296
304
|
##
|
297
305
|
# Assemble a multipart message from a set of parts
|
298
306
|
#
|
@@ -304,7 +312,7 @@ module Google
|
|
304
312
|
# MIME type of the message
|
305
313
|
# @param [String] boundary
|
306
314
|
# Boundary for separating each part of the message
|
307
|
-
def build_multipart(parts, mime_type = 'multipart/related', boundary = MULTIPART_BOUNDARY)
|
315
|
+
def build_multipart(parts, mime_type = 'multipart/related', boundary = MULTIPART_BOUNDARY)
|
308
316
|
env = {
|
309
317
|
:request_headers => {'Content-Type' => "#{mime_type};boundary=#{boundary}"},
|
310
318
|
:request => { :boundary => boundary }
|
@@ -313,10 +321,10 @@ module Google
|
|
313
321
|
self.body = multipart.create_multipart(env, parts.map {|part| [nil, part]})
|
314
322
|
self.headers.update(env[:request_headers])
|
315
323
|
end
|
316
|
-
|
324
|
+
|
317
325
|
##
|
318
326
|
# Serialize body object to JSON
|
319
|
-
#
|
327
|
+
#
|
320
328
|
# @api private
|
321
329
|
#
|
322
330
|
# @param [#to_json,#to_hash] body
|
@@ -326,7 +334,7 @@ module Google
|
|
326
334
|
# JSON
|
327
335
|
def serialize_body(body)
|
328
336
|
return body.to_json if body.respond_to?(:to_json)
|
329
|
-
return MultiJson.dump(
|
337
|
+
return MultiJson.dump(body.to_hash) if body.respond_to?(:to_hash)
|
330
338
|
raise TypeError, 'Could not convert body object to JSON.' +
|
331
339
|
'Must respond to :to_json or :to_hash.'
|
332
340
|
end
|
Binary file
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Bag Attributes
|
2
|
+
friendlyName: privatekey
|
3
|
+
localKeyID: 54 69 6D 65 20 31 33 35 31 38 38 38 31 37 38 36 39 36
|
4
|
+
Key Attributes: <No Attributes>
|
5
|
+
-----BEGIN RSA PRIVATE KEY-----
|
6
|
+
MIICXAIBAAKBgQDYDyPb3GhyFx5i/wxS/jFsO6wSLys1ehAk6QZoBXGlg7ETVrIJ
|
7
|
+
HYh9gXQUno4tJiQoaO8wOvleIRrqI0LkiftCXKWVSrzOiV+O9GkKx1byw1yAIZus
|
8
|
+
QdwMT7X0O9hrZLZwhICWC9s6cGhnlCVxLIP/+JkVK7hxEq/LxoSszNV77wIDAQAB
|
9
|
+
AoGAa2G69L7quil7VMBmI6lqbtyJfNAsrXtpIq8eG/z4qsZ076ObAKTI/XeldcoH
|
10
|
+
57CZL+xXVKU64umZMt0rleJuGXdlauEUbsSx+biGewRfGTgC4rUSjmE539rBvmRW
|
11
|
+
gaKliorepPMp/+B9CcG/2YfDPRvG/2cgTXJHVvneo+xHL4ECQQD2Jx5Mvs8z7s2E
|
12
|
+
jY1mkpRKqh4Z7rlitkAwe1NXcVC8hz5ASu7ORyTl8EPpKAfRMYl1ofK/ozT1URXf
|
13
|
+
kL5nChPfAkEA4LPUJ6cqrY4xrrtdGaM4iGIxzen5aZlKz/YNlq5LuQKbnLLHMuXU
|
14
|
+
ohp/ynpqNWbcAFbmtGSMayxGKW5+fJgZ8QJAUBOZv82zCmn9YcnK3juBEmkVMcp/
|
15
|
+
dKVlbGAyVJgAc9RrY+78kQ6D6mmnLgpfwKYk2ae9mKo3aDbgrsIfrtWQcQJAfFGi
|
16
|
+
CEpJp3orbLQG319ZsMM7MOTJdC42oPZOMFbAWFzkAX88DKHx0bn9h+XQizkccSej
|
17
|
+
Ppz+v3DgZJ3YZ1Cz0QJBALiqIokZ+oa3AY6oT0aiec6txrGvNPPbwOsrBpFqGNbu
|
18
|
+
AByzWWBoBi40eKMSIR30LqN9H8YnJ91Aoy1njGYyQaw=
|
19
|
+
-----END RSA PRIVATE KEY-----
|
@@ -17,7 +17,7 @@ require 'google/api_client'
|
|
17
17
|
require 'google/api_client/version'
|
18
18
|
|
19
19
|
describe Google::APIClient::BatchRequest do
|
20
|
-
CLIENT = Google::APIClient.new unless defined?(CLIENT)
|
20
|
+
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
21
21
|
|
22
22
|
after do
|
23
23
|
# Reset client to not-quite-pristine state
|
@@ -43,7 +43,7 @@ end
|
|
43
43
|
|
44
44
|
describe Google::APIClient do
|
45
45
|
include ConnectionHelpers
|
46
|
-
CLIENT = Google::APIClient.new unless defined?(CLIENT)
|
46
|
+
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
47
47
|
|
48
48
|
after do
|
49
49
|
# Reset client to not-quite-pristine state
|
@@ -53,7 +53,7 @@ describe Google::APIClient do
|
|
53
53
|
|
54
54
|
it 'should raise a type error for bogus authorization' do
|
55
55
|
(lambda do
|
56
|
-
Google::APIClient.new(:authorization => 42)
|
56
|
+
Google::APIClient.new(:application_name => 'API Client Tests', :authorization => 42)
|
57
57
|
end).should raise_error(TypeError)
|
58
58
|
end
|
59
59
|
|
@@ -214,6 +214,23 @@ describe Google::APIClient do
|
|
214
214
|
conn.verify
|
215
215
|
end
|
216
216
|
|
217
|
+
it 'should generate valid requests when parameter value includes semicolon' do
|
218
|
+
conn = stub_connection do |stub|
|
219
|
+
# semicolon (;) in parameter value was being converted to
|
220
|
+
# bare ampersand (&) in 0.4.7. ensure that it gets converted
|
221
|
+
# to a CGI-escaped semicolon (%3B) instead.
|
222
|
+
stub.post('/prediction/v1.2/training?data=12345%3B67890') do |env|
|
223
|
+
env[:body].should == ''
|
224
|
+
end
|
225
|
+
end
|
226
|
+
request = CLIENT.execute(
|
227
|
+
:api_method => @prediction.training.insert,
|
228
|
+
:parameters => {'data' => '12345;67890'},
|
229
|
+
:connection => conn
|
230
|
+
)
|
231
|
+
conn.verify
|
232
|
+
end
|
233
|
+
|
217
234
|
it 'should generate valid requests when repeated parameters are passed' do
|
218
235
|
pending("This is caused by Faraday's encoding of query parameters.")
|
219
236
|
conn = stub_connection do |stub|
|
@@ -258,7 +275,7 @@ describe Google::APIClient do
|
|
258
275
|
it 'should allow modification to the base URIs for testing purposes' do
|
259
276
|
# Using a new client instance here to avoid caching rebased discovery doc
|
260
277
|
prediction_rebase =
|
261
|
-
Google::APIClient.new.discovered_api('prediction', 'v1.2')
|
278
|
+
Google::APIClient.new(:application_name => 'API Client Tests').discovered_api('prediction', 'v1.2')
|
262
279
|
prediction_rebase.method_base =
|
263
280
|
'https://testing-domain.example.com/prediction/v1.2/'
|
264
281
|
|
@@ -58,7 +58,7 @@ describe Google::APIClient::UploadIO do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
describe Google::APIClient::ResumableUpload do
|
61
|
-
CLIENT
|
61
|
+
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
62
62
|
|
63
63
|
after do
|
64
64
|
# Reset client to not-quite-pristine state
|
@@ -18,7 +18,7 @@ require 'google/api_client'
|
|
18
18
|
require 'google/api_client/version'
|
19
19
|
|
20
20
|
describe Google::APIClient::Result do
|
21
|
-
CLIENT
|
21
|
+
CLIENT = Google::APIClient.new(:application_name => 'API Client Tests') unless defined?(CLIENT)
|
22
22
|
|
23
23
|
describe 'with the plus API' do
|
24
24
|
before do
|
@@ -16,6 +16,39 @@ require 'spec_helper'
|
|
16
16
|
|
17
17
|
require 'google/api_client'
|
18
18
|
|
19
|
+
fixtures_path = File.expand_path('../../../fixtures', __FILE__)
|
20
|
+
|
21
|
+
describe Google::APIClient::KeyUtils do
|
22
|
+
it 'should read PKCS12 files from the filesystem' do
|
23
|
+
pending "Reading from PKCS12 not supported on jruby" if RUBY_PLATFORM == 'java'
|
24
|
+
path = File.expand_path('files/privatekey.p12', fixtures_path)
|
25
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12(path, 'notasecret')
|
26
|
+
key.should_not == nil
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should read PKCS12 files from loaded files' do
|
30
|
+
pending "Reading from PKCS12 not supported on jruby" if RUBY_PLATFORM == 'java'
|
31
|
+
path = File.expand_path('files/privatekey.p12', fixtures_path)
|
32
|
+
content = File.read(path)
|
33
|
+
key = Google::APIClient::KeyUtils.load_from_pkcs12(content, 'notasecret')
|
34
|
+
key.should_not == nil
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should read PEM files from the filesystem' do
|
38
|
+
path = File.expand_path('files/secret.pem', fixtures_path)
|
39
|
+
key = Google::APIClient::KeyUtils.load_from_pem(path, 'notasecret')
|
40
|
+
key.should_not == nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should read PEM files from loaded files' do
|
44
|
+
path = File.expand_path('files/secret.pem', fixtures_path)
|
45
|
+
content = File.read(path)
|
46
|
+
key = Google::APIClient::KeyUtils.load_from_pem(content, 'notasecret')
|
47
|
+
key.should_not == nil
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
19
52
|
describe Google::APIClient::JWTAsserter do
|
20
53
|
include ConnectionHelpers
|
21
54
|
|
@@ -25,7 +58,7 @@ describe Google::APIClient::JWTAsserter do
|
|
25
58
|
|
26
59
|
it 'should generate valid JWTs' do
|
27
60
|
asserter = Google::APIClient::JWTAsserter.new('client1', 'scope1 scope2', @key)
|
28
|
-
jwt = asserter.to_jwt
|
61
|
+
jwt = asserter.to_authorization.to_jwt
|
29
62
|
jwt.should_not == nil
|
30
63
|
|
31
64
|
claim = JWT.decode(jwt, @key.public_key, true)
|
@@ -59,7 +59,7 @@ end
|
|
59
59
|
describe Google::APIClient do
|
60
60
|
include ConnectionHelpers
|
61
61
|
|
62
|
-
let(:client) { Google::APIClient.new }
|
62
|
+
let(:client) { Google::APIClient.new(:application_name => 'API Client Tests') }
|
63
63
|
|
64
64
|
it 'should make its version number available' do
|
65
65
|
Google::APIClient::VERSION::STRING.should be_instance_of(String)
|
data/tasks/gem.rake
CHANGED
@@ -24,11 +24,11 @@ namespace :gem do
|
|
24
24
|
s.rdoc_options.concat ['--main', 'README.md']
|
25
25
|
|
26
26
|
# Dependencies used in the main library
|
27
|
-
s.add_runtime_dependency('signet', '>= 0.4.
|
27
|
+
s.add_runtime_dependency('signet', '>= 0.4.4')
|
28
28
|
s.add_runtime_dependency('addressable', '>= 2.3.2')
|
29
29
|
s.add_runtime_dependency('uuidtools', '>= 2.1.0')
|
30
30
|
s.add_runtime_dependency('autoparse', '>= 0.3.2')
|
31
|
-
s.add_runtime_dependency('faraday', '~> 0.8.
|
31
|
+
s.add_runtime_dependency('faraday', '~> 0.8.4')
|
32
32
|
s.add_runtime_dependency('multi_json', '>= 1.0.0')
|
33
33
|
s.add_runtime_dependency('extlib', '>= 0.9.15')
|
34
34
|
s.add_runtime_dependency('jwt', '>= 0.1.5')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-api-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,22 +10,22 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2013-01-05 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: signet
|
17
|
-
requirement: &
|
17
|
+
requirement: &70149072361020 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.4.
|
22
|
+
version: 0.4.4
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70149072361020
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: addressable
|
28
|
-
requirement: &
|
28
|
+
requirement: &70149072360300 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 2.3.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70149072360300
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: uuidtools
|
39
|
-
requirement: &
|
39
|
+
requirement: &70149072359760 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: 2.1.0
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70149072359760
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: autoparse
|
50
|
-
requirement: &
|
50
|
+
requirement: &70149072359200 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,21 +55,21 @@ dependencies:
|
|
55
55
|
version: 0.3.2
|
56
56
|
type: :runtime
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *70149072359200
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: faraday
|
61
|
-
requirement: &
|
61
|
+
requirement: &70149072358480 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ~>
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.8.
|
66
|
+
version: 0.8.4
|
67
67
|
type: :runtime
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *70149072358480
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: multi_json
|
72
|
-
requirement: &
|
72
|
+
requirement: &70149072357900 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: 1.0.0
|
78
78
|
type: :runtime
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *70149072357900
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: extlib
|
83
|
-
requirement: &
|
83
|
+
requirement: &70149072357260 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: 0.9.15
|
89
89
|
type: :runtime
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *70149072357260
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: jwt
|
94
|
-
requirement: &
|
94
|
+
requirement: &70149072356600 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,10 +99,10 @@ dependencies:
|
|
99
99
|
version: 0.1.5
|
100
100
|
type: :runtime
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *70149072356600
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: launchy
|
105
|
-
requirement: &
|
105
|
+
requirement: &70149072356100 !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|
108
108
|
- - ! '>='
|
@@ -110,10 +110,10 @@ dependencies:
|
|
110
110
|
version: 2.1.1
|
111
111
|
type: :runtime
|
112
112
|
prerelease: false
|
113
|
-
version_requirements: *
|
113
|
+
version_requirements: *70149072356100
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rake
|
116
|
-
requirement: &
|
116
|
+
requirement: &70149072355480 !ruby/object:Gem::Requirement
|
117
117
|
none: false
|
118
118
|
requirements:
|
119
119
|
- - ! '>='
|
@@ -121,10 +121,10 @@ dependencies:
|
|
121
121
|
version: 0.9.0
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
|
-
version_requirements: *
|
124
|
+
version_requirements: *70149072355480
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rspec
|
127
|
-
requirement: &
|
127
|
+
requirement: &70149072354900 !ruby/object:Gem::Requirement
|
128
128
|
none: false
|
129
129
|
requirements:
|
130
130
|
- - ! '>='
|
@@ -132,7 +132,7 @@ dependencies:
|
|
132
132
|
version: 2.11.0
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
|
-
version_requirements: *
|
135
|
+
version_requirements: *70149072354900
|
136
136
|
description: ! 'The Google API Ruby Client makes it trivial to discover and access
|
137
137
|
supported
|
138
138
|
|
@@ -147,27 +147,33 @@ extra_rdoc_files:
|
|
147
147
|
- README.md
|
148
148
|
files:
|
149
149
|
- lib/compat/multi_json.rb
|
150
|
+
- lib/google/api_client.rb
|
151
|
+
- lib/google/api_client/auth/installed_app.rb
|
150
152
|
- lib/google/api_client/auth/jwt_asserter.rb
|
153
|
+
- lib/google/api_client/auth/key_utils.rb
|
151
154
|
- lib/google/api_client/auth/pkcs12.rb
|
152
155
|
- lib/google/api_client/batch.rb
|
153
156
|
- lib/google/api_client/client_secrets.rb
|
157
|
+
- lib/google/api_client/discovery.rb
|
154
158
|
- lib/google/api_client/discovery/api.rb
|
155
159
|
- lib/google/api_client/discovery/media.rb
|
156
160
|
- lib/google/api_client/discovery/method.rb
|
157
161
|
- lib/google/api_client/discovery/resource.rb
|
158
162
|
- lib/google/api_client/discovery/schema.rb
|
159
|
-
- lib/google/api_client/discovery.rb
|
160
163
|
- lib/google/api_client/environment.rb
|
161
164
|
- lib/google/api_client/errors.rb
|
165
|
+
- lib/google/api_client/logging.rb
|
162
166
|
- lib/google/api_client/media.rb
|
167
|
+
- lib/google/api_client/railtie.rb
|
163
168
|
- lib/google/api_client/reference.rb
|
164
169
|
- lib/google/api_client/request.rb
|
165
170
|
- lib/google/api_client/result.rb
|
166
171
|
- lib/google/api_client/service_account.rb
|
167
172
|
- lib/google/api_client/version.rb
|
168
|
-
- lib/google/api_client.rb
|
169
173
|
- lib/google/inflection.rb
|
174
|
+
- spec/fixtures/files/privatekey.p12
|
170
175
|
- spec/fixtures/files/sample.txt
|
176
|
+
- spec/fixtures/files/secret.pem
|
171
177
|
- spec/google/api_client/batch_spec.rb
|
172
178
|
- spec/google/api_client/discovery_spec.rb
|
173
179
|
- spec/google/api_client/media_spec.rb
|
@@ -183,10 +189,9 @@ files:
|
|
183
189
|
- tasks/yard.rake
|
184
190
|
- CHANGELOG.md
|
185
191
|
- Gemfile
|
186
|
-
- Gemfile.lock
|
187
192
|
- LICENSE
|
188
|
-
- Rakefile
|
189
193
|
- README.md
|
194
|
+
- Rakefile
|
190
195
|
- bin/google-api
|
191
196
|
homepage: http://code.google.com/p/google-api-ruby-client/
|
192
197
|
licenses: []
|