google-api-client 0.6.4 → 0.7.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile +13 -3
  4. data/README.md +133 -97
  5. data/Rakefile +1 -1
  6. data/lib/cacerts.pem +2183 -0
  7. data/lib/google/api_client/auth/compute_service_account.rb +28 -0
  8. data/lib/google/api_client/auth/file_storage.rb +87 -0
  9. data/lib/google/api_client/auth/installed_app.rb +8 -1
  10. data/lib/google/api_client/auth/jwt_asserter.rb +0 -11
  11. data/lib/google/api_client/client_secrets.rb +1 -1
  12. data/lib/google/api_client/discovery/method.rb +1 -0
  13. data/lib/google/api_client/errors.rb +11 -0
  14. data/lib/google/api_client/gzip.rb +28 -0
  15. data/lib/google/api_client/media.rb +80 -5
  16. data/lib/google/api_client/request.rb +15 -9
  17. data/lib/google/api_client/service/batch.rb +103 -0
  18. data/lib/google/api_client/service/request.rb +144 -0
  19. data/lib/google/api_client/service/resource.rb +40 -0
  20. data/lib/google/api_client/service/result.rb +162 -0
  21. data/lib/google/api_client/service/simple_file_store.rb +151 -0
  22. data/lib/google/api_client/service/stub_generator.rb +59 -0
  23. data/lib/google/api_client/service.rb +233 -0
  24. data/lib/google/api_client/service_account.rb +1 -0
  25. data/lib/google/api_client/version.rb +4 -3
  26. data/lib/google/api_client.rb +81 -42
  27. data/spec/google/api_client/batch_spec.rb +4 -4
  28. data/spec/google/api_client/discovery_spec.rb +60 -102
  29. data/spec/google/api_client/gzip_spec.rb +86 -0
  30. data/spec/google/api_client/media_spec.rb +49 -1
  31. data/spec/google/api_client/request_spec.rb +30 -0
  32. data/spec/google/api_client/result_spec.rb +3 -4
  33. data/spec/google/api_client/service_account_spec.rb +21 -0
  34. data/spec/google/api_client/service_spec.rb +586 -0
  35. data/spec/google/api_client/simple_file_store_spec.rb +137 -0
  36. data/spec/google/api_client_spec.rb +101 -3
  37. data/spec/spec_helper.rb +3 -0
  38. data/tasks/gem.rake +3 -4
  39. metadata +95 -50
  40. data/bin/google-api +0 -391
  41. /data/{CONTRIB.md → CONTRIBUTING.md} +0 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 25f7fed5190421b20ce39568ea716d2a5a52627e
4
+ data.tar.gz: f511d420725a7e69600d7654090d7794743c8591
5
+ SHA512:
6
+ metadata.gz: 4a889315a2b6d96b6d56ac808880203c7dbe6c108a214c610440182e784162a93c753367d49d9cc16b22a50a8d2668e507590d45f6665c3227fe31faed8adf88
7
+ data.tar.gz: 49493d0cb5c148bd88962b1eaca02acba2f21bfc04ef115a6e75958f2677a386a6945698f3ea2054b2f3e635be08fc441441aef149f60aa880503809b7618d90
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # 0.7.0
2
+ * Remove CLI
3
+ * SUpport for automatic retires & backoff. Off by default, enable by setting `retries` on `APIClient`
4
+ * Experimental new interface (see `Google::APIClient::Service`)
5
+ * Fix warnings when using Faraday separately
6
+ * Support Google Compute Engine service accounts
7
+ * Enable gzip compression for responses
8
+ * Upgrade to Faraday 0.9.0. Resolves multiple issues with query parameter encodings.
9
+ * Use bundled root certificates for verifying SSL certificates
10
+ * Rewind media when retrying uploads
11
+
12
+ # 0.6.4
13
+ * Pin signet version to 0.4.x
14
+
1
15
  # 0.6.3
2
16
 
3
17
  * Update autoparse to 0.3.3 to fix cases where results aren't correctly parsed.
data/Gemfile CHANGED
@@ -1,15 +1,16 @@
1
- source :rubygems
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'signet', '~> 0.4.5'
5
+ gem 'signet', '>= 0.5.0'
6
6
  gem 'addressable', '>= 2.3.2'
7
7
  gem 'uuidtools', '>= 2.1.0'
8
8
  gem 'autoparse', '>= 0.3.3'
9
- gem 'faraday', '~> 0.8.4'
9
+ gem 'faraday', '>= 0.9.0'
10
10
  gem 'multi_json', '>= 1.0.0'
11
11
  gem 'extlib', '>= 0.9.15'
12
12
  gem 'jwt', '~> 0.1.5'
13
+ gem 'retriable', '>= 1.4'
13
14
  gem 'jruby-openssl', :platforms => :jruby
14
15
 
15
16
  group :development do
@@ -18,14 +19,23 @@ group :development do
18
19
  gem 'kramdown'
19
20
  end
20
21
 
22
+
23
+ platforms :rbx do
24
+ gem 'rubysl', '~> 2.0'
25
+ gem 'psych'
26
+ end
27
+
28
+
21
29
  group :examples do
22
30
  gem 'sinatra'
23
31
  end
24
32
 
25
33
  group :test, :development do
34
+ gem 'json', '~> 1.7.7'
26
35
  gem 'rake', '>= 0.9.0'
27
36
  gem 'rspec', '>= 2.11.0'
28
37
  gem 'rcov', '>= 0.9.9', :platform => :mri_18
29
38
  end
30
39
 
40
+
31
41
  gem 'idn', :platform => :mri_18
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Google API Client
2
2
 
3
3
  <dl>
4
- <dt>Homepage</dt><dd><a href="http://code.google.com/p/google-api-ruby-client">http://code.google.com/p/google-api-ruby-client</a></dd>
4
+ <dt>Homepage</dt><dd><a href="http://www.github.com/google/google-api-ruby-client">http://www.github.com/google/google-api-ruby-client</a></dd>
5
5
  <dt>Authors</dt><dd>Bob Aman, <a href="mailto:sbazyl@google.com">Steven Bazyl</a></dd>
6
6
  <dt>Copyright</dt><dd>Copyright © 2011 Google, Inc.</dd>
7
7
  <dt>License</dt><dd>Apache 2.0</dd>
@@ -17,40 +17,52 @@ APIs.
17
17
 
18
18
  ## Install
19
19
 
20
- Be sure `http://rubygems.org/` is in your gem sources.
20
+ Be sure `https://rubygems.org/` is in your gem sources.
21
21
 
22
22
  For normal client usage, this is sufficient:
23
23
 
24
- $ sudo gem install google-api-client
24
+ ```bash
25
+ $ gem install google-api-client
26
+ ```
25
27
 
26
28
  ## Example Usage
27
29
 
28
- # Initialize the client & Google+ API
29
- require 'google/api_client'
30
- client = Google::APIClient.new
31
- plus = client.discovered_api('plus')
32
-
33
- # Initialize OAuth 2.0 client
34
- client.authorization.client_id = '<CLIENT_ID_FROM_API_CONSOLE>'
35
- client.authorization.client_secret = '<CLIENT_SECRET>'
36
- client.authorization.redirect_uri = '<YOUR_REDIRECT_URI>'
37
-
38
- client.authorization.scope = 'https://www.googleapis.com/auth/plus.me'
39
-
40
- # Request authorization
41
- redirect_uri = client.authorization.authorization_uri
42
-
43
- # Wait for authorization code then exchange for token
44
- client.authorization.code = '....'
45
- client.authorization.fetch_access_token!
46
-
47
- # Make an API call
48
- result = client.execute(
49
- :api_method => plus.activities.list,
50
- :parameters => {'collection' => 'public', 'userId' => 'me'}
51
- )
52
-
53
- puts result.data
30
+ ```ruby
31
+ require 'google/api_client'
32
+ require 'google/api_client/client_secrets'
33
+ require 'google/api_client/auth/installed_app'
34
+
35
+ # Initialize the client.
36
+ client = Google::APIClient.new(
37
+ :application_name => 'Example Ruby application',
38
+ :application_version => '1.0.0'
39
+ )
40
+
41
+ # Initialize Google+ API. Note this will make a request to the
42
+ # discovery service every time, so be sure to use serialization
43
+ # in your production code. Check the samples for more details.
44
+ plus = client.discovered_api('plus')
45
+
46
+ # Load client secrets from your client_secrets.json.
47
+ client_secrets = Google::APIClient::ClientSecrets.load
48
+
49
+ # Run installed application flow. Check the samples for a more
50
+ # complete example that saves the credentials between runs.
51
+ flow = Google::APIClient::InstalledAppFlow.new(
52
+ :client_id => client_secrets.client_id,
53
+ :client_secret => client_secrets.client_secret,
54
+ :scope => ['https://www.googleapis.com/auth/plus.me']
55
+ )
56
+ client.authorization = flow.authorize
57
+
58
+ # Make an API call.
59
+ result = client.execute(
60
+ :api_method => plus.activities.list,
61
+ :parameters => {'collection' => 'public', 'userId' => 'me'}
62
+ )
63
+
64
+ puts result.data
65
+ ```
54
66
 
55
67
  ## API Features
56
68
 
@@ -58,36 +70,53 @@ For normal client usage, this is sufficient:
58
70
 
59
71
  To take full advantage of the client, load API definitions prior to use. To load an API:
60
72
 
61
- urlshortener = client.discovered_api('urlshortener')
73
+ ```ruby
74
+ urlshortener = client.discovered_api('urlshortener')
75
+ ```
62
76
 
63
77
  Specific versions of the API can be loaded as well:
64
78
 
65
- drive = client.discovered_api('drive', 'v2')
79
+ ```ruby
80
+ drive = client.discovered_api('drive', 'v2')
81
+ ```
66
82
 
67
83
  Locally cached discovery documents may be used as well. To load an API from a local file:
68
84
 
69
- doc = File.read('my-api.json')
70
- my_api = client.register_discovery_document('myapi', 'v1', doc)
85
+ ```ruby
86
+ doc = File.read('my-api.json')
87
+ my_api = client.register_discovery_document('myapi', 'v1', doc)
88
+ ```
71
89
 
72
90
  ### Authorization
73
91
 
74
- Most interactions with Google APIs require users to authorize applications via OAuth 2.0. The client library uses [Signet](https://github.com/google/signet) to handle most aspects of authorization. For additional details about Google's OAuth support, see [Google Developers](https://developers.google.com/accounts/docs/OAuth2).
92
+ Most interactions with Google APIs require users to authorize applications via OAuth 2.0. The client library uses [Signet](https://github.com/google/signet) to handle most aspects of authorization. For additional details about Google's OAuth support, see [Google Developers](https://developers.google.com/accounts/docs/OAuth2).
75
93
 
76
94
  Credentials can be managed at the connection level, as shown, or supplied on a per-request basis when calling `execute`.
77
-
95
+
78
96
  For server-to-server interactions, like those between a web application and Google Cloud Storage, Prediction, or BigQuery APIs, use service accounts.
79
97
 
80
- key = Google::APIClient::KeyUtils.load_from_pkcs12('client.p12', 'notasecret')
81
- client.authorization = Signet::OAuth2::Client.new(
82
- :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
83
- :audience => 'https://accounts.google.com/o/oauth2/token',
84
- :scope => 'https://www.googleapis.com/auth/prediction',
85
- :issuer => '123456-abcdef@developer.gserviceaccount.com',
86
- :signing_key => key)
87
- client.authorization.fetch_access_token!
88
- client.execute(...)
89
-
90
-
98
+ ```ruby
99
+ key = Google::APIClient::KeyUtils.load_from_pkcs12('client.p12', 'notasecret')
100
+ client.authorization = Signet::OAuth2::Client.new(
101
+ :token_credential_uri => 'https://accounts.google.com/o/oauth2/token',
102
+ :audience => 'https://accounts.google.com/o/oauth2/token',
103
+ :scope => 'https://www.googleapis.com/auth/prediction',
104
+ :issuer => '123456-abcdef@developer.gserviceaccount.com',
105
+ :signing_key => key)
106
+ client.authorization.fetch_access_token!
107
+ client.execute(...)
108
+ ```
109
+
110
+ Service accounts are also used for delegation in Google Apps domains. The target user for impersonation is specified by setting the `:person` parameter to the user's email address
111
+ in the credentials. Detailed instructions on how to enable delegation for your domain can be found at [developers.google.com](https://developers.google.com/drive/delegation).
112
+
113
+ ### Automatic Retries & Backoff
114
+
115
+ The API client can automatically retry requests for recoverable errors. To enable retries, set the `client.retries` property to
116
+ the number of additional attempts. To avoid flooding servers, retries invovle a 1 second delay that increases on each subsequent retry.
117
+
118
+ The default value for retries is 0, but will be enabled by default in future releases.
119
+
91
120
  ### Batching Requests
92
121
 
93
122
  Some Google APIs support batching requests into a single HTTP request. Use `Google::APIClient::BatchRequest`
@@ -95,82 +124,89 @@ to bundle multiple requests together.
95
124
 
96
125
  Example:
97
126
 
98
- client = Google::APIClient.new
99
- urlshortener = client.discovered_api('urlshortner')
100
-
101
- batch = Google::APIClient::BatchRequest.new do |result|
102
- puts result.data
103
- end
104
-
105
- batch.add(:api_method => urlshortener.url.insert,
106
- :body_object => { 'longUrl' => 'http://example.com/foo' })
107
- batch.add(:api_method => urlshortener.url.insert,
108
- :body_object => { 'longUrl' => 'http://example.com/bar' })
109
- client.execute(batch)
110
-
127
+ ```ruby
128
+ client = Google::APIClient.new
129
+ urlshortener = client.discovered_api('urlshortner')
130
+
131
+ batch = Google::APIClient::BatchRequest.new do |result|
132
+ puts result.data
133
+ end
134
+
135
+ batch.add(:api_method => urlshortener.url.insert,
136
+ :body_object => { 'longUrl' => 'http://example.com/foo' })
137
+ batch.add(:api_method => urlshortener.url.insert,
138
+ :body_object => { 'longUrl' => 'http://example.com/bar' })
139
+ client.execute(batch)
140
+ ```
141
+
111
142
  Blocks for handling responses can be specified either at the batch level or when adding an individual API call. For example:
112
143
 
113
- batch.add(:api_method=>urlshortener.url.insert, :body_object => { 'longUrl' => 'http://example.com/bar' }) do |result|
114
- puts result.data
115
- end
144
+ ```ruby
145
+ batch.add(:api_method=>urlshortener.url.insert, :body_object => { 'longUrl' => 'http://example.com/bar' }) do |result|
146
+ puts result.data
147
+ end
148
+ ```
116
149
 
117
150
  ### Media Upload
118
151
 
119
152
  For APIs that support file uploads, use `Google::APIClient::UploadIO` to load the stream. Both multipart and resumable
120
153
  uploads can be used. For example, to upload a file to Google Drive using multipart
121
154
 
122
- drive = client.discovered_api('drive', 'v2')
123
-
124
- media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
125
- metadata = {
126
- 'title' => 'My movie',
127
- 'description' => 'The best home movie ever made'
128
- }
129
- client.execute(:api_method => drive.files.insert,
130
- :parameters => { 'uploadType' => 'multipart' },
131
- :body_object => metadata,
132
- :media => media )
133
-
134
- To use resumable uploads, change the `uploadType` parameter to `resumable`. To check the status of the upload
135
- and continue if necessary, check `result.resumable_upload`.
155
+ ```ruby
156
+ drive = client.discovered_api('drive', 'v2')
136
157
 
137
- client.execute(:api_method => drive.files.insert,
138
- :parameters => { 'uploadType' => 'resumable' },
158
+ media = Google::APIClient::UploadIO.new('mymovie.m4v', 'video/mp4')
159
+ metadata = {
160
+ 'title' => 'My movie',
161
+ 'description' => 'The best home movie ever made'
162
+ }
163
+ client.execute(:api_method => drive.files.insert,
164
+ :parameters => { 'uploadType' => 'multipart' },
139
165
  :body_object => metadata,
140
166
  :media => media )
141
- upload = result.resumable_upload
167
+ ```
168
+
169
+ To use resumable uploads, change the `uploadType` parameter to `resumable`. To check the status of the upload
170
+ and continue if necessary, check `result.resumable_upload`.
171
+
172
+ ```ruby
173
+ client.execute(:api_method => drive.files.insert,
174
+ :parameters => { 'uploadType' => 'resumable' },
175
+ :body_object => metadata,
176
+ :media => media )
177
+ upload = result.resumable_upload
142
178
 
143
- # Resume if needed
144
- if upload.resumable?
145
- client.execute(upload)
146
- end
179
+ # Resume if needed
180
+ if upload.resumable?
181
+ client.execute(upload)
182
+ end
183
+ ```
147
184
 
148
185
  ## Command Line
149
186
 
150
187
  Included with the gem is a command line interface for working with Google APIs.
151
188
 
152
- # Log in
153
- google-api oauth-2-login --client-id='...' --client-secret='...' --scope="https://www.googleapis.com/auth/plus.me"
189
+ ```bash
190
+ # Log in
191
+ google-api oauth-2-login --client-id='...' --client-secret='...' --scope="https://www.googleapis.com/auth/plus.me"
154
192
 
155
- # List the signed-in user's activities
156
- google-api execute plus.activities.list --api=plus -- userId="me" collection="public"
193
+ # List the signed-in user's activities
194
+ google-api execute plus.activities.list --api=plus -- userId="me" collection="public"
157
195
 
158
- # Start an interactive API session
159
- google-api irb
160
- >> plus = $client.discovered_api('plus')
161
- >> $client.execute(plus.activities.list, {'userId' => 'me', 'collection' => 'public'})
162
- => # returns a response from the API
196
+ # Start an interactive API session
197
+ google-api irb
198
+ >> plus = $client.discovered_api('plus')
199
+ >> $client.execute(plus.activities.list, {'userId' => 'me', 'collection' => 'public'})
200
+ => # returns a response from the API
201
+ ```
163
202
 
164
203
  For more information, use `google-api --help`
165
204
 
166
205
  ## Samples
167
206
 
168
- See the full list of [samples on Google Code](http://code.google.com/p/google-api-ruby-client/source/browse?repo=samples).
207
+ See the full list of [samples on Github](https://github.com/google/google-api-ruby-client-samples).
169
208
 
170
209
 
171
210
  ## Support
172
211
 
173
- Please [report bugs at the project on Google Code](http://code.google.com/p/google-api-ruby-client/issues/entry). Don't hesitate to [ask questions](http://stackoverflow.com/questions/tagged/google-api-ruby-client) about the client or APIs on [StackOverflow](http://stackoverflow.com).
174
-
175
-
176
-
212
+ Please [report bugs at the project on Github](https://github.com/google/google-api-ruby-client/issues). Don't hesitate to [ask questions](http://stackoverflow.com/questions/tagged/google-api-ruby-client) about the client or APIs on [StackOverflow](http://stackoverflow.com).
data/Rakefile CHANGED
@@ -11,7 +11,7 @@ PKG_DISPLAY_NAME = 'Google API Client'
11
11
  PKG_NAME = PKG_DISPLAY_NAME.downcase.gsub(/\s/, '-')
12
12
  PKG_VERSION = Google::APIClient::VERSION::STRING
13
13
  PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
14
- PKG_HOMEPAGE = 'http://code.google.com/p/google-api-ruby-client/'
14
+ PKG_HOMEPAGE = 'https://github.com/google/google-api-ruby-client'
15
15
 
16
16
  RELEASE_NAME = "REL #{PKG_VERSION}"
17
17