gcloud 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (175) hide show
  1. checksums.yaml +8 -8
  2. data/AUTHENTICATION.md +13 -9
  3. data/CHANGELOG.md +8 -3
  4. data/OVERVIEW.md +46 -8
  5. data/lib/gcloud.rb +123 -117
  6. data/lib/gcloud/backoff.rb +43 -15
  7. data/lib/gcloud/bigquery.rb +211 -195
  8. data/lib/gcloud/bigquery/connection.rb +9 -9
  9. data/lib/gcloud/bigquery/copy_job.rb +15 -16
  10. data/lib/gcloud/bigquery/credentials.rb +3 -3
  11. data/lib/gcloud/bigquery/data.rb +12 -11
  12. data/lib/gcloud/bigquery/dataset.rb +162 -216
  13. data/lib/gcloud/bigquery/dataset/access.rb +59 -43
  14. data/lib/gcloud/bigquery/dataset/list.rb +3 -3
  15. data/lib/gcloud/bigquery/errors.rb +9 -5
  16. data/lib/gcloud/bigquery/extract_job.rb +18 -18
  17. data/lib/gcloud/bigquery/insert_response.rb +7 -4
  18. data/lib/gcloud/bigquery/job.rb +48 -44
  19. data/lib/gcloud/bigquery/job/list.rb +3 -3
  20. data/lib/gcloud/bigquery/load_job.rb +24 -25
  21. data/lib/gcloud/bigquery/project.rb +145 -204
  22. data/lib/gcloud/bigquery/query_data.rb +10 -9
  23. data/lib/gcloud/bigquery/query_job.rb +23 -32
  24. data/lib/gcloud/bigquery/table.rb +238 -280
  25. data/lib/gcloud/bigquery/table/list.rb +3 -3
  26. data/lib/gcloud/bigquery/table/schema.rb +79 -87
  27. data/lib/gcloud/bigquery/view.rb +69 -82
  28. data/lib/gcloud/credentials.rb +3 -9
  29. data/lib/gcloud/datastore.rb +194 -170
  30. data/lib/gcloud/datastore/connection.rb +12 -8
  31. data/lib/gcloud/datastore/credentials.rb +6 -4
  32. data/lib/gcloud/datastore/dataset.rb +74 -141
  33. data/lib/gcloud/datastore/dataset/lookup_results.rb +6 -4
  34. data/lib/gcloud/datastore/dataset/query_results.rb +6 -4
  35. data/lib/gcloud/datastore/entity.rb +81 -76
  36. data/lib/gcloud/datastore/errors.rb +10 -8
  37. data/lib/gcloud/datastore/key.rb +41 -77
  38. data/lib/gcloud/datastore/properties.rb +3 -3
  39. data/lib/gcloud/datastore/proto.rb +7 -4
  40. data/lib/gcloud/datastore/query.rb +26 -3
  41. data/lib/gcloud/datastore/transaction.rb +12 -8
  42. data/lib/gcloud/dns.rb +180 -152
  43. data/lib/gcloud/dns/change.rb +16 -16
  44. data/lib/gcloud/dns/change/list.rb +3 -3
  45. data/lib/gcloud/dns/connection.rb +9 -10
  46. data/lib/gcloud/dns/credentials.rb +3 -3
  47. data/lib/gcloud/dns/errors.rb +9 -5
  48. data/lib/gcloud/dns/importer.rb +17 -23
  49. data/lib/gcloud/dns/project.rb +42 -64
  50. data/lib/gcloud/dns/record.rb +58 -46
  51. data/lib/gcloud/dns/record/list.rb +6 -7
  52. data/lib/gcloud/dns/zone.rb +198 -289
  53. data/lib/gcloud/dns/zone/list.rb +3 -3
  54. data/lib/gcloud/dns/zone/transaction.rb +56 -72
  55. data/lib/gcloud/errors.rb +174 -3
  56. data/lib/gcloud/gce.rb +3 -4
  57. data/lib/gcloud/grpc_utils.rb +76 -0
  58. data/lib/gcloud/logging.rb +308 -0
  59. data/lib/gcloud/logging/credentials.rb +29 -0
  60. data/lib/gcloud/logging/entry.rb +303 -0
  61. data/lib/gcloud/logging/entry/http_request.rb +141 -0
  62. data/lib/gcloud/logging/entry/list.rb +111 -0
  63. data/lib/gcloud/logging/entry/operation.rb +90 -0
  64. data/lib/gcloud/logging/logger.rb +307 -0
  65. data/lib/gcloud/logging/metric.rb +175 -0
  66. data/lib/gcloud/logging/metric/list.rb +98 -0
  67. data/lib/gcloud/logging/project.rb +650 -0
  68. data/lib/gcloud/logging/resource.rb +95 -0
  69. data/lib/gcloud/logging/resource_descriptor.rb +140 -0
  70. data/lib/gcloud/logging/resource_descriptor/list.rb +78 -0
  71. data/lib/gcloud/logging/service.rb +258 -0
  72. data/lib/gcloud/logging/sink.rb +233 -0
  73. data/lib/gcloud/logging/sink/list.rb +97 -0
  74. data/lib/gcloud/pubsub.rb +241 -199
  75. data/lib/gcloud/pubsub/credentials.rb +3 -3
  76. data/lib/gcloud/pubsub/message.rb +26 -20
  77. data/lib/gcloud/pubsub/project.rb +166 -233
  78. data/lib/gcloud/pubsub/received_message.rb +28 -38
  79. data/lib/gcloud/pubsub/service.rb +323 -0
  80. data/lib/gcloud/pubsub/subscription.rb +172 -242
  81. data/lib/gcloud/pubsub/subscription/list.rb +11 -9
  82. data/lib/gcloud/pubsub/topic.rb +152 -271
  83. data/lib/gcloud/pubsub/topic/batch.rb +66 -0
  84. data/lib/gcloud/pubsub/topic/list.rb +9 -7
  85. data/lib/gcloud/resource_manager.rb +158 -138
  86. data/lib/gcloud/resource_manager/connection.rb +6 -5
  87. data/lib/gcloud/resource_manager/credentials.rb +3 -3
  88. data/lib/gcloud/resource_manager/errors.rb +9 -5
  89. data/lib/gcloud/resource_manager/manager.rb +54 -86
  90. data/lib/gcloud/resource_manager/project.rb +69 -88
  91. data/lib/gcloud/resource_manager/project/list.rb +4 -5
  92. data/lib/gcloud/resource_manager/project/updater.rb +12 -14
  93. data/lib/gcloud/search.rb +158 -135
  94. data/lib/gcloud/search/api_client.rb +7 -7
  95. data/lib/gcloud/search/connection.rb +8 -8
  96. data/lib/gcloud/search/credentials.rb +3 -3
  97. data/lib/gcloud/search/document.rb +64 -87
  98. data/lib/gcloud/search/document/list.rb +5 -5
  99. data/lib/gcloud/search/errors.rb +9 -5
  100. data/lib/gcloud/search/field_value.rb +32 -38
  101. data/lib/gcloud/search/field_values.rb +50 -80
  102. data/lib/gcloud/search/fields.rb +44 -65
  103. data/lib/gcloud/search/index.rb +163 -204
  104. data/lib/gcloud/search/index/list.rb +5 -5
  105. data/lib/gcloud/search/project.rb +31 -47
  106. data/lib/gcloud/search/result.rb +27 -31
  107. data/lib/gcloud/search/result/list.rb +6 -6
  108. data/lib/gcloud/storage.rb +224 -190
  109. data/lib/gcloud/storage/bucket.rb +202 -227
  110. data/lib/gcloud/storage/bucket/acl.rb +83 -170
  111. data/lib/gcloud/storage/bucket/cors.rb +31 -34
  112. data/lib/gcloud/storage/bucket/list.rb +3 -3
  113. data/lib/gcloud/storage/connection.rb +11 -7
  114. data/lib/gcloud/storage/credentials.rb +3 -3
  115. data/lib/gcloud/storage/errors.rb +11 -8
  116. data/lib/gcloud/storage/file.rb +129 -171
  117. data/lib/gcloud/storage/file/acl.rb +51 -99
  118. data/lib/gcloud/storage/file/list.rb +3 -3
  119. data/lib/gcloud/storage/file/verifier.rb +3 -2
  120. data/lib/gcloud/storage/project.rb +111 -132
  121. data/lib/gcloud/upload.rb +4 -7
  122. data/lib/gcloud/version.rb +2 -4
  123. data/lib/google/api/annotations.rb +14 -0
  124. data/lib/google/api/http.rb +30 -0
  125. data/lib/google/api/label.rb +24 -0
  126. data/lib/google/api/monitored_resource.rb +25 -0
  127. data/lib/google/datastore/v1beta3/datastore.rb +115 -0
  128. data/lib/google/datastore/v1beta3/datastore_services.rb +33 -0
  129. data/lib/google/datastore/v1beta3/entity.rb +63 -0
  130. data/lib/google/datastore/v1beta3/query.rb +128 -0
  131. data/lib/google/devtools/cloudtrace/v1/trace.rb +78 -0
  132. data/lib/google/devtools/cloudtrace/v1/trace_services.rb +32 -0
  133. data/lib/google/example/library/v1/library.rb +91 -0
  134. data/lib/google/example/library/v1/library_services.rb +40 -0
  135. data/lib/google/iam/v1/iam_policy.rb +33 -0
  136. data/lib/google/iam/v1/iam_policy_services.rb +30 -0
  137. data/lib/google/iam/v1/policy.rb +25 -0
  138. data/lib/google/logging/type/http_request.rb +28 -0
  139. data/lib/google/logging/type/log_severity.rb +27 -0
  140. data/lib/google/logging/v2/log_entry.rb +44 -0
  141. data/lib/google/logging/v2/logging.rb +56 -0
  142. data/lib/google/logging/v2/logging_config.rb +59 -0
  143. data/lib/google/logging/v2/logging_config_services.rb +32 -0
  144. data/lib/google/logging/v2/logging_metrics.rb +51 -0
  145. data/lib/google/logging/v2/logging_metrics_services.rb +32 -0
  146. data/lib/google/logging/v2/logging_services.rb +31 -0
  147. data/lib/google/longrunning/operations.rb +50 -0
  148. data/lib/google/longrunning/operations_services.rb +29 -0
  149. data/lib/google/protobuf/any.rb +17 -0
  150. data/lib/google/protobuf/api.rb +31 -0
  151. data/lib/google/protobuf/descriptor.rb +0 -0
  152. data/lib/google/protobuf/duration.rb +17 -0
  153. data/lib/google/protobuf/empty.rb +15 -0
  154. data/lib/google/protobuf/field_mask.rb +16 -0
  155. data/lib/google/protobuf/source_context.rb +16 -0
  156. data/lib/google/protobuf/struct.rb +35 -0
  157. data/lib/google/protobuf/timestamp.rb +17 -0
  158. data/lib/google/protobuf/type.rb +79 -0
  159. data/lib/google/protobuf/wrappers.rb +48 -0
  160. data/lib/google/pubsub/v1/pubsub.rb +129 -0
  161. data/lib/google/pubsub/v1/pubsub_services.rb +56 -0
  162. data/lib/google/pubsub/v1beta2/pubsub.rb +126 -0
  163. data/lib/google/pubsub/v1beta2/pubsub_services.rb +56 -0
  164. data/lib/google/rpc/code.rb +32 -0
  165. data/lib/google/rpc/error_details.rb +61 -0
  166. data/lib/google/rpc/status.rb +19 -0
  167. data/lib/google/type/color.rb +20 -0
  168. data/lib/google/type/date.rb +18 -0
  169. data/lib/google/type/dayofweek.rb +23 -0
  170. data/lib/google/type/latlng.rb +17 -0
  171. data/lib/google/type/money.rb +18 -0
  172. data/lib/google/type/timeofday.rb +19 -0
  173. metadata +101 -4
  174. data/lib/gcloud/pubsub/connection.rb +0 -295
  175. data/lib/gcloud/pubsub/errors.rb +0 -93
@@ -1,4 +1,3 @@
1
- #--
2
1
  # Copyright 2015 Google Inc. All rights reserved.
3
2
  #
4
3
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,16 +12,18 @@
13
12
  # See the License for the specific language governing permissions and
14
13
  # limitations under the License.
15
14
 
16
- require "gcloud/pubsub/errors"
15
+
16
+ require "gcloud/errors"
17
17
  require "gcloud/pubsub/message"
18
18
 
19
19
  module Gcloud
20
20
  module Pubsub
21
21
  ##
22
- # = ReceivedMessage
22
+ # # ReceivedMessage
23
23
  #
24
- # Represents a Pub/Sub Message that can be acknowledged or delayed.
24
+ # Represents a Pub/Sub {Message} that can be acknowledged or delayed.
25
25
  #
26
+ # @example
26
27
  # require "gcloud"
27
28
  #
28
29
  # gcloud = Gcloud.new
@@ -37,30 +38,30 @@ module Gcloud
37
38
  #
38
39
  class ReceivedMessage
39
40
  ##
40
- # The Subscription object.
41
- attr_accessor :subscription #:nodoc:
41
+ # @private The {Subscription} object.
42
+ attr_accessor :subscription
42
43
 
43
44
  ##
44
- # The Google API Client object.
45
- attr_accessor :gapi #:nodoc:
45
+ # @private The gRPC Google::Pubsub::V1::ReceivedMessage object.
46
+ attr_accessor :grpc
46
47
 
47
48
  ##
48
- # Create an empty Subscription object.
49
- def initialize #:nodoc:
49
+ # @private Create an empty {Subscription} object.
50
+ def initialize
50
51
  @subscription = nil
51
- @gapi = {}
52
+ @grpc = Google::Pubsub::V1::ReceivedMessage.new
52
53
  end
53
54
 
54
55
  ##
55
56
  # The acknowledgment ID for the message.
56
57
  def ack_id
57
- @gapi["ackId"]
58
+ @grpc.ack_id
58
59
  end
59
60
 
60
61
  ##
61
62
  # The received message.
62
63
  def message
63
- Message.from_gapi @gapi["message"]
64
+ Message.from_grpc @grpc.message
64
65
  end
65
66
  alias_method :msg, :message
66
67
 
@@ -87,8 +88,7 @@ module Gcloud
87
88
  ##
88
89
  # Acknowledges receipt of the message.
89
90
  #
90
- # === Example
91
- #
91
+ # @example
92
92
  # require "gcloud"
93
93
  #
94
94
  # gcloud = Gcloud.new
@@ -113,17 +113,13 @@ module Gcloud
113
113
  # This indicates that more time is needed to process the message, or to
114
114
  # make the message available for redelivery.
115
115
  #
116
- # === Parameters
117
- #
118
- # +deadline+::
119
- # The new ack deadline in seconds from the time this request is sent
120
- # to the Pub/Sub system. Must be >= 0. For example, if the value is
121
- # +10+, the new ack deadline will expire 10 seconds after the call is
122
- # made. Specifying +0+ may immediately make the message available for
123
- # another pull request. (+Integer+)
124
- #
125
- # === Example
116
+ # @param [Integer] new_deadline The new ack deadline in seconds from the
117
+ # time this request is sent to the Pub/Sub system. Must be >= 0. For
118
+ # example, if the value is `10`, the new ack deadline will expire 10
119
+ # seconds after the call is made. Specifying `0` may immediately make
120
+ # the message available for another pull request.
126
121
  #
122
+ # @example
127
123
  # require "gcloud"
128
124
  #
129
125
  # gcloud = Gcloud.new
@@ -139,22 +135,16 @@ module Gcloud
139
135
  #
140
136
  def delay! new_deadline
141
137
  ensure_subscription!
142
- connection = subscription.connection
143
- resp = connection.modify_ack_deadline subscription.name,
144
- ack_id, new_deadline
145
- if resp.success?
146
- true
147
- else
148
- fail ApiError.from_response(resp)
149
- end
138
+ subscription.delay new_deadline, ack_id
150
139
  end
151
140
 
152
141
  ##
153
- # New ReceivedMessage from a Google API Client object.
154
- def self.from_gapi gapi, subscription #:nodoc:
155
- new.tap do |f|
156
- f.gapi = gapi
157
- f.subscription = subscription
142
+ # @private New ReceivedMessage from a Google::Pubsub::V1::ReceivedMessage
143
+ # object.
144
+ def self.from_grpc grpc, subscription
145
+ new.tap do |rm|
146
+ rm.grpc = grpc
147
+ rm.subscription = subscription
158
148
  end
159
149
  end
160
150
 
@@ -0,0 +1,323 @@
1
+ # Copyright 2016 Google Inc. All rights reserved.
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
+
16
+ require "google/pubsub/v1/pubsub_services"
17
+ require "google/iam/v1/iam_policy_services"
18
+ require "gcloud/backoff"
19
+ require "gcloud/grpc_utils"
20
+ require "json"
21
+
22
+ module Gcloud
23
+ module Pubsub
24
+ ##
25
+ # @private Represents the gRPC Pub/Sub service, including all the API
26
+ # methods.
27
+ class Service
28
+ attr_accessor :project, :credentials, :host
29
+
30
+ ##
31
+ # Creates a new Service instance.
32
+ def initialize project, credentials
33
+ @project = project
34
+ @credentials = credentials
35
+ @host = "pubsub.googleapis.com"
36
+ end
37
+
38
+ def creds
39
+ GRPC::Core::ChannelCredentials.new.compose \
40
+ GRPC::Core::CallCredentials.new credentials.client.updater_proc
41
+ end
42
+
43
+ def subscriber
44
+ return mocked_subscriber if mocked_subscriber
45
+ @subscriber ||= Google::Pubsub::V1::Subscriber::Stub.new host, creds
46
+ end
47
+ attr_accessor :mocked_subscriber
48
+
49
+ def publisher
50
+ return mocked_publisher if mocked_publisher
51
+ @publisher ||= Google::Pubsub::V1::Publisher::Stub.new host, creds
52
+ end
53
+ attr_accessor :mocked_publisher
54
+
55
+ def iam
56
+ return mocked_iam if mocked_iam
57
+ @iam ||= Google::Iam::V1::IAMPolicy::Stub.new host, creds
58
+ end
59
+ attr_accessor :mocked_iam
60
+
61
+ ##
62
+ # Gets the configuration of a topic.
63
+ # Since the topic only has the name attribute,
64
+ # this method is only useful to check the existence of a topic.
65
+ # If other attributes are added in the future,
66
+ # they will be returned here.
67
+ def get_topic topic_name, options = {}
68
+ topic_req = Google::Pubsub::V1::GetTopicRequest.new.tap do |r|
69
+ r.topic = topic_path(topic_name, options)
70
+ end
71
+
72
+ backoff { publisher.get_topic topic_req }
73
+ end
74
+
75
+ ##
76
+ # Lists matching topics.
77
+ def list_topics options = {}
78
+ topics_req = Google::Pubsub::V1::ListTopicsRequest.new.tap do |r|
79
+ r.project = project_path(options)
80
+ r.page_token = options[:token] if options[:token]
81
+ r.page_size = options[:max] if options[:max]
82
+ end
83
+
84
+ backoff { publisher.list_topics topics_req }
85
+ end
86
+
87
+ ##
88
+ # Creates the given topic with the given name.
89
+ def create_topic topic_name, options = {}
90
+ topic_req = Google::Pubsub::V1::Topic.new.tap do |r|
91
+ r.name = topic_path(topic_name, options)
92
+ end
93
+
94
+ backoff { publisher.create_topic topic_req }
95
+ end
96
+
97
+ ##
98
+ # Deletes the topic with the given name.
99
+ # All subscriptions to this topic are also deleted.
100
+ # Raises GRPC status code 5 if the topic does not exist.
101
+ # After a topic is deleted, a new topic may be created with the same name.
102
+ def delete_topic topic_name
103
+ topic_req = Google::Pubsub::V1::DeleteTopicRequest.new.tap do |r|
104
+ r.topic = topic_path(topic_name)
105
+ end
106
+
107
+ backoff { publisher.delete_topic topic_req }
108
+ end
109
+
110
+ ##
111
+ # Adds one or more messages to the topic.
112
+ # Raises GRPC status code 5 if the topic does not exist.
113
+ # The messages parameter is an array of arrays.
114
+ # The first element is the data, second is attributes hash.
115
+ def publish topic, messages
116
+ publish_req = Google::Pubsub::V1::PublishRequest.new(
117
+ topic: topic_path(topic),
118
+ messages: messages.map do |data, attributes|
119
+ Google::Pubsub::V1::PubsubMessage.new(
120
+ data: [data].pack("m").encode("ASCII-8BIT"),
121
+ attributes: attributes
122
+ )
123
+ end
124
+ )
125
+
126
+ backoff { publisher.publish publish_req }
127
+ end
128
+
129
+ ##
130
+ # Gets the details of a subscription.
131
+ def get_subscription subscription_name, options = {}
132
+ sub_req = Google::Pubsub::V1::GetSubscriptionRequest.new(
133
+ subscription: subscription_path(subscription_name, options)
134
+ )
135
+
136
+ backoff { subscriber.get_subscription sub_req }
137
+ end
138
+
139
+ ##
140
+ # Lists matching subscriptions by project and topic.
141
+ def list_topics_subscriptions topic, options = {}
142
+ list_params = { topic: topic_path(topic, options),
143
+ page_token: options[:token],
144
+ page_size: options[:max] }.delete_if { |_, v| v.nil? }
145
+ list_req = Google::Pubsub::V1::ListTopicSubscriptionsRequest.new \
146
+ list_params
147
+
148
+ backoff { publisher.list_topic_subscriptions list_req }
149
+ end
150
+
151
+ ##
152
+ # Lists matching subscriptions by project.
153
+ def list_subscriptions options = {}
154
+ list_params = { project: project_path(options),
155
+ page_token: options[:token],
156
+ page_size: options[:max] }.delete_if { |_, v| v.nil? }
157
+ list_req = Google::Pubsub::V1::ListSubscriptionsRequest.new list_params
158
+
159
+ backoff { subscriber.list_subscriptions list_req }
160
+ end
161
+
162
+ ##
163
+ # Creates a subscription on a given topic for a given subscriber.
164
+ def create_subscription topic, subscription_name, options = {}
165
+ sub_params = { name: subscription_path(subscription_name, options),
166
+ topic: topic_path(topic),
167
+ ack_deadline_seconds: options[:deadline]
168
+ }.delete_if { |_, v| v.nil? }
169
+ sub_req = Google::Pubsub::V1::Subscription.new sub_params
170
+ if options[:endpoint]
171
+ sub_req.push_config = Google::Pubsub::V1::PushConfig.new(
172
+ push_endpoint: options[:endpoint],
173
+ attributes: (options[:attributes] || {}).to_h)
174
+ end
175
+
176
+ backoff { subscriber.create_subscription sub_req }
177
+ end
178
+
179
+ ##
180
+ # Deletes an existing subscription.
181
+ # All pending messages in the subscription are immediately dropped.
182
+ def delete_subscription subscription
183
+ del_req = Google::Pubsub::V1::DeleteSubscriptionRequest.new(
184
+ subscription: subscription_path(subscription)
185
+ )
186
+
187
+ backoff { subscriber.delete_subscription del_req }
188
+ end
189
+
190
+ ##
191
+ # Pulls a single message from the server.
192
+ def pull subscription, options = {}
193
+ pull_req = Google::Pubsub::V1::PullRequest.new(
194
+ subscription: subscription_path(subscription, options),
195
+ return_immediately: !(!options.fetch(:immediate, true)),
196
+ max_messages: options.fetch(:max, 100).to_i
197
+ )
198
+
199
+ backoff { subscriber.pull pull_req }
200
+ end
201
+
202
+ ##
203
+ # Acknowledges receipt of a message.
204
+ def acknowledge subscription, *ack_ids
205
+ ack_req = Google::Pubsub::V1::AcknowledgeRequest.new(
206
+ subscription: subscription_path(subscription),
207
+ ack_ids: ack_ids
208
+ )
209
+
210
+ backoff { subscriber.acknowledge ack_req }
211
+ end
212
+
213
+ ##
214
+ # Modifies the PushConfig for a specified subscription.
215
+ def modify_push_config subscription, endpoint, attributes
216
+ # Convert attributes to strings to match the protobuf definition
217
+ attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
218
+
219
+ mpc_req = Google::Pubsub::V1::ModifyPushConfigRequest.new(
220
+ subscription: subscription_path(subscription),
221
+ push_config: Google::Pubsub::V1::PushConfig.new(
222
+ push_endpoint: endpoint,
223
+ attributes: attributes
224
+ )
225
+ )
226
+
227
+ backoff { subscriber.modify_push_config mpc_req }
228
+ end
229
+
230
+ ##
231
+ # Modifies the ack deadline for a specific message.
232
+ def modify_ack_deadline subscription, ids, deadline
233
+ mad_req = Google::Pubsub::V1::ModifyAckDeadlineRequest.new(
234
+ subscription: subscription_path(subscription),
235
+ ack_ids: Array(ids),
236
+ ack_deadline_seconds: deadline
237
+ )
238
+
239
+ backoff { subscriber.modify_ack_deadline mad_req }
240
+ end
241
+
242
+ def get_topic_policy topic_name, options = {}
243
+ get_req = Google::Iam::V1::GetIamPolicyRequest.new(
244
+ resource: topic_path(topic_name, options)
245
+ )
246
+
247
+ backoff { iam.get_iam_policy get_req }
248
+ end
249
+
250
+ def set_topic_policy topic_name, new_policy, options = {}
251
+ set_req = Google::Iam::V1::SetIamPolicyRequest.new(
252
+ resource: topic_path(topic_name, options),
253
+ policy: Google::Iam::V1::Policy.decode_json(JSON.dump(new_policy))
254
+ )
255
+
256
+ backoff { iam.set_iam_policy set_req }
257
+ end
258
+
259
+ def test_topic_permissions topic_name, permissions, options = {}
260
+ test_req = Google::Iam::V1::TestIamPermissionsRequest.new(
261
+ resource: topic_path(topic_name, options),
262
+ permissions: permissions
263
+ )
264
+
265
+ backoff { iam.test_iam_permissions test_req }
266
+ end
267
+
268
+ def get_subscription_policy subscription_name, options = {}
269
+ get_req = Google::Iam::V1::GetIamPolicyRequest.new(
270
+ resource: subscription_path(subscription_name, options)
271
+ )
272
+
273
+ backoff { iam.get_iam_policy get_req }
274
+ end
275
+
276
+ def set_subscription_policy subscription_name, new_policy, options = {}
277
+ set_req = Google::Iam::V1::SetIamPolicyRequest.new(
278
+ resource: subscription_path(subscription_name, options),
279
+ policy: Google::Iam::V1::Policy.decode_json(JSON.dump(new_policy))
280
+ )
281
+
282
+ backoff { iam.set_iam_policy set_req }
283
+ end
284
+
285
+ def test_subscription_permissions subscription_name,
286
+ permissions, options = {}
287
+ test_req = Google::Iam::V1::TestIamPermissionsRequest.new(
288
+ resource: subscription_path(subscription_name, options),
289
+ permissions: permissions
290
+ )
291
+
292
+ backoff { iam.test_iam_permissions test_req }
293
+ end
294
+
295
+ def project_path options = {}
296
+ project_name = options[:project] || project
297
+ "projects/#{project_name}"
298
+ end
299
+
300
+ def topic_path topic_name, options = {}
301
+ return topic_name if topic_name.to_s.include? "/"
302
+ "#{project_path(options)}/topics/#{topic_name}"
303
+ end
304
+
305
+ def subscription_path subscription_name, options = {}
306
+ return subscription_name if subscription_name.to_s.include? "/"
307
+ "#{project_path(options)}/subscriptions/#{subscription_name}"
308
+ end
309
+
310
+ def inspect
311
+ "#{self.class}(#{@project})"
312
+ end
313
+
314
+ protected
315
+
316
+ def backoff options = {}
317
+ Gcloud::Backoff.new(options).execute_grpc do
318
+ yield
319
+ end
320
+ end
321
+ end
322
+ end
323
+ end