google-cloud-pubsub 0.20.1 → 0.21.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.
- checksums.yaml +4 -4
- data/lib/google-cloud-pubsub.rb +13 -26
- data/lib/google/cloud/pubsub.rb +106 -86
- data/lib/google/cloud/pubsub/message.rb +2 -3
- data/lib/google/cloud/pubsub/policy.rb +13 -17
- data/lib/google/cloud/pubsub/project.rb +52 -73
- data/lib/google/cloud/pubsub/received_message.rb +6 -9
- data/lib/google/cloud/pubsub/service.rb +172 -152
- data/lib/google/cloud/pubsub/subscription.rb +41 -60
- data/lib/google/cloud/pubsub/subscription/list.rb +10 -15
- data/lib/google/cloud/pubsub/topic.rb +44 -64
- data/lib/google/cloud/pubsub/topic/list.rb +10 -15
- data/lib/google/cloud/pubsub/topic/publisher.rb +2 -3
- data/lib/google/cloud/pubsub/v1/publisher_api.rb +232 -11
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +15 -0
- data/lib/google/cloud/pubsub/v1/subscriber_api.rb +249 -17
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +15 -0
- data/lib/google/cloud/pubsub/version.rb +1 -1
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +6 -4
- metadata +36 -11
- data/lib/google/iam/v1/iam_policy.rb +0 -33
- data/lib/google/iam/v1/iam_policy_services.rb +0 -30
- data/lib/google/iam/v1/policy.rb +0 -25
@@ -29,10 +29,9 @@ module Google
|
|
29
29
|
# delayed.
|
30
30
|
#
|
31
31
|
# @example
|
32
|
-
# require "google/cloud"
|
32
|
+
# require "google/cloud/pubsub"
|
33
33
|
#
|
34
|
-
#
|
35
|
-
# pubsub = gcloud.pubsub
|
34
|
+
# pubsub = Google::Cloud::Pubsub.new
|
36
35
|
#
|
37
36
|
# # Publish a message
|
38
37
|
# topic = pubsub.topic "my-topic"
|
@@ -42,7 +42,7 @@ module Google
|
|
42
42
|
#
|
43
43
|
# @see https://cloud.google.com/iam/docs/managing-policies Managing
|
44
44
|
# policies
|
45
|
-
# @see https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#iampolicy
|
45
|
+
# @see https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#iampolicy
|
46
46
|
# google.iam.v1.IAMPolicy
|
47
47
|
#
|
48
48
|
# @attr [String] etag Used to verify whether the policy has changed since
|
@@ -52,14 +52,13 @@ module Google
|
|
52
52
|
# roles with an array of members. See [Understanding
|
53
53
|
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
54
54
|
# listing of primitive and curated roles.
|
55
|
-
# See [Binding](https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#binding)
|
55
|
+
# See [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
56
56
|
# for a listing of values and patterns for members.
|
57
57
|
#
|
58
58
|
# @example
|
59
|
-
# require "google/cloud"
|
59
|
+
# require "google/cloud/pubsub"
|
60
60
|
#
|
61
|
-
#
|
62
|
-
# pubsub = gcloud.pubsub
|
61
|
+
# pubsub = Google::Cloud::Pubsub.new
|
63
62
|
# topic = pubsub.topic "my-topic"
|
64
63
|
#
|
65
64
|
# policy = topic.policy # API call
|
@@ -85,7 +84,7 @@ module Google
|
|
85
84
|
# See [Understanding
|
86
85
|
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
87
86
|
# listing of primitive and curated roles.
|
88
|
-
# See [Binding](https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#binding)
|
87
|
+
# See [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
89
88
|
# for a listing of values and patterns for members.
|
90
89
|
#
|
91
90
|
# @param [String] role_name A Cloud IAM role, such as
|
@@ -94,10 +93,9 @@ module Google
|
|
94
93
|
# `"user:owner@example.com"`.
|
95
94
|
#
|
96
95
|
# @example
|
97
|
-
# require "google/cloud"
|
96
|
+
# require "google/cloud/pubsub"
|
98
97
|
#
|
99
|
-
#
|
100
|
-
# pubsub = gcloud.pubsub
|
98
|
+
# pubsub = Google::Cloud::Pubsub.new
|
101
99
|
# topic = pubsub.topic "my-topic"
|
102
100
|
#
|
103
101
|
# policy = topic.policy # API call
|
@@ -115,7 +113,7 @@ module Google
|
|
115
113
|
# policy. See [Understanding
|
116
114
|
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
117
115
|
# listing of primitive and curated roles. See
|
118
|
-
# [Binding](https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#binding)
|
116
|
+
# [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
119
117
|
# for a listing of values and patterns for members.
|
120
118
|
#
|
121
119
|
# @param [String] role_name A Cloud IAM role, such as
|
@@ -124,10 +122,9 @@ module Google
|
|
124
122
|
# `"user:owner@example.com"`.
|
125
123
|
#
|
126
124
|
# @example
|
127
|
-
# require "google/cloud"
|
125
|
+
# require "google/cloud/pubsub"
|
128
126
|
#
|
129
|
-
#
|
130
|
-
# pubsub = gcloud.pubsub
|
127
|
+
# pubsub = Google::Cloud::Pubsub.new
|
131
128
|
# topic = pubsub.topic "my-topic"
|
132
129
|
#
|
133
130
|
# policy = topic.policy # API call
|
@@ -146,16 +143,15 @@ module Google
|
|
146
143
|
# {#roles}. See [Understanding
|
147
144
|
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
148
145
|
# listing of primitive and curated roles. See
|
149
|
-
# [Binding](https://cloud.google.com/pubsub/reference/rpc/google.iam.v1#binding)
|
146
|
+
# [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
150
147
|
# for a listing of values and patterns for members.
|
151
148
|
#
|
152
149
|
# @return [Array<String>] The members strings, or an empty array.
|
153
150
|
#
|
154
151
|
# @example
|
155
|
-
# require "google/cloud"
|
152
|
+
# require "google/cloud/pubsub"
|
156
153
|
#
|
157
|
-
#
|
158
|
-
# pubsub = gcloud.pubsub
|
154
|
+
# pubsub = Google::Cloud::Pubsub.new
|
159
155
|
# topic = pubsub.topic "my-topic"
|
160
156
|
#
|
161
157
|
# policy = topic.policy
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
require "google/cloud/errors"
|
17
|
-
require "google/cloud/core/
|
17
|
+
require "google/cloud/core/environment"
|
18
18
|
require "google/cloud/pubsub/service"
|
19
19
|
require "google/cloud/pubsub/credentials"
|
20
20
|
require "google/cloud/pubsub/topic"
|
@@ -36,17 +36,16 @@ module Google
|
|
36
36
|
# See {Google::Cloud#pubsub}
|
37
37
|
#
|
38
38
|
# @example
|
39
|
-
# require "google/cloud"
|
39
|
+
# require "google/cloud/pubsub"
|
40
40
|
#
|
41
|
-
#
|
42
|
-
# pubsub = gcloud.pubsub
|
41
|
+
# pubsub = Google::Cloud::Pubsub.new
|
43
42
|
#
|
44
43
|
# topic = pubsub.topic "my-topic"
|
45
44
|
# topic.publish "task completed"
|
46
45
|
#
|
47
46
|
class Project
|
48
47
|
##
|
49
|
-
# @private The
|
48
|
+
# @private The Service object.
|
50
49
|
attr_accessor :service
|
51
50
|
|
52
51
|
##
|
@@ -58,11 +57,12 @@ module Google
|
|
58
57
|
# The Pub/Sub project connected to.
|
59
58
|
#
|
60
59
|
# @example
|
61
|
-
# require "google/cloud"
|
60
|
+
# require "google/cloud/pubsub"
|
62
61
|
#
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
62
|
+
# pubsub = Google::Cloud::Pubsub.new(
|
63
|
+
# project: "my-todo-project",
|
64
|
+
# keyfile: "/path/to/keyfile.json"
|
65
|
+
# )
|
66
66
|
#
|
67
67
|
# pubsub.project #=> "my-todo-project"
|
68
68
|
#
|
@@ -76,7 +76,7 @@ module Google
|
|
76
76
|
ENV["PUBSUB_PROJECT"] ||
|
77
77
|
ENV["GOOGLE_CLOUD_PROJECT"] ||
|
78
78
|
ENV["GCLOUD_PROJECT"] ||
|
79
|
-
Google::Cloud::Core::
|
79
|
+
Google::Cloud::Core::Environment.project_id
|
80
80
|
end
|
81
81
|
|
82
82
|
##
|
@@ -103,38 +103,33 @@ module Google
|
|
103
103
|
# `autocreate` is set to `true`.
|
104
104
|
#
|
105
105
|
# @example
|
106
|
-
# require "google/cloud"
|
106
|
+
# require "google/cloud/pubsub"
|
107
107
|
#
|
108
|
-
#
|
109
|
-
# pubsub = gcloud.pubsub
|
108
|
+
# pubsub = Google::Cloud::Pubsub.new
|
110
109
|
# topic = pubsub.topic "existing-topic"
|
111
110
|
#
|
112
111
|
# @example By default `nil` will be returned if topic does not exist.
|
113
|
-
# require "google/cloud"
|
112
|
+
# require "google/cloud/pubsub"
|
114
113
|
#
|
115
|
-
#
|
116
|
-
# pubsub = gcloud.pubsub
|
114
|
+
# pubsub = Google::Cloud::Pubsub.new
|
117
115
|
# topic = pubsub.topic "non-existing-topic" #=> nil
|
118
116
|
#
|
119
117
|
# @example With the `autocreate` option set to `true`.
|
120
|
-
# require "google/cloud"
|
118
|
+
# require "google/cloud/pubsub"
|
121
119
|
#
|
122
|
-
#
|
123
|
-
# pubsub = gcloud.pubsub
|
120
|
+
# pubsub = Google::Cloud::Pubsub.new
|
124
121
|
# topic = pubsub.topic "non-existing-topic", autocreate: true
|
125
122
|
#
|
126
123
|
# @example Create topic in a different project with the `project` flag.
|
127
|
-
# require "google/cloud"
|
124
|
+
# require "google/cloud/pubsub"
|
128
125
|
#
|
129
|
-
#
|
130
|
-
# pubsub = gcloud.pubsub
|
126
|
+
# pubsub = Google::Cloud::Pubsub.new
|
131
127
|
# topic = pubsub.topic "another-topic", project: "another-project"
|
132
128
|
#
|
133
129
|
# @example Skip the lookup against the service with `skip_lookup`:
|
134
|
-
# require "google/cloud"
|
130
|
+
# require "google/cloud/pubsub"
|
135
131
|
#
|
136
|
-
#
|
137
|
-
# pubsub = gcloud.pubsub
|
132
|
+
# pubsub = Google::Cloud::Pubsub.new
|
138
133
|
# topic = pubsub.topic "another-topic", skip_lookup: true
|
139
134
|
#
|
140
135
|
def topic topic_name, autocreate: nil, project: nil, skip_lookup: nil
|
@@ -158,10 +153,9 @@ module Google
|
|
158
153
|
# @return [Google::Cloud::Pubsub::Topic]
|
159
154
|
#
|
160
155
|
# @example
|
161
|
-
# require "google/cloud"
|
156
|
+
# require "google/cloud/pubsub"
|
162
157
|
#
|
163
|
-
#
|
164
|
-
# pubsub = gcloud.pubsub
|
158
|
+
# pubsub = Google::Cloud::Pubsub.new
|
165
159
|
# topic = pubsub.create_topic "my-topic"
|
166
160
|
#
|
167
161
|
def create_topic topic_name
|
@@ -183,10 +177,9 @@ module Google
|
|
183
177
|
# {Google::Cloud::Pubsub::Topic::List})
|
184
178
|
#
|
185
179
|
# @example
|
186
|
-
# require "google/cloud"
|
180
|
+
# require "google/cloud/pubsub"
|
187
181
|
#
|
188
|
-
#
|
189
|
-
# pubsub = gcloud.pubsub
|
182
|
+
# pubsub = Google::Cloud::Pubsub.new
|
190
183
|
#
|
191
184
|
# topics = pubsub.topics
|
192
185
|
# topics.each do |topic|
|
@@ -194,10 +187,9 @@ module Google
|
|
194
187
|
# end
|
195
188
|
#
|
196
189
|
# @example Retrieve all topics: (See {Topic::List#all})
|
197
|
-
# require "google/cloud"
|
190
|
+
# require "google/cloud/pubsub"
|
198
191
|
#
|
199
|
-
#
|
200
|
-
# pubsub = gcloud.pubsub
|
192
|
+
# pubsub = Google::Cloud::Pubsub.new
|
201
193
|
#
|
202
194
|
# topics = pubsub.topics
|
203
195
|
# topics.all do |topic|
|
@@ -235,35 +227,31 @@ module Google
|
|
235
227
|
# block.
|
236
228
|
#
|
237
229
|
# @example
|
238
|
-
# require "google/cloud"
|
230
|
+
# require "google/cloud/pubsub"
|
239
231
|
#
|
240
|
-
#
|
241
|
-
# pubsub = gcloud.pubsub
|
232
|
+
# pubsub = Google::Cloud::Pubsub.new
|
242
233
|
#
|
243
234
|
# msg = pubsub.publish "my-topic", "new-message"
|
244
235
|
#
|
245
236
|
# @example A message can be published using a File object:
|
246
|
-
# require "google/cloud"
|
237
|
+
# require "google/cloud/pubsub"
|
247
238
|
#
|
248
|
-
#
|
249
|
-
# pubsub = gcloud.pubsub
|
239
|
+
# pubsub = Google::Cloud::Pubsub.new
|
250
240
|
#
|
251
241
|
# msg = pubsub.publish "my-topic", File.open("message.txt")
|
252
242
|
#
|
253
243
|
# @example Additionally, a message can be published with attributes:
|
254
|
-
# require "google/cloud"
|
244
|
+
# require "google/cloud/pubsub"
|
255
245
|
#
|
256
|
-
#
|
257
|
-
# pubsub = gcloud.pubsub
|
246
|
+
# pubsub = Google::Cloud::Pubsub.new
|
258
247
|
#
|
259
248
|
# msg = pubsub.publish "my-topic", "new-message", foo: :bar,
|
260
249
|
# this: :that
|
261
250
|
#
|
262
251
|
# @example Multiple messages can be sent at the same time using a block:
|
263
|
-
# require "google/cloud"
|
252
|
+
# require "google/cloud/pubsub"
|
264
253
|
#
|
265
|
-
#
|
266
|
-
# pubsub = gcloud.pubsub
|
254
|
+
# pubsub = Google::Cloud::Pubsub.new
|
267
255
|
#
|
268
256
|
# msgs = pubsub.publish "my-topic" do |p|
|
269
257
|
# p.publish "new-message-1", foo: :bar
|
@@ -272,10 +260,9 @@ module Google
|
|
272
260
|
# end
|
273
261
|
#
|
274
262
|
# @example With `autocreate`:
|
275
|
-
# require "google/cloud"
|
263
|
+
# require "google/cloud/pubsub"
|
276
264
|
#
|
277
|
-
#
|
278
|
-
# pubsub = gcloud.pubsub
|
265
|
+
# pubsub = Google::Cloud::Pubsub.new
|
279
266
|
#
|
280
267
|
# msg = pubsub.publish "new-topic", "new-message", autocreate: true
|
281
268
|
#
|
@@ -316,38 +303,34 @@ module Google
|
|
316
303
|
# @return [Google::Cloud::Pubsub::Subscription]
|
317
304
|
#
|
318
305
|
# @example
|
319
|
-
# require "google/cloud"
|
306
|
+
# require "google/cloud/pubsub"
|
320
307
|
#
|
321
|
-
#
|
322
|
-
# pubsub = gcloud.pubsub
|
308
|
+
# pubsub = Google::Cloud::Pubsub.new
|
323
309
|
#
|
324
310
|
# sub = pubsub.subscribe "my-topic", "my-topic-sub"
|
325
311
|
# puts sub.name # => "my-topic-sub"
|
326
312
|
#
|
327
313
|
# @example The name is optional, and will be generated if not given.
|
328
|
-
# require "google/cloud"
|
314
|
+
# require "google/cloud/pubsub"
|
329
315
|
#
|
330
|
-
#
|
331
|
-
# pubsub = gcloud.pubsub
|
316
|
+
# pubsub = Google::Cloud::Pubsub.new
|
332
317
|
#
|
333
318
|
# sub = pubsub.subscribe "my-topic"
|
334
319
|
# puts sub.name # => "generated-sub-name"
|
335
320
|
#
|
336
321
|
# @example Wait 2 minutes for acknowledgement and push all to endpoint:
|
337
|
-
# require "google/cloud"
|
322
|
+
# require "google/cloud/pubsub"
|
338
323
|
#
|
339
|
-
#
|
340
|
-
# pubsub = gcloud.pubsub
|
324
|
+
# pubsub = Google::Cloud::Pubsub.new
|
341
325
|
#
|
342
326
|
# sub = pubsub.subscribe "my-topic", "my-topic-sub",
|
343
327
|
# deadline: 120,
|
344
328
|
# endpoint: "https://example.com/push"
|
345
329
|
#
|
346
330
|
# @example With `autocreate`:
|
347
|
-
# require "google/cloud"
|
331
|
+
# require "google/cloud/pubsub"
|
348
332
|
#
|
349
|
-
#
|
350
|
-
# pubsub = gcloud.pubsub
|
333
|
+
# pubsub = Google::Cloud::Pubsub.new
|
351
334
|
#
|
352
335
|
# sub = pubsub.subscribe "new-topic", "new-topic-sub",
|
353
336
|
# autocreate: true
|
@@ -387,19 +370,17 @@ module Google
|
|
387
370
|
# the subscription does not exist
|
388
371
|
#
|
389
372
|
# @example
|
390
|
-
# require "google/cloud"
|
373
|
+
# require "google/cloud/pubsub"
|
391
374
|
#
|
392
|
-
#
|
393
|
-
# pubsub = gcloud.pubsub
|
375
|
+
# pubsub = Google::Cloud::Pubsub.new
|
394
376
|
#
|
395
377
|
# subscription = pubsub.subscription "my-sub"
|
396
378
|
# puts subscription.name
|
397
379
|
#
|
398
380
|
# @example Skip the lookup against the service with `skip_lookup`:
|
399
|
-
# require "google/cloud"
|
381
|
+
# require "google/cloud/pubsub"
|
400
382
|
#
|
401
|
-
#
|
402
|
-
# pubsub = gcloud.pubsub
|
383
|
+
# pubsub = Google::Cloud::Pubsub.new
|
403
384
|
#
|
404
385
|
# # No API call is made to retrieve the subscription information.
|
405
386
|
# subscription = pubsub.subscription "my-sub", skip_lookup: true
|
@@ -430,10 +411,9 @@ module Google
|
|
430
411
|
# {Google::Cloud::Pubsub::Subscription::List})
|
431
412
|
#
|
432
413
|
# @example
|
433
|
-
# require "google/cloud"
|
414
|
+
# require "google/cloud/pubsub"
|
434
415
|
#
|
435
|
-
#
|
436
|
-
# pubsub = gcloud.pubsub
|
416
|
+
# pubsub = Google::Cloud::Pubsub.new
|
437
417
|
#
|
438
418
|
# subscriptions = pubsub.subscriptions
|
439
419
|
# subscriptions.each do |subscription|
|
@@ -441,10 +421,9 @@ module Google
|
|
441
421
|
# end
|
442
422
|
#
|
443
423
|
# @example Retrieve all subscriptions: (See {Subscription::List#all})
|
444
|
-
# require "google/cloud"
|
424
|
+
# require "google/cloud/pubsub"
|
445
425
|
#
|
446
|
-
#
|
447
|
-
# pubsub = gcloud.pubsub
|
426
|
+
# pubsub = Google::Cloud::Pubsub.new
|
448
427
|
#
|
449
428
|
# subscriptions = pubsub.subscriptions
|
450
429
|
# subscriptions.all do |subscription|
|
@@ -25,10 +25,9 @@ module Google
|
|
25
25
|
# Represents a Pub/Sub {Message} that can be acknowledged or delayed.
|
26
26
|
#
|
27
27
|
# @example
|
28
|
-
# require "google/cloud"
|
28
|
+
# require "google/cloud/pubsub"
|
29
29
|
#
|
30
|
-
#
|
31
|
-
# pubsub = gcloud.pubsub
|
30
|
+
# pubsub = Google::Cloud::Pubsub.new
|
32
31
|
#
|
33
32
|
# sub = pubsub.subscription "my-topic-sub"
|
34
33
|
# received_message = sub.pull.first
|
@@ -90,10 +89,9 @@ module Google
|
|
90
89
|
# Acknowledges receipt of the message.
|
91
90
|
#
|
92
91
|
# @example
|
93
|
-
# require "google/cloud"
|
92
|
+
# require "google/cloud/pubsub"
|
94
93
|
#
|
95
|
-
#
|
96
|
-
# pubsub = gcloud.pubsub
|
94
|
+
# pubsub = Google::Cloud::Pubsub.new
|
97
95
|
#
|
98
96
|
# sub = pubsub.subscription "my-topic-sub"
|
99
97
|
# received_message = sub.pull.first
|
@@ -121,10 +119,9 @@ module Google
|
|
121
119
|
# the message available for another pull request.
|
122
120
|
#
|
123
121
|
# @example
|
124
|
-
# require "google/cloud"
|
122
|
+
# require "google/cloud/pubsub"
|
125
123
|
#
|
126
|
-
#
|
127
|
-
# pubsub = gcloud.pubsub
|
124
|
+
# pubsub = Google::Cloud::Pubsub.new
|
128
125
|
#
|
129
126
|
# sub = pubsub.subscription "my-topic-sub"
|
130
127
|
# received_message = sub.pull.first
|
@@ -14,34 +14,39 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
require "google/cloud/errors"
|
17
|
-
require "google/cloud/
|
18
|
-
require "google/pubsub/
|
19
|
-
require "google/
|
20
|
-
require "google/
|
21
|
-
require "json"
|
17
|
+
require "google/cloud/pubsub/credentials"
|
18
|
+
require "google/cloud/pubsub/version"
|
19
|
+
require "google/cloud/pubsub/v1"
|
20
|
+
require "google/gax/errors"
|
22
21
|
|
23
22
|
module Google
|
24
23
|
module Cloud
|
25
24
|
module Pubsub
|
26
25
|
##
|
27
|
-
# @private Represents the
|
26
|
+
# @private Represents the GAX Pub/Sub service, including all the API
|
28
27
|
# methods.
|
29
28
|
class Service
|
30
|
-
attr_accessor :project, :credentials, :host, :
|
29
|
+
attr_accessor :project, :credentials, :host, :timeout, :client_config
|
31
30
|
|
32
31
|
##
|
33
32
|
# Creates a new Service instance.
|
34
|
-
def initialize project, credentials, host: nil,
|
35
|
-
|
33
|
+
def initialize project, credentials, host: nil, timeout: nil,
|
34
|
+
client_config: nil
|
36
35
|
@project = project
|
37
36
|
@credentials = credentials
|
38
37
|
@host = host || "pubsub.googleapis.com"
|
39
|
-
@retries = retries
|
40
38
|
@timeout = timeout
|
39
|
+
@client_config = client_config || {}
|
41
40
|
end
|
42
41
|
|
43
|
-
def
|
42
|
+
def channel
|
43
|
+
require "grpc"
|
44
|
+
GRPC::Core::Channel.new host, nil, chan_creds
|
45
|
+
end
|
46
|
+
|
47
|
+
def chan_creds
|
44
48
|
return credentials if insecure?
|
49
|
+
require "grpc"
|
45
50
|
GRPC::Core::ChannelCredentials.new.compose \
|
46
51
|
GRPC::Core::CallCredentials.new credentials.client.updater_proc
|
47
52
|
end
|
@@ -49,10 +54,13 @@ module Google
|
|
49
54
|
def subscriber
|
50
55
|
return mocked_subscriber if mocked_subscriber
|
51
56
|
@subscriber ||= begin
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
57
|
+
V1::SubscriberApi.new(
|
58
|
+
service_path: host,
|
59
|
+
channel: channel,
|
60
|
+
timeout: timeout,
|
61
|
+
client_config: client_config,
|
62
|
+
app_name: "gcloud-ruby",
|
63
|
+
app_version: Google::Cloud::Pubsub::VERSION)
|
56
64
|
end
|
57
65
|
end
|
58
66
|
attr_accessor :mocked_subscriber
|
@@ -60,25 +68,16 @@ module Google
|
|
60
68
|
def publisher
|
61
69
|
return mocked_publisher if mocked_publisher
|
62
70
|
@publisher ||= begin
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
V1::PublisherApi.new(
|
72
|
+
service_path: host,
|
73
|
+
channel: channel,
|
74
|
+
timeout: timeout,
|
75
|
+
app_name: "gcloud-ruby",
|
76
|
+
app_version: Google::Cloud::Pubsub::VERSION)
|
67
77
|
end
|
68
78
|
end
|
69
79
|
attr_accessor :mocked_publisher
|
70
80
|
|
71
|
-
def iam
|
72
|
-
return mocked_iam if mocked_iam
|
73
|
-
@iam ||= begin
|
74
|
-
require "google/iam/v1/iam_policy_services"
|
75
|
-
|
76
|
-
Google::Iam::V1::IAMPolicy::Stub.new(
|
77
|
-
host, creds, timeout: timeout)
|
78
|
-
end
|
79
|
-
end
|
80
|
-
attr_accessor :mocked_iam
|
81
|
-
|
82
81
|
def insecure?
|
83
82
|
credentials == :this_channel_is_insecure
|
84
83
|
end
|
@@ -90,33 +89,37 @@ module Google
|
|
90
89
|
# If other attributes are added in the future,
|
91
90
|
# they will be returned here.
|
92
91
|
def get_topic topic_name, options = {}
|
93
|
-
|
94
|
-
|
92
|
+
execute do
|
93
|
+
publisher.get_topic topic_path(topic_name, options),
|
94
|
+
options: default_options
|
95
95
|
end
|
96
|
-
|
97
|
-
execute { publisher.get_topic topic_req }
|
98
96
|
end
|
99
97
|
|
100
98
|
##
|
101
99
|
# Lists matching topics.
|
102
100
|
def list_topics options = {}
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
101
|
+
call_options = default_options
|
102
|
+
if (token = options[:token])
|
103
|
+
call_options = Google::Gax::CallOptions.new kwargs: default_headers,
|
104
|
+
page_token: token
|
107
105
|
end
|
108
106
|
|
109
|
-
execute
|
107
|
+
execute do
|
108
|
+
paged_enum = publisher.list_topics project_path(options),
|
109
|
+
page_size: options[:max],
|
110
|
+
options: call_options
|
111
|
+
|
112
|
+
paged_enum.page.response
|
113
|
+
end
|
110
114
|
end
|
111
115
|
|
112
116
|
##
|
113
117
|
# Creates the given topic with the given name.
|
114
118
|
def create_topic topic_name, options = {}
|
115
|
-
|
116
|
-
|
119
|
+
execute do
|
120
|
+
publisher.create_topic topic_path(topic_name, options),
|
121
|
+
options: default_options
|
117
122
|
end
|
118
|
-
|
119
|
-
execute { publisher.create_topic topic_req }
|
120
123
|
end
|
121
124
|
|
122
125
|
##
|
@@ -125,11 +128,10 @@ module Google
|
|
125
128
|
# exist. After a topic is deleted, a new topic may be created with the
|
126
129
|
# same name.
|
127
130
|
def delete_topic topic_name
|
128
|
-
|
129
|
-
|
131
|
+
execute do
|
132
|
+
publisher.delete_topic topic_path(topic_name),
|
133
|
+
options: default_options
|
130
134
|
end
|
131
|
-
|
132
|
-
execute { publisher.delete_topic topic_req }
|
133
135
|
end
|
134
136
|
|
135
137
|
##
|
@@ -138,184 +140,195 @@ module Google
|
|
138
140
|
# The messages parameter is an array of arrays.
|
139
141
|
# The first element is the data, second is attributes hash.
|
140
142
|
def publish topic, messages
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
data: data, attributes: attributes)
|
146
|
-
end
|
147
|
-
)
|
143
|
+
messages = messages.map do |data, attributes|
|
144
|
+
Google::Pubsub::V1::PubsubMessage.new(
|
145
|
+
data: data, attributes: attributes)
|
146
|
+
end
|
148
147
|
|
149
|
-
execute
|
148
|
+
execute do
|
149
|
+
publisher.publish topic_path(topic), messages,
|
150
|
+
options: default_options
|
151
|
+
end
|
150
152
|
end
|
151
153
|
|
152
154
|
##
|
153
155
|
# Gets the details of a subscription.
|
154
156
|
def get_subscription subscription_name, options = {}
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
execute { subscriber.get_subscription sub_req }
|
157
|
+
subscription = subscription_path(subscription_name, options)
|
158
|
+
execute do
|
159
|
+
subscriber.get_subscription subscription, options: default_options
|
160
|
+
end
|
160
161
|
end
|
161
162
|
|
162
163
|
##
|
163
164
|
# Lists matching subscriptions by project and topic.
|
164
165
|
def list_topics_subscriptions topic, options = {}
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
166
|
+
call_options = default_options
|
167
|
+
if (token = options[:token])
|
168
|
+
call_options = Google::Gax::CallOptions.new kwargs: default_headers,
|
169
|
+
page_token: token
|
170
|
+
end
|
171
|
+
|
172
|
+
execute do
|
173
|
+
paged_enum = publisher.list_topic_subscriptions \
|
174
|
+
topic_path(topic, options),
|
175
|
+
page_size: options[:max],
|
176
|
+
options: call_options
|
171
177
|
|
172
|
-
|
178
|
+
paged_enum.page.response
|
179
|
+
end
|
173
180
|
end
|
174
181
|
|
175
182
|
##
|
176
183
|
# Lists matching subscriptions by project.
|
177
184
|
def list_subscriptions options = {}
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
185
|
+
call_options = default_options
|
186
|
+
if (token = options[:token])
|
187
|
+
call_options = Google::Gax::CallOptions.new kwargs: default_headers,
|
188
|
+
page_token: token
|
189
|
+
end
|
190
|
+
|
191
|
+
execute do
|
192
|
+
paged_enum = subscriber.list_subscriptions project_path(options),
|
193
|
+
page_size: options[:max],
|
194
|
+
options: call_options
|
184
195
|
|
185
|
-
|
196
|
+
paged_enum.page.response
|
197
|
+
end
|
186
198
|
end
|
187
199
|
|
188
200
|
##
|
189
201
|
# Creates a subscription on a given topic for a given subscriber.
|
190
202
|
def create_subscription topic, subscription_name, options = {}
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
203
|
+
name = subscription_path(subscription_name, options)
|
204
|
+
topic = topic_path(topic)
|
205
|
+
push_config = if options[:endpoint]
|
206
|
+
Google::Pubsub::V1::PushConfig.new \
|
207
|
+
push_endpoint: options[:endpoint],
|
208
|
+
attributes: (options[:attributes] || {}).to_h
|
209
|
+
end
|
210
|
+
deadline = options[:deadline]
|
211
|
+
|
212
|
+
execute do
|
213
|
+
subscriber.create_subscription name,
|
214
|
+
topic,
|
215
|
+
push_config: push_config,
|
216
|
+
ack_deadline_seconds: deadline,
|
217
|
+
options: default_options
|
200
218
|
end
|
201
|
-
|
202
|
-
execute { subscriber.create_subscription sub_req }
|
203
219
|
end
|
204
220
|
|
205
221
|
##
|
206
222
|
# Deletes an existing subscription.
|
207
223
|
# All pending messages in the subscription are immediately dropped.
|
208
224
|
def delete_subscription subscription
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
execute { subscriber.delete_subscription del_req }
|
225
|
+
execute do
|
226
|
+
subscriber.delete_subscription subscription_path(subscription),
|
227
|
+
options: default_options
|
228
|
+
end
|
214
229
|
end
|
215
230
|
|
216
231
|
##
|
217
232
|
# Pulls a single message from the server.
|
218
233
|
def pull subscription, options = {}
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
234
|
+
subscription = subscription_path(subscription, options)
|
235
|
+
max_messages = options.fetch(:max, 100).to_i
|
236
|
+
return_immediately = !(!options.fetch(:immediate, true))
|
237
|
+
|
238
|
+
execute do
|
239
|
+
subscriber.pull subscription,
|
240
|
+
max_messages,
|
241
|
+
return_immediately: return_immediately,
|
242
|
+
options: default_options
|
243
|
+
end
|
226
244
|
end
|
227
245
|
|
228
246
|
##
|
229
247
|
# Acknowledges receipt of a message.
|
230
248
|
def acknowledge subscription, *ack_ids
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
execute { subscriber.acknowledge ack_req }
|
249
|
+
execute do
|
250
|
+
subscriber.acknowledge subscription_path(subscription), ack_ids,
|
251
|
+
options: default_options
|
252
|
+
end
|
237
253
|
end
|
238
254
|
|
239
255
|
##
|
240
256
|
# Modifies the PushConfig for a specified subscription.
|
241
257
|
def modify_push_config subscription, endpoint, attributes
|
258
|
+
subscription = subscription_path(subscription)
|
242
259
|
# Convert attributes to strings to match the protobuf definition
|
243
260
|
attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
push_config: Google::Pubsub::V1::PushConfig.new(
|
248
|
-
push_endpoint: endpoint,
|
249
|
-
attributes: attributes
|
250
|
-
)
|
261
|
+
push_config = Google::Pubsub::V1::PushConfig.new(
|
262
|
+
push_endpoint: endpoint,
|
263
|
+
attributes: attributes
|
251
264
|
)
|
252
265
|
|
253
|
-
execute
|
266
|
+
execute do
|
267
|
+
subscriber.modify_push_config subscription, push_config,
|
268
|
+
options: default_options
|
269
|
+
end
|
254
270
|
end
|
255
271
|
|
256
272
|
##
|
257
273
|
# Modifies the ack deadline for a specific message.
|
258
274
|
def modify_ack_deadline subscription, ids, deadline
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
execute { subscriber.modify_ack_deadline mad_req }
|
275
|
+
execute do
|
276
|
+
subscriber.modify_ack_deadline subscription_path(subscription),
|
277
|
+
Array(ids),
|
278
|
+
deadline, options: default_options
|
279
|
+
end
|
266
280
|
end
|
267
281
|
|
268
282
|
def get_topic_policy topic_name, options = {}
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
execute { iam.get_iam_policy get_req }
|
283
|
+
execute do
|
284
|
+
publisher.get_iam_policy topic_path(topic_name, options),
|
285
|
+
options: default_options
|
286
|
+
end
|
274
287
|
end
|
275
288
|
|
276
289
|
def set_topic_policy topic_name, new_policy, options = {}
|
277
|
-
|
278
|
-
resource: topic_path(topic_name, options),
|
279
|
-
policy: new_policy
|
280
|
-
)
|
290
|
+
resource = topic_path(topic_name, options)
|
281
291
|
|
282
|
-
execute
|
292
|
+
execute do
|
293
|
+
publisher.set_iam_policy resource, new_policy,
|
294
|
+
options: default_options
|
295
|
+
end
|
283
296
|
end
|
284
297
|
|
285
298
|
def test_topic_permissions topic_name, permissions, options = {}
|
286
|
-
|
287
|
-
resource: topic_path(topic_name, options),
|
288
|
-
permissions: permissions
|
289
|
-
)
|
299
|
+
resource = topic_path(topic_name, options)
|
290
300
|
|
291
|
-
execute
|
301
|
+
execute do
|
302
|
+
publisher.test_iam_permissions resource, permissions,
|
303
|
+
options: default_options
|
304
|
+
end
|
292
305
|
end
|
293
306
|
|
294
307
|
def get_subscription_policy subscription_name, options = {}
|
295
|
-
|
296
|
-
resource: subscription_path(subscription_name, options)
|
297
|
-
)
|
308
|
+
resource = subscription_path(subscription_name, options)
|
298
309
|
|
299
|
-
execute
|
310
|
+
execute do
|
311
|
+
subscriber.get_iam_policy resource, options: default_options
|
312
|
+
end
|
300
313
|
end
|
301
314
|
|
302
315
|
def set_subscription_policy subscription_name, new_policy, options = {}
|
303
|
-
|
304
|
-
resource: subscription_path(subscription_name, options),
|
305
|
-
policy: new_policy
|
306
|
-
)
|
316
|
+
resource = subscription_path(subscription_name, options)
|
307
317
|
|
308
|
-
execute
|
318
|
+
execute do
|
319
|
+
subscriber.set_iam_policy resource, new_policy,
|
320
|
+
options: default_options
|
321
|
+
end
|
309
322
|
end
|
310
323
|
|
311
324
|
def test_subscription_permissions subscription_name,
|
312
325
|
permissions, options = {}
|
313
|
-
|
314
|
-
resource: subscription_path(subscription_name, options),
|
315
|
-
permissions: permissions
|
316
|
-
)
|
326
|
+
resource = subscription_path(subscription_name, options)
|
317
327
|
|
318
|
-
execute
|
328
|
+
execute do
|
329
|
+
subscriber.test_iam_permissions resource, permissions,
|
330
|
+
options: default_options
|
331
|
+
end
|
319
332
|
end
|
320
333
|
|
321
334
|
def project_path options = {}
|
@@ -339,12 +352,19 @@ module Google
|
|
339
352
|
|
340
353
|
protected
|
341
354
|
|
355
|
+
def default_headers
|
356
|
+
{ "google-cloud-resource-prefix" => "projects/#{@project}" }
|
357
|
+
end
|
358
|
+
|
359
|
+
def default_options
|
360
|
+
Google::Gax::CallOptions.new kwargs: default_headers
|
361
|
+
end
|
362
|
+
|
342
363
|
def execute
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
raise Error.from_error(e)
|
364
|
+
yield
|
365
|
+
rescue Google::Gax::GaxError => e
|
366
|
+
# GaxError wraps BadStatus, but exposes it as #cause
|
367
|
+
raise Google::Cloud::Error.from_error(e.cause)
|
348
368
|
end
|
349
369
|
end
|
350
370
|
end
|