google-api-client 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG.md ADDED
@@ -0,0 +1,43 @@
1
+ # 0.4.0
2
+
3
+ * Replaced httpadapter gem dependency with faraday
4
+ * Replaced json gem dependency with multi_json
5
+ * Fixed /dev/null issues on Windows
6
+ * Repeated parameters now work
7
+
8
+ # 0.3.0
9
+
10
+ * Updated to use v1 of the discovery API
11
+ * Updated to use httpadapter 1.0.0
12
+ * Added OAuth 2 support to the command line tool
13
+ * Renamed some switches in the command line tool
14
+ * Added additional configuration capabilities
15
+ * Fixed a few deprecation warnings from dependencies
16
+ * Added gemspec to source control
17
+
18
+ # 0.2.0
19
+
20
+ * Updated to use v1 of the discovery API
21
+ * Updated to use httpadapter 1.0.0
22
+ * Added OAuth 2 support to the command line tool
23
+ * Renamed some switches in the command line tool
24
+ * Added additional configuration capabilities
25
+
26
+ # 0.1.3
27
+
28
+ * Added support for manual overrides of the discovery URI
29
+ * Added support for manual overrides of the API base
30
+ * Added support for xoauth_requestor_id
31
+
32
+ # 0.1.2
33
+
34
+ * Added support for two-legged OAuth
35
+ * Moved some development dependencies into runtime
36
+
37
+ # 0.1.1
38
+
39
+ * Substantial improvements to the command line interface
40
+
41
+ # 0.1.0
42
+
43
+ * Initial release
data/README.md CHANGED
@@ -46,14 +46,13 @@ APIs.
46
46
  client.authorization.fetch_token_credential!(:verifier => '12345')
47
47
 
48
48
  # Discover available methods
49
- method_names = client.discovered_api('buzz').to_h.keys
49
+ method_names = client.discovered_api('plus').to_h.keys
50
50
 
51
51
  # Make an API call
52
- response = client.execute(
53
- 'chili.activities.list',
54
- {'scope' => '@self', 'userId' => '@me', 'alt' => 'json'}
52
+ result = client.execute(
53
+ 'plus.activities.list',
54
+ {'collection' => 'public', 'userId' => 'me'}
55
55
  )
56
- status, headers, body = response
57
56
 
58
57
  # Install
59
58
 
data/bin/google-api CHANGED
@@ -10,7 +10,11 @@ OAUTH_SERVER_PORT = 12736
10
10
 
11
11
  require 'rubygems'
12
12
  require 'optparse'
13
- require 'httpadapter'
13
+
14
+ gem 'faraday', '~> 0.7.0'
15
+ require 'faraday'
16
+ require 'faraday/utils'
17
+
14
18
  require 'webrick'
15
19
  require 'google/api_client/version'
16
20
  require 'google/api_client'
@@ -183,6 +187,7 @@ HTML
183
187
  end
184
188
 
185
189
  def client
190
+ gem 'signet', '~> 0.3.0'
186
191
  require 'signet/oauth_1/client'
187
192
  require 'yaml'
188
193
  require 'irb'
@@ -276,6 +281,7 @@ HTML
276
281
  ]
277
282
 
278
283
  def oauth_1_login
284
+ gem 'signet', '~> 0.3.0'
279
285
  require 'signet/oauth_1/client'
280
286
  require 'launchy'
281
287
  require 'yaml'
@@ -343,6 +349,7 @@ HTML
343
349
  end
344
350
 
345
351
  def oauth_2_login
352
+ gem 'signet', '~> 0.3.0'
346
353
  require 'signet/oauth_2/client'
347
354
  require 'launchy'
348
355
  require 'yaml'
@@ -365,8 +372,8 @@ HTML
365
372
  exit(0)
366
373
  else
367
374
  $verifier = nil
368
- # TODO(bobaman): Cross-platform?
369
- logger = WEBrick::Log.new('/dev/null')
375
+ logger = WEBrick::Log.new
376
+ logger.level = 0
370
377
  server = WEBrick::HTTPServer.new(
371
378
  :Port => OAUTH_SERVER_PORT,
372
379
  :Logger => logger,
@@ -467,8 +474,7 @@ HTML
467
474
  request = [method, uri.to_str, headers, [request_body]]
468
475
  request = client.generate_authenticated_request(:request => request)
469
476
  response = client.transmit(request)
470
- status, headers, body = response
471
- puts body
477
+ puts response.body
472
478
  exit(0)
473
479
  else
474
480
  # Make request with URI generated from template and parameters
@@ -502,8 +508,7 @@ HTML
502
508
  :merged_body => request_body,
503
509
  :headers => headers
504
510
  )
505
- status, headers, body = result.response
506
- puts body
511
+ puts result.response.body
507
512
  exit(0)
508
513
  rescue ArgumentError => e
509
514
  puts e.message
@@ -13,8 +13,10 @@
13
13
  # limitations under the License.
14
14
 
15
15
 
16
- require 'httpadapter'
17
- require 'json'
16
+ gem 'faraday', '~> 0.7.0'
17
+ require 'faraday'
18
+ require 'faraday/utils'
19
+ require 'multi_json'
18
20
  require 'stringio'
19
21
 
20
22
  require 'google/api_client/version'
@@ -24,6 +26,7 @@ require 'google/api_client/discovery'
24
26
  require 'google/api_client/reference'
25
27
  require 'google/api_client/result'
26
28
 
29
+
27
30
  module Google
28
31
  # TODO(bobaman): Document all this stuff.
29
32
 
@@ -47,8 +50,9 @@ module Google
47
50
  # @option options [String] :host ("www.googleapis.com")
48
51
  # The API hostname used by the client. This rarely needs to be changed.
49
52
  # @option options [String] :application_name
50
- # The name and version of the application using the client. This should
51
- # be given in the form `"{name}/{version}"`.
53
+ # The name of the application using the client.
54
+ # @option options [String] :application_version
55
+ # The version number of the application using the client.
52
56
  # @option options [String] :user_agent
53
57
  # ("{app_name} google-api-ruby-client/{version} {os_name}/{os_version}")
54
58
  # The user agent used by the client. Most developers will want to
@@ -63,26 +67,22 @@ module Google
63
67
  self.host = options["host"] || 'www.googleapis.com'
64
68
  # Most developers will want to leave this value alone and use the
65
69
  # application_name option.
70
+ application_string = (
71
+ options["application_name"] ? (
72
+ "#{options["application_name"]}/" +
73
+ "#{options["application_version"] || '0.0.0'}"
74
+ ) : ""
75
+ )
66
76
  self.user_agent = options["user_agent"] || (
67
- (options["application_name"] || '')
68
- 'google-api-ruby-client/' + VERSION::STRING +
69
- ' ' + ENV::OS_VERSION
77
+ "#{application_string} " +
78
+ "google-api-ruby-client/#{VERSION::STRING} " +
79
+ ENV::OS_VERSION
70
80
  ).strip
71
81
  # The writer method understands a few Symbols and will generate useful
72
82
  # default authentication mechanisms.
73
83
  self.authorization = options["authorization"] || :oauth_2
74
84
  self.key = options["key"]
75
85
  self.user_ip = options["user_ip"]
76
- # The HTTP adapter controls all of the HTTP traffic the client generates.
77
- # By default, Net::HTTP is used, but adding support for other clients
78
- # is trivial.
79
- if options["http_adapter"]
80
- self.http_adapter = options["http_adapter"]
81
- else
82
- require 'httpadapter/adapters/net_http'
83
- # NOTE: Do not rely on this default value, as it may change
84
- self.http_adapter = HTTPAdapter::NetHTTPAdapter.new
85
- end
86
86
  @discovery_uris = {}
87
87
  @discovery_documents = {}
88
88
  @discovered_apis = {}
@@ -103,6 +103,7 @@ module Google
103
103
  def authorization=(new_authorization)
104
104
  case new_authorization
105
105
  when :oauth_1, :oauth
106
+ gem 'signet', '~> 0.3.0'
106
107
  require 'signet/oauth_1/client'
107
108
  # NOTE: Do not rely on this default value, as it may change
108
109
  new_authorization = Signet::OAuth1::Client.new(
@@ -116,6 +117,7 @@ module Google
116
117
  :client_credential_secret => 'anonymous'
117
118
  )
118
119
  when :two_legged_oauth_1, :two_legged_oauth
120
+ gem 'signet', '~> 0.3.0'
119
121
  require 'signet/oauth_1/client'
120
122
  # NOTE: Do not rely on this default value, as it may change
121
123
  new_authorization = Signet::OAuth1::Client.new(
@@ -124,6 +126,7 @@ module Google
124
126
  :two_legged => true
125
127
  )
126
128
  when :oauth_2
129
+ gem 'signet', '~> 0.3.0'
127
130
  require 'signet/oauth_2/client'
128
131
  # NOTE: Do not rely on this default value, as it may change
129
132
  new_authorization = Signet::OAuth2::Client.new(
@@ -148,7 +151,7 @@ module Google
148
151
  ##
149
152
  # The application's API key issued by the API console.
150
153
  #
151
- # @return [String] The API key..
154
+ # @return [String] The API key.
152
155
  attr_accessor :key
153
156
 
154
157
  ##
@@ -157,28 +160,6 @@ module Google
157
160
  # @return [String] The user's IP address.
158
161
  attr_accessor :user_ip
159
162
 
160
- ##
161
- # Returns the HTTP adapter used by the client.
162
- #
163
- # @return [HTTPAdapter]
164
- # The HTTP adapter object. The object must include the
165
- # HTTPAdapter module and conform to its interface.
166
- attr_reader :http_adapter
167
-
168
- ##
169
- # Returns the HTTP adapter used by the client.
170
- #
171
- # @return [HTTPAdapter]
172
- # The HTTP adapter object. The object must include the
173
- # HTTPAdapter module and conform to its interface.
174
- def http_adapter=(new_http_adapter)
175
- if new_http_adapter.kind_of?(HTTPAdapter)
176
- @http_adapter = new_http_adapter
177
- else
178
- raise TypeError, "Expected HTTPAdapter, got #{new_http_adapter.class}."
179
- end
180
- end
181
-
182
163
  ##
183
164
  # The API hostname used by the client.
184
165
  #
@@ -208,8 +189,8 @@ module Google
208
189
  # Manually registers a URI as a discovery document for a specific version
209
190
  # of an API.
210
191
  #
211
- # @param [String, Symbol] api The service name.
212
- # @param [String] version The desired version of the service.
192
+ # @param [String, Symbol] api The API name.
193
+ # @param [String] version The desired version of the API.
213
194
  # @param [Addressable::URI] uri The URI of the discovery document.
214
195
  def register_discovery_uri(api, version, uri)
215
196
  api = api.to_s
@@ -220,8 +201,8 @@ module Google
220
201
  ##
221
202
  # Returns the URI for the discovery document.
222
203
  #
223
- # @param [String, Symbol] api The service name.
224
- # @param [String] version The desired version of the service.
204
+ # @param [String, Symbol] api The API name.
205
+ # @param [String] version The desired version of the API.
225
206
  # @return [Addressable::URI] The URI of the discovery document.
226
207
  def discovery_uri(api, version=nil)
227
208
  api = api.to_s
@@ -243,8 +224,8 @@ module Google
243
224
  # Manually registers a pre-loaded discovery document for a specific version
244
225
  # of an API.
245
226
  #
246
- # @param [String, Symbol] api The service name.
247
- # @param [String] version The desired version of the service.
227
+ # @param [String, Symbol] api The API name.
228
+ # @param [String] version The desired version of the API.
248
229
  # @param [String, StringIO] discovery_document
249
230
  # The contents of the discovery document.
250
231
  def register_discovery_document(api, version, discovery_document)
@@ -260,7 +241,7 @@ module Google
260
241
  "Expected String or StringIO, got #{discovery_document.class}."
261
242
  end
262
243
  @discovery_documents["#{api}:#{version}"] =
263
- ::JSON.parse(discovery_document)
244
+ MultiJson.decode(discovery_document)
264
245
  end
265
246
 
266
247
  ##
@@ -270,31 +251,25 @@ module Google
270
251
  def directory_document
271
252
  return @directory_document ||= (begin
272
253
  request = self.generate_request(
273
- :http_method => 'GET',
254
+ :http_method => :get,
274
255
  :uri => self.directory_uri,
275
256
  :authenticated => false
276
257
  )
277
- response = self.transmit(request)
278
- status, headers, body = response
279
- if status >= 200 && status < 300
280
- # TODO(bobaman) Better status code handling?
281
- merged_body = body.inject(StringIO.new) do |accu, chunk|
282
- accu.write(chunk)
283
- accu
258
+ response = self.transmit(:request => request)
259
+ if response.status >= 200 && response.status < 300
260
+ MultiJson.decode(response.body)
261
+ elsif response.status >= 400
262
+ case response.status
263
+ when 400...500
264
+ exception_type = ClientError
265
+ when 500...600
266
+ exception_type = ServerError
267
+ else
268
+ exception_type = TransmissionError
284
269
  end
285
- ::JSON.parse(merged_body.string)
286
- elsif status >= 400 && status < 500
287
- _, request_uri, _, _ = request
288
- raise ClientError,
289
- "Could not retrieve discovery document at: #{request_uri}"
290
- elsif status >= 500 && status < 600
291
- _, request_uri, _, _ = request
292
- raise ServerError,
293
- "Could not retrieve discovery document at: #{request_uri}"
294
- elsif status > 600
295
- _, request_uri, _, _ = request
296
- raise TransmissionError,
297
- "Could not retrieve discovery document at: #{request_uri}"
270
+ url = request.to_env(Faraday.default_connection)[:url]
271
+ raise exception_type,
272
+ "Could not retrieve directory document at: #{url}"
298
273
  end
299
274
  end)
300
275
  end
@@ -302,39 +277,33 @@ module Google
302
277
  ##
303
278
  # Returns the parsed discovery document.
304
279
  #
305
- # @param [String, Symbol] api The service name.
306
- # @param [String] version The desired version of the service.
280
+ # @param [String, Symbol] api The API name.
281
+ # @param [String] version The desired version of the API.
307
282
  # @return [Hash] The parsed JSON from the discovery document.
308
283
  def discovery_document(api, version=nil)
309
284
  api = api.to_s
310
285
  version = version || 'v1'
311
286
  return @discovery_documents["#{api}:#{version}"] ||= (begin
312
287
  request = self.generate_request(
313
- :http_method => 'GET',
288
+ :http_method => :get,
314
289
  :uri => self.discovery_uri(api, version),
315
290
  :authenticated => false
316
291
  )
317
- response = self.transmit(request)
318
- status, headers, body = response
319
- if status >= 200 && status < 300
320
- # TODO(bobaman) Better status code handling?
321
- merged_body = body.inject(StringIO.new) do |accu, chunk|
322
- accu.write(chunk)
323
- accu
292
+ response = self.transmit(:request => request)
293
+ if response.status >= 200 && response.status < 300
294
+ MultiJson.decode(response.body)
295
+ elsif response.status >= 400
296
+ case response.status
297
+ when 400...500
298
+ exception_type = ClientError
299
+ when 500...600
300
+ exception_type = ServerError
301
+ else
302
+ exception_type = TransmissionError
324
303
  end
325
- ::JSON.parse(merged_body.string)
326
- elsif status >= 400 && status < 500
327
- _, request_uri, _, _ = request
328
- raise ClientError,
329
- "Could not retrieve discovery document at: #{request_uri}"
330
- elsif status >= 500 && status < 600
331
- _, request_uri, _, _ = request
332
- raise ServerError,
333
- "Could not retrieve discovery document at: #{request_uri}"
334
- elsif status > 600
335
- _, request_uri, _, _ = request
336
- raise TransmissionError,
337
- "Could not retrieve discovery document at: #{request_uri}"
304
+ url = request.to_env(Faraday.default_connection)[:url]
305
+ raise exception_type,
306
+ "Could not retrieve discovery document at: #{url}"
338
307
  end
339
308
  end)
340
309
  end
@@ -362,8 +331,8 @@ module Google
362
331
  ##
363
332
  # Returns the service object for a given service name and service version.
364
333
  #
365
- # @param [String, Symbol] api The service name.
366
- # @param [String] version The desired version of the service.
334
+ # @param [String, Symbol] api The API name.
335
+ # @param [String] version The desired version of the API.
367
336
  #
368
337
  # @return [Google::APIClient::API] The service object.
369
338
  def discovered_api(api, version=nil)
@@ -391,7 +360,8 @@ module Google
391
360
  # Returns the method object for a given RPC name and service version.
392
361
  #
393
362
  # @param [String, Symbol] rpc_name The RPC name of the desired method.
394
- # @param [String] version The desired version of the service.
363
+ # @param [String, Symbol] rpc_name The API the method is within.
364
+ # @param [String] version The desired version of the API.
395
365
  #
396
366
  # @return [Google::APIClient::Method] The method object.
397
367
  def discovered_method(rpc_name, api, version=nil)
@@ -426,7 +396,6 @@ module Google
426
396
  "Expected String or Symbol, got #{api.class}."
427
397
  end
428
398
  api = api.to_s
429
- # TODO(bobaman): Update to use directory API.
430
399
  return self.discovered_apis.detect do |a|
431
400
  a.name == api && a.preferred == true
432
401
  end
@@ -435,35 +404,29 @@ module Google
435
404
  ##
436
405
  # Generates a request.
437
406
  #
438
- # @param [Google::APIClient::Method, String] api_method
407
+ # @option options [Google::APIClient::Method, String] :api_method
439
408
  # The method object or the RPC name of the method being executed.
440
- # @param [Hash, Array] parameters
409
+ # @option options [Hash, Array] :parameters
441
410
  # The parameters to send to the method.
442
- # @param [String] body The body of the request.
443
- # @param [Hash, Array] headers The HTTP headers for the request.
444
- # @param [Hash] options
445
- # The configuration parameters for the request.
446
- # - <code>:version</code>
447
- # The service version. Only used if <code>api_method</code> is a
448
- # <code>String</code>. Defaults to <code>'v1'</code>.
449
- # - <code>:authorization</code>
450
- # The authorization mechanism for the response. Used only if
451
- # <code>:authenticated</code> is <code>true</code>.
452
- # - <code>:authenticated</code> —
453
- # <code>true</code> if the request must be signed or otherwise
454
- # authenticated, <code>false</code>
455
- # otherwise. Defaults to <code>true</code> if an authorization
456
- # mechanism has been set, <code>false</code> otherwise.
457
- #
458
- # @return [Array] The generated request.
411
+ # @option options [Hash, Array] :headers The HTTP headers for the request.
412
+ # @option options [String] :body The body of the request.
413
+ # @option options [String] :version ("v1")
414
+ # The service version. Only used if `api_method` is a `String`.
415
+ # @option options [#generate_authenticated_request] :authorization
416
+ # The authorization mechanism for the response. Used only if
417
+ # `:authenticated` is `true`.
418
+ # @option options [TrueClass, FalseClass] :authenticated (true)
419
+ # `true` if the request must be signed or somehow
420
+ # authenticated, `false` otherwise.
421
+ #
422
+ # @return [Faraday::Request] The generated request.
459
423
  #
460
424
  # @example
461
425
  # request = client.generate_request(
462
- # :api_method => 'chili.activities.list',
426
+ # :api_method => 'plus.activities.list',
463
427
  # :parameters =>
464
- # {'scope' => '@self', 'userId' => '@me', 'alt' => 'json'}
428
+ # {'collection' => 'public', 'userId' => 'me'}
465
429
  # )
466
- # method, uri, headers, body = request
467
430
  def generate_request(options={})
468
431
  # Note: The merge method on a Hash object will coerce an API Reference
469
432
  # object into a Hash and merge with the default options.
@@ -471,7 +434,8 @@ module Google
471
434
  :version => 'v1',
472
435
  :authorization => self.authorization,
473
436
  :key => self.key,
474
- :user_ip => self.user_ip
437
+ :user_ip => self.user_ip,
438
+ :connection => Faraday.default_connection
475
439
  }.merge(options)
476
440
  # The Reference object is going to need this to do method ID lookups.
477
441
  options[:client] = self
@@ -485,7 +449,10 @@ module Google
485
449
  reference = Google::APIClient::Reference.new(options)
486
450
  request = reference.to_request
487
451
  if options[:authenticated]
488
- request = self.generate_authenticated_request(:request => request)
452
+ request = self.generate_authenticated_request(
453
+ :request => request,
454
+ :connection => options[:connection]
455
+ )
489
456
  end
490
457
  return request
491
458
  end
@@ -493,9 +460,9 @@ module Google
493
460
  ##
494
461
  # Signs a request using the current authorization mechanism.
495
462
  #
496
- # @param [Hash] options The options to pass through.
463
+ # @param [Hash] options a customizable set of options
497
464
  #
498
- # @return [Array] The signed or otherwise authenticated request.
465
+ # @return [Faraday::Request] The signed or otherwise authenticated request.
499
466
  def generate_authenticated_request(options={})
500
467
  return authorization.generate_authenticated_request(options)
501
468
  end
@@ -503,14 +470,59 @@ module Google
503
470
  ##
504
471
  # Transmits the request using the current HTTP adapter.
505
472
  #
506
- # @param [Array] request The request to transmit.
507
- # @param [#transmit] adapter The HTTP adapter.
508
- #
509
- # @return [Array] The response from the server.
510
- def transmit(request, adapter=self.http_adapter)
473
+ # @option options [Array, Faraday::Request] :request
474
+ # The HTTP request to transmit.
475
+ # @option options [String, Symbol] :method
476
+ # The method for the HTTP request.
477
+ # @option options [String, Addressable::URI] :uri
478
+ # The URI for the HTTP request.
479
+ # @option options [Array, Hash] :headers
480
+ # The headers for the HTTP request.
481
+ # @option options [String] :body
482
+ # The body for the HTTP request.
483
+ # @option options [Faraday::Connection] :connection
484
+ # The HTTP connection to use.
485
+ #
486
+ # @return [Faraday::Response] The response from the server.
487
+ def transmit(options={})
488
+ options[:connection] ||= Faraday.default_connection
489
+ if options[:request]
490
+ if options[:request].kind_of?(Array)
491
+ method, uri, headers, body = options[:request]
492
+ elsif options[:request].kind_of?(Faraday::Request)
493
+ unless options[:connection]
494
+ raise ArgumentError,
495
+ "Faraday::Request used, requires a connection to be provided."
496
+ end
497
+ method = options[:request].method.to_s.downcase.to_sym
498
+ uri = options[:connection].build_url(
499
+ options[:request].path, options[:request].params
500
+ )
501
+ headers = options[:request].headers || {}
502
+ body = options[:request].body || ''
503
+ end
504
+ else
505
+ method = options[:method] || :get
506
+ uri = options[:uri]
507
+ headers = options[:headers] || []
508
+ body = options[:body] || ''
509
+ end
510
+ headers = headers.to_a if headers.kind_of?(Hash)
511
+ request_components = {
512
+ :method => method,
513
+ :uri => uri,
514
+ :headers => headers,
515
+ :body => body
516
+ }
517
+ # Verify that we have all pieces required to transmit an HTTP request
518
+ request_components.each do |(key, value)|
519
+ unless value
520
+ raise ArgumentError, "Missing :#{key} parameter."
521
+ end
522
+ end
523
+
511
524
  if self.user_agent != nil
512
525
  # If there's no User-Agent header, set one.
513
- method, uri, headers, body = request
514
526
  unless headers.kind_of?(Enumerable)
515
527
  # We need to use some Enumerable methods, relying on the presence of
516
528
  # the #each method.
@@ -527,7 +539,15 @@ module Google
527
539
  "Expected User-Agent to be String, got #{self.user_agent.class}"
528
540
  end
529
541
  end
530
- adapter.transmit([method, uri, headers, body])
542
+
543
+ request = Faraday::Request.create(method.to_s.downcase.to_sym) do |req|
544
+ req.url(Addressable::URI.parse(uri))
545
+ req.headers = Faraday::Utils::Headers.new(headers)
546
+ req.body = body
547
+ end
548
+ request_env = request.to_env(options[:connection])
549
+ response = options[:connection].app.call(request_env)
550
+ return response
531
551
  end
532
552
 
533
553
  ##
@@ -539,29 +559,24 @@ module Google
539
559
  # The parameters to send to the method.
540
560
  # @param [String] body The body of the request.
541
561
  # @param [Hash, Array] headers The HTTP headers for the request.
542
- # @param [Hash] options
543
- # The configuration parameters for the request.
544
- # - <code>:version</code>
545
- # The service version. Only used if <code>api_method</code> is a
546
- # <code>String</code>. Defaults to <code>'v1'</code>.
547
- # - <code>:adapter</code>
548
- # The HTTP adapter.
549
- # - <code>:authorization</code>
550
- # The authorization mechanism for the response. Used only if
551
- # <code>:authenticated</code> is <code>true</code>.
552
- # - <code>:authenticated</code> —
553
- # <code>true</code> if the request must be signed or otherwise
554
- # authenticated, <code>false</code>
555
- # otherwise. Defaults to <code>true</code>.
556
- #
557
- # @return [Array] The response from the API.
562
+ # @option options [String] :version ("v1")
563
+ # The service version. Only used if `api_method` is a `String`.
564
+ # @option options [#generate_authenticated_request] :authorization
565
+ # The authorization mechanism for the response. Used only if
566
+ # `:authenticated` is `true`.
567
+ # @option options [TrueClass, FalseClass] :authenticated (true)
568
+ # `true` if the request must be signed or somehow
569
+ # authenticated, `false` otherwise.
570
+ #
571
+ # @return [Google::APIClient::Result] The result from the API.
558
572
  #
559
573
  # @example
560
- # request = client.generate_request(
561
- # :api_method => 'chili.activities.list',
562
- # :parameters =>
563
- # {'scope' => '@self', 'userId' => '@me', 'alt' => 'json'}
574
+ # result = client.execute(
575
+ # :api_method => 'plus.activities.list',
576
+ # :parameters => {'collection' => 'public', 'userId' => 'me'}
564
577
  # )
578
+ #
579
+ # @see Google::APIClient#generate_request
565
580
  def execute(*params)
566
581
  # This block of code allows us to accept multiple parameter passing
567
582
  # styles, and maintaining some backwards compatibility.
@@ -574,15 +589,15 @@ module Google
574
589
  end
575
590
  options[:api_method] = params.shift if params.size > 0
576
591
  options[:parameters] = params.shift if params.size > 0
577
- options[:merged_body] = params.shift if params.size > 0
592
+ options[:body] = params.shift if params.size > 0
578
593
  options[:headers] = params.shift if params.size > 0
579
594
  options[:client] = self
580
595
 
581
596
  reference = Google::APIClient::Reference.new(options)
582
597
  request = self.generate_request(reference)
583
598
  response = self.transmit(
584
- request,
585
- options[:adapter] || self.http_adapter
599
+ :request => request,
600
+ :connection => options[:connection]
586
601
  )
587
602
  return Google::APIClient::Result.new(reference, request, response)
588
603
  end
@@ -594,7 +609,6 @@ module Google
594
609
  # @see Google::APIClient#execute
595
610
  def execute!(*params)
596
611
  result = self.execute(*params)
597
- status, _, _ = result.response
598
612
  if result.data.respond_to?(:error) &&
599
613
  result.data.error.respond_to?(:message)
600
614
  # You're going to get a terrible error message if the response isn't
@@ -603,15 +617,19 @@ module Google
603
617
  elsif result.data['error'] && result.data['error']['message']
604
618
  error_message = result.data['error']['message']
605
619
  end
606
- if status >= 400 && status < 500
607
- raise ClientError,
608
- error_message || "A client error has occurred."
609
- elsif status >= 500 && status < 600
610
- raise ServerError,
611
- error_message || "A server error has occurred."
612
- elsif status > 600
613
- raise TransmissionError,
614
- error_message || "A transmission error has occurred."
620
+ if result.response.status >= 400
621
+ case result.response.status
622
+ when 400...500
623
+ exception_type = ClientError
624
+ error_message ||= "A client error has occurred."
625
+ when 500...600
626
+ exception_type = ServerError
627
+ error_message ||= "A server error has occurred."
628
+ else
629
+ exception_type = TransmissionError
630
+ error_message ||= "A transmission error has occurred."
631
+ end
632
+ raise exception_type, error_message
615
633
  end
616
634
  return result
617
635
  end