google-api-client 0.9.pre4 → 0.9.pre5

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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +11 -1
  5. data/api_names.yaml +1 -0
  6. data/api_names_out.yaml +163 -98
  7. data/generated/google/apis/admin_datatransfer_v1.rb +1 -1
  8. data/generated/google/apis/analytics_v3.rb +1 -1
  9. data/generated/google/apis/analytics_v3/classes.rb +7 -0
  10. data/generated/google/apis/analytics_v3/representations.rb +1 -0
  11. data/generated/google/apis/analytics_v3/service.rb +42 -0
  12. data/generated/google/apis/appstate_v1.rb +1 -1
  13. data/generated/google/apis/bigquery_v2.rb +1 -1
  14. data/generated/google/apis/bigquery_v2/classes.rb +23 -66
  15. data/generated/google/apis/bigquery_v2/representations.rb +1 -17
  16. data/generated/google/apis/bigquery_v2/service.rb +6 -6
  17. data/generated/google/apis/cloudbilling_v1.rb +1 -1
  18. data/generated/google/apis/cloudmonitoring_v2beta2.rb +1 -1
  19. data/generated/google/apis/deploymentmanager_v2.rb +1 -1
  20. data/generated/google/apis/deploymentmanager_v2/classes.rb +5 -4
  21. data/generated/google/apis/doubleclicksearch_v2.rb +1 -1
  22. data/generated/google/apis/drive_v2.rb +1 -1
  23. data/generated/google/apis/drive_v2/service.rb +4 -3
  24. data/generated/google/apis/drive_v3.rb +1 -1
  25. data/generated/google/apis/games_configuration_v1configuration.rb +1 -1
  26. data/generated/google/apis/games_management_v1management.rb +1 -1
  27. data/generated/google/apis/games_v1.rb +1 -1
  28. data/generated/google/apis/genomics_v1.rb +1 -1
  29. data/generated/google/apis/gmail_v1.rb +1 -1
  30. data/generated/google/apis/gmail_v1/classes.rb +2 -2
  31. data/generated/google/apis/plus_domains_v1.rb +1 -1
  32. data/generated/google/apis/plus_v1.rb +1 -1
  33. data/generated/google/apis/plus_v1/classes.rb +0 -497
  34. data/generated/google/apis/plus_v1/representations.rb +0 -121
  35. data/generated/google/apis/plus_v1/service.rb +0 -101
  36. data/generated/google/apis/replicapoolupdater_v1beta1.rb +1 -1
  37. data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +4 -4
  38. data/generated/google/apis/webmasters_v3.rb +3 -3
  39. data/generated/google/apis/webmasters_v3/service.rb +2 -2
  40. data/generated/google/apis/youtube_v3.rb +1 -1
  41. data/generated/google/apis/youtube_v3/classes.rb +942 -64
  42. data/generated/google/apis/youtube_v3/representations.rb +307 -0
  43. data/generated/google/apis/youtube_v3/service.rb +443 -1
  44. data/google-api-client.gemspec +1 -0
  45. data/lib/google/apis/core/api_command.rb +2 -2
  46. data/lib/google/apis/core/base_service.rb +2 -0
  47. data/lib/google/apis/core/http_client_adapter.rb +82 -0
  48. data/lib/google/apis/core/http_command.rb +16 -1
  49. data/lib/google/apis/core/json_representation.rb +3 -2
  50. data/lib/google/apis/core/upload.rb +7 -1
  51. data/lib/google/apis/options.rb +4 -2
  52. data/lib/google/apis/version.rb +1 -1
  53. data/samples/Gemfile +7 -0
  54. data/samples/README.md +51 -0
  55. data/samples/google-api-samples +32 -0
  56. data/samples/lib/base_cli.rb +94 -0
  57. data/samples/lib/samples/analytics.rb +62 -0
  58. data/samples/lib/samples/calendar.rb +83 -0
  59. data/samples/lib/samples/drive.rb +82 -0
  60. data/samples/lib/samples/gmail.rb +50 -0
  61. data/samples/lib/samples/pubsub.rb +114 -0
  62. data/samples/lib/samples/translate.rb +44 -0
  63. data/samples/lib/samples/you_tube.rb +44 -0
  64. data/spec/google/apis/core/api_command_spec.rb +39 -0
  65. data/spec/google/apis/core/http_command_spec.rb +9 -0
  66. data/spec/google/apis/core/upload_spec.rb +14 -0
  67. data/spec/google/apis/options_spec.rb +0 -8
  68. data/spec/integration_tests/adsense_spec.rb +1 -0
  69. data/spec/integration_tests/pubsub_spec.rb +3 -3
  70. data/spec/integration_tests/url_shortener_spec.rb +14 -0
  71. data/spec/spec_helper.rb +33 -6
  72. data/{samples/translate/translate.rb → spec/spec_helper/load_path_spec.rb} +15 -6
  73. metadata +30 -6
  74. data/samples/calendar/calendar.rb +0 -43
  75. data/samples/drive/drive.rb +0 -47
  76. data/samples/pubsub/pubsub.rb +0 -51
@@ -0,0 +1,83 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/calendar_v3'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the Google Calendar API
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples calendar list --limit 10
25
+ class Calendar < BaseCli
26
+ Calendar = Google::Apis::CalendarV3
27
+
28
+ desc 'schedule', 'Create an event'
29
+ method_option :summary, type: :string, required: true
30
+ method_option :start, type: :string, required: true
31
+ method_option :end , type: :string, required: true
32
+ method_option :attendees, type: :array
33
+ def schedule
34
+ calendar = Calendar::CalendarService.new
35
+ calendar.authorization = user_credentials_for(Calendar::AUTH_CALENDAR)
36
+
37
+ event = {
38
+ summary: options[:summary],
39
+ attendees: Array(options[:attenddes]).map { |email| { email: email } },
40
+ start: {
41
+ date_time: DateTime.parse(options[:start])
42
+ },
43
+ end: {
44
+ date_time: DateTime.parse(options[:end])
45
+ }
46
+ }
47
+
48
+ event = calendar.insert_event('primary', event, send_notifications: true)
49
+ say "Created event '#{event.summary}' (#{event.id})"
50
+ end
51
+
52
+ desc 'list', 'List upcoming events'
53
+ method_option :limit, type: :numeric
54
+ def list()
55
+ calendar = Calendar::CalendarService.new
56
+ calendar.authorization = user_credentials_for(Calendar::AUTH_CALENDAR)
57
+
58
+ page_token = nil
59
+ limit = options[:limit] || 1000
60
+ now = Time.now.iso8601
61
+ begin
62
+ result = calendar.list_events('primary',
63
+ max_results: [limit, 100].min,
64
+ single_events: true,
65
+ order_by: 'startTime',
66
+ time_min: now,
67
+ page_token: page_token,
68
+ fields: 'items(id,summary,start),next_page_token')
69
+
70
+ result.items.each do |event|
71
+ time = event.start.date_time || event.start.date
72
+ say "#{time}, #{event.summary}"
73
+ end
74
+ limit -= result.items.length
75
+ if result.next_page_token
76
+ page_token = result.next_page_token
77
+ else
78
+ page_token = nil
79
+ end
80
+ end while !page_token.nil? && limit > 0
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,82 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/drive_v3'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the Google Drive API
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples drive upload ~/myvideo.mov
25
+ class Drive < BaseCli
26
+ Drive = Google::Apis::DriveV3
27
+
28
+ desc 'upload FILE', 'Upload a file to Google Drive'
29
+ method_option :name, type: :string
30
+ def upload(file)
31
+ drive = Drive::DriveService.new
32
+ drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
33
+
34
+ metadata = {
35
+ name: options[:name] || file
36
+ }
37
+ result = drive.create_file(metadata, upload_source: file)
38
+ say "Upload complete"
39
+ end
40
+
41
+ desc 'download FILE_ID', 'Download a file from Google Drive'
42
+ method_option :out, type: :string
43
+ def download(file_id)
44
+ drive = Drive::DriveService.new
45
+ drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
46
+
47
+ dest = options[:out] || StringIO.new
48
+ drive.get_file(file_id, download_dest: dest)
49
+
50
+ if dest.is_a?(StringIO)
51
+ dest.rewind
52
+ STDOUT.write(dest.read)
53
+ else
54
+ say "File downloaded to #{options[:out]}"
55
+ end
56
+ end
57
+
58
+ desc 'list QUERY', 'Search for files'
59
+ method_option :limit, type: :numeric
60
+ def list(query)
61
+ drive = Drive::DriveService.new
62
+ drive.authorization = user_credentials_for(Drive::AUTH_DRIVE)
63
+
64
+ page_token = nil
65
+ limit = options[:limit] || 1000
66
+ begin
67
+ result = drive.list_files(q: query,
68
+ page_size: [limit, 100].min,
69
+ page_token: page_token,
70
+ fields: 'files(id,name),next_page_token')
71
+
72
+ result.files.each { |file| puts "#{file.id}, #{file.name}" }
73
+ limit -= result.files.length
74
+ if result.next_page_token
75
+ page_token = result.next_page_token
76
+ else
77
+ page_token = nil
78
+ end
79
+ end while !page_token.nil? && limit > 0
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,50 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/gmail_v1'
16
+ require 'base_cli'
17
+ require 'rmail'
18
+
19
+ module Samples
20
+ # Examples for the Gmail API
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples gmail send 'Hello there!' \
25
+ # --to='recipient@example.com' --from='user@example.com' \
26
+ # --subject='Hello'
27
+ #
28
+ class Gmail < BaseCli
29
+ Gmail = Google::Apis::GmailV1
30
+
31
+ desc 'send TEXT', 'Send a message with the gmail API'
32
+ method_option :to, type: :string, required: true
33
+ method_option :from, type: :string, required: true
34
+ method_option :subject, type: :string, required: true
35
+ def send(body)
36
+ gmail = Gmail::GmailService.new
37
+ gmail.authorization = user_credentials_for(Gmail::AUTH_SCOPE)
38
+
39
+ message = RMail::Message.new
40
+ message.header['To'] = options[:to]
41
+ message.header['From'] = options[:from]
42
+ message.header['Subject'] = options[:subject]
43
+ message.body = body
44
+
45
+ gmail.send_user_message('me',
46
+ upload_source: StringIO.new(message.to_s),
47
+ content_type: 'message/rfc822')
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,114 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/pubsub_v1'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the Google Cloud Pub/Sub API.
21
+ #
22
+ # Sample usage session:
23
+ #
24
+ # $ ./google-api-samples pubsub create_topic mytopic --project=623040240964
25
+ # # ./google-api-samples pubsub subscribe mysub --topic=mytopic --project=623040240964
26
+ # $ ./google-api-samples pubsub publish 'Hello!' --topic=mytopic --project=623040240964
27
+ # $ ./google-api-samples pubsub pull mysub --project=623040240964
28
+ # Received: Hello!
29
+ # $ ./google-api-samples pubsub unsubscribe mysub --project=623040240964
30
+ # $ ./google-api-samples pubsub delete_topic mytopic --project=623040240964
31
+ #
32
+ class PubSub < BaseCli
33
+ Pubsub = Google::Apis::PubsubV1
34
+
35
+ desc 'create_topic TOPIC_NAME', 'Create a topic'
36
+ method_option :project, type: :string, required: true
37
+ def create_topic(name)
38
+ pubsub = Pubsub::PubsubService.new
39
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
40
+ topic = "projects/#{options[:project]}/topics/#{name}"
41
+
42
+ pubsub.create_topic(topic)
43
+ end
44
+
45
+ desc 'delete_topic TOPIC_NAME', 'Delete a topic'
46
+ method_option :project, type: :string, required: true
47
+ def delete_topic(name)
48
+ pubsub = Pubsub::PubsubService.new
49
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
50
+
51
+ topic = "projects/#{options[:project]}/topics/#{name}"
52
+
53
+ pubsub.delete_topic(topic)
54
+ end
55
+
56
+ desc 'subscribe SUBSCRIPTION_NAME', 'Subscribe to a topic'
57
+ method_option :project, type: :string, required: true
58
+ method_option :topic, type: :string, required: true
59
+ def subscribe(name)
60
+ pubsub = Pubsub::PubsubService.new
61
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
62
+
63
+ topic = "projects/#{options[:project]}/topics/#{options[:topic]}"
64
+ subscription = "projects/#{options[:project]}/subscriptions/#{name}"
65
+ pubsub.create_subscription(subscription, Pubsub::Subscription.new(topic: topic))
66
+ end
67
+
68
+ desc 'unsubscribe subscription_name', 'Ububscribe from a topic'
69
+ method_option :project, type: :string, required: true
70
+ def unsubscribe(name)
71
+ pubsub = Pubsub::PubsubService.new
72
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
73
+
74
+ subscription = "projects/#{options[:project]}/subscriptions/#{name}"
75
+ pubsub.delete_subscription(subscription)
76
+ end
77
+
78
+
79
+ desc 'publish MESSAGE', 'Publish a message to a topic'
80
+ method_option :project, type: :string, required: true
81
+ method_option :topic, type: :string, required: true
82
+ def publish(message)
83
+ pubsub = Pubsub::PubsubService.new
84
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
85
+ topic = "projects/#{options[:project]}/topics/#{options[:topic]}"
86
+
87
+ request = Pubsub::PublishRequest.new(messages: [])
88
+ request.messages << Pubsub::Message.new(data: message)
89
+
90
+ pubsub.publish_topic(topic, request)
91
+ end
92
+
93
+ desc 'pull SUBSCRIPTION_NAME', 'Pull message(s) from the topic'
94
+ method_option :project, type: :string, required: true
95
+ method_option :max, type: :numeric, default: 5
96
+ def pull(name)
97
+ pubsub = Pubsub::PubsubService.new
98
+ pubsub.authorization = Google::Auth.get_application_default([Pubsub::AUTH_PUBSUB])
99
+
100
+ subscription = "projects/#{options[:project]}/subscriptions/#{name}"
101
+
102
+ # Pull messages
103
+ response = pubsub.pull_subscription(subscription, Pubsub::PullRequest.new(max_messages: options[:max]))
104
+ response.received_messages.each do |received_message|
105
+ data = received_message.message.data
106
+ puts "Received: #{data}"
107
+ end
108
+
109
+ # Acknowledge receipt
110
+ ack_ids = response.received_messages.map{ |msg| msg.ack_id }
111
+ pubsub.acknowledge_subscription(subscription, Pubsub::AcknowledgeRequest.new(ack_ids: ack_ids))
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/translate_v2'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the Google Translate API
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples translate 'Hola!' --target='en'
25
+ # Hello
26
+ #
27
+ class Translate < BaseCli
28
+ Translate = Google::Apis::TranslateV2
29
+
30
+ desc 'translate PHRASE', 'Translate a phrase'
31
+ method_option :source, type: :string
32
+ method_option :target, type: :string, required: true
33
+ def translate(phrase)
34
+ translate = Translate::TranslateService.new
35
+ translate.key = api_key
36
+
37
+ result = translate.list_translations(phrase, options[:target], source: options[:source])
38
+ puts result.translations.first.translated_text
39
+ end
40
+
41
+ default_task :translate
42
+
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2016 Google Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ require 'google/apis/youtube_v3'
16
+ require 'base_cli'
17
+
18
+
19
+ module Samples
20
+ # Examples for the YouTube APIs
21
+ #
22
+ # Sample usage:
23
+ #
24
+ # $ ./google-api-samples youtube upload ~/myvideo.mov --title="So funny!"
25
+ #
26
+ class YouTube < BaseCli
27
+ YT = Google::Apis::YoutubeV3
28
+
29
+ desc 'upload FILE', 'Upload a video to YouTube'
30
+ method_option :title, type: :string
31
+ def upload(file)
32
+ youtube = YT::YouTubeService.new
33
+ youtube.authorization = user_credentials_for(YT::AUTH_YOUTUBE)
34
+
35
+ metadata = {
36
+ snippet: {
37
+ title: options[:title] || file
38
+ }
39
+ }
40
+ result = youtube.insert_video('snippet', metadata, upload_source: file)
41
+ say "Upload complete"
42
+ end
43
+ end
44
+ end
@@ -151,6 +151,41 @@ EOF
151
151
  end
152
152
  end
153
153
 
154
+ context('with a client error response') do
155
+ let(:command) do
156
+ Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals')
157
+ end
158
+
159
+ before(:example) do
160
+ json = <<EOF
161
+ {
162
+ "error": {
163
+ "errors": [
164
+ {
165
+ "domain": "global",
166
+ "reason": "timeRangeEmpty",
167
+ "message": "The specified time range is empty."
168
+ }
169
+ ],
170
+ "code": 400,
171
+ "message": "The specified time range is empty."
172
+ }
173
+ }
174
+ EOF
175
+ stub_request(:get, 'https://www.googleapis.com/zoo/animals')
176
+ .to_return(status: [400, 'Bad Request'], headers: { 'Content-Type' => 'application/json' }, body: json)
177
+ end
178
+
179
+ it 'should raise client error' do
180
+ expect { command.execute(client) }.to raise_error(Google::Apis::ClientError)
181
+ end
182
+
183
+ it 'should raise an error with the reason and message' do
184
+ expect { command.execute(client) }.to raise_error(
185
+ /timeRangeEmpty: The specified time range is empty/)
186
+ end
187
+ end
188
+
154
189
  context('with an empty error body') do
155
190
  let(:command) do
156
191
  Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals')
@@ -166,5 +201,9 @@ EOF
166
201
  it 'should raise client error' do
167
202
  expect { command.execute(client) }.to raise_error(Google::Apis::ClientError)
168
203
  end
204
+
205
+ it 'should use the default error message' do
206
+ expect { command.execute(client) }.to raise_error(/Invalid request/)
207
+ end
169
208
  end
170
209
  end