google-cloud-pubsub 0.33.2 → 0.34.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +4 -4
  3. data/CHANGELOG.md +45 -0
  4. data/EMULATOR.md +2 -2
  5. data/OVERVIEW.md +81 -43
  6. data/lib/google-cloud-pubsub.rb +10 -7
  7. data/lib/google/cloud/pubsub.rb +38 -21
  8. data/lib/google/cloud/pubsub/async_publisher.rb +8 -6
  9. data/lib/google/cloud/pubsub/batch_publisher.rb +7 -5
  10. data/lib/google/cloud/pubsub/convert.rb +5 -3
  11. data/lib/google/cloud/pubsub/credentials.rb +6 -4
  12. data/lib/google/cloud/pubsub/message.rb +9 -6
  13. data/lib/google/cloud/pubsub/policy.rb +12 -10
  14. data/lib/google/cloud/pubsub/project.rb +30 -28
  15. data/lib/google/cloud/pubsub/publish_result.rb +3 -1
  16. data/lib/google/cloud/pubsub/received_message.rb +11 -10
  17. data/lib/google/cloud/pubsub/service.rb +47 -37
  18. data/lib/google/cloud/pubsub/snapshot.rb +11 -9
  19. data/lib/google/cloud/pubsub/snapshot/list.rb +10 -8
  20. data/lib/google/cloud/pubsub/subscriber.rb +32 -6
  21. data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +3 -1
  22. data/lib/google/cloud/pubsub/subscriber/inventory.rb +4 -2
  23. data/lib/google/cloud/pubsub/subscriber/stream.rb +23 -43
  24. data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +221 -0
  25. data/lib/google/cloud/pubsub/subscription.rb +157 -80
  26. data/lib/google/cloud/pubsub/subscription/list.rb +12 -10
  27. data/lib/google/cloud/pubsub/topic.rb +79 -51
  28. data/lib/google/cloud/pubsub/topic/list.rb +10 -8
  29. data/lib/google/cloud/pubsub/v1/credentials.rb +4 -2
  30. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +1 -43
  31. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +1 -108
  32. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +1 -1
  33. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +1 -1
  34. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +1 -1
  35. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +1 -1
  36. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +107 -61
  37. data/lib/google/cloud/pubsub/v1/publisher_client.rb +58 -55
  38. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -4
  39. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +177 -128
  40. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -4
  41. data/lib/google/cloud/pubsub/version.rb +4 -2
  42. data/lib/google/pubsub/v1/pubsub_pb.rb +48 -40
  43. data/lib/google/pubsub/v1/pubsub_services_pb.rb +201 -161
  44. metadata +6 -7
  45. data/lib/google/cloud/pubsub/subscriber/async_stream_pusher.rb +0 -223
  46. data/lib/google/cloud/pubsub/subscriber/async_unary_pusher.rb +0 -271
@@ -17,7 +17,7 @@ require "delegate"
17
17
 
18
18
  module Google
19
19
  module Cloud
20
- module Pubsub
20
+ module PubSub
21
21
  class Subscription
22
22
  ##
23
23
  # Subscription::List is a special case Array with additional values.
@@ -25,7 +25,7 @@ module Google
25
25
  ##
26
26
  # If not empty, indicates that there are more subscriptions
27
27
  # that match the request and this value should be passed to
28
- # the next {Google::Cloud::Pubsub::Topic#subscriptions} to continue.
28
+ # the next {Google::Cloud::PubSub::Topic#subscriptions} to continue.
29
29
  attr_accessor :token
30
30
 
31
31
  ##
@@ -46,7 +46,7 @@ module Google
46
46
  # @example
47
47
  # require "google/cloud/pubsub"
48
48
  #
49
- # pubsub = Google::Cloud::Pubsub.new
49
+ # pubsub = Google::Cloud::PubSub.new
50
50
  #
51
51
  # subscriptions = pubsub.subscriptions
52
52
  # if subscriptions.next?
@@ -65,7 +65,7 @@ module Google
65
65
  # @example
66
66
  # require "google/cloud/pubsub"
67
67
  #
68
- # pubsub = Google::Cloud::Pubsub.new
68
+ # pubsub = Google::Cloud::PubSub.new
69
69
  #
70
70
  # subscriptions = pubsub.subscriptions
71
71
  # if subscriptions.next?
@@ -103,7 +103,7 @@ module Google
103
103
  # @example Iterating each subscription by passing a block:
104
104
  # require "google/cloud/pubsub"
105
105
  #
106
- # pubsub = Google::Cloud::Pubsub.new
106
+ # pubsub = Google::Cloud::PubSub.new
107
107
  #
108
108
  # subscriptions = pubsub.subscriptions
109
109
  # subscriptions.all do |subscription|
@@ -113,7 +113,7 @@ module Google
113
113
  # @example Using the enumerator by not passing a block:
114
114
  # require "google/cloud/pubsub"
115
115
  #
116
- # pubsub = Google::Cloud::Pubsub.new
116
+ # pubsub = Google::Cloud::PubSub.new
117
117
  #
118
118
  # subscriptions = pubsub.subscriptions
119
119
  # all_names = subscriptions.all.map do |subscription|
@@ -123,7 +123,7 @@ module Google
123
123
  # @example Limit the number of API calls made:
124
124
  # require "google/cloud/pubsub"
125
125
  #
126
- # pubsub = Google::Cloud::Pubsub.new
126
+ # pubsub = Google::Cloud::PubSub.new
127
127
  #
128
128
  # subscriptions = pubsub.subscriptions
129
129
  # subscriptions.all(request_limit: 10) do |subscription|
@@ -149,7 +149,7 @@ module Google
149
149
 
150
150
  ##
151
151
  # @private New Subscriptions::List from a
152
- # Google::Pubsub::V1::ListSubscriptionsRequest object.
152
+ # Google::Cloud::PubSub::V1::ListSubscriptionsRequest object.
153
153
  def self.from_grpc grpc_list, service, max = nil
154
154
  subs = new(Array(grpc_list.subscriptions).map do |grpc|
155
155
  Subscription.from_grpc grpc, service
@@ -164,10 +164,10 @@ module Google
164
164
 
165
165
  ##
166
166
  # @private New Subscriptions::List from a
167
- # Google::Pubsub::V1::ListTopicSubscriptionsResponse object.
167
+ # Google::Cloud::PubSub::V1::ListTopicSubscriptionsResponse object.
168
168
  def self.from_topic_grpc grpc_list, service, topic, max = nil
169
169
  subs = new(Array(grpc_list.subscriptions).map do |grpc|
170
- Subscription.new_lazy grpc, service
170
+ Subscription.from_name grpc, service
171
171
  end)
172
172
  token = grpc_list.next_page_token
173
173
  token = nil if token == "".freeze
@@ -201,5 +201,7 @@ module Google
201
201
  end
202
202
  end
203
203
  end
204
+
205
+ Pubsub = PubSub unless const_defined? :Pubsub
204
206
  end
205
207
  end
@@ -22,7 +22,7 @@ require "google/cloud/pubsub/policy"
22
22
 
23
23
  module Google
24
24
  module Cloud
25
- module Pubsub
25
+ module PubSub
26
26
  ##
27
27
  # # Topic
28
28
  #
@@ -33,7 +33,7 @@ module Google
33
33
  # @example
34
34
  # require "google/cloud/pubsub"
35
35
  #
36
- # pubsub = Google::Cloud::Pubsub.new
36
+ # pubsub = Google::Cloud::PubSub.new
37
37
  #
38
38
  # topic = pubsub.topic "my-topic"
39
39
  # topic.publish "task completed"
@@ -44,7 +44,7 @@ module Google
44
44
  attr_accessor :service
45
45
 
46
46
  ##
47
- # @private The Google::Pubsub::V1::Topic object.
47
+ # @private The Google::Cloud::PubSub::V1::Topic object.
48
48
  attr_accessor :grpc
49
49
 
50
50
  ##
@@ -52,7 +52,7 @@ module Google
52
52
  def initialize
53
53
  @service = nil
54
54
  @grpc = nil
55
- @lazy = nil
55
+ @resource_name = nil
56
56
  @exists = nil
57
57
  @async_opts = {}
58
58
  end
@@ -66,7 +66,7 @@ module Google
66
66
  # @example
67
67
  # require "google/cloud/pubsub"
68
68
  #
69
- # pubsub = Google::Cloud::Pubsub.new
69
+ # pubsub = Google::Cloud::PubSub.new
70
70
  #
71
71
  # topic = pubsub.topic "my-topic"
72
72
  # topic.publish_async "task completed" do |result|
@@ -90,6 +90,7 @@ module Google
90
90
  # @return [String]
91
91
  #
92
92
  def name
93
+ return @resource_name if reference?
93
94
  @grpc.name
94
95
  end
95
96
 
@@ -101,9 +102,13 @@ module Google
101
102
  # The returned hash is frozen and changes are not allowed. Use
102
103
  # {#labels=} to update the labels for this topic.
103
104
  #
105
+ # Makes an API call to retrieve the labels values when called on a
106
+ # reference object. See {#reference?}.
107
+ #
104
108
  # @return [Hash] The frozen labels hash.
105
109
  #
106
110
  def labels
111
+ ensure_grpc!
107
112
  @grpc.labels.to_h.freeze
108
113
  end
109
114
 
@@ -121,12 +126,10 @@ module Google
121
126
  #
122
127
  def labels= new_labels
123
128
  raise ArgumentError, "Value must be a Hash" if new_labels.nil?
124
- labels_map = Google::Protobuf::Map.new(:string, :string)
125
- Hash(new_labels).each { |k, v| labels_map[String(k)] = String(v) }
126
- update_grpc = @grpc.dup
127
- update_grpc.labels = labels_map
129
+ update_grpc = Google::Cloud::PubSub::V1::Topic.new \
130
+ name: name, labels: new_labels
128
131
  @grpc = service.update_topic update_grpc, :labels
129
- @lazy = nil
132
+ @resource_name = nil
130
133
  end
131
134
 
132
135
  ##
@@ -137,7 +140,7 @@ module Google
137
140
  # @example
138
141
  # require "google/cloud/pubsub"
139
142
  #
140
- # pubsub = Google::Cloud::Pubsub.new
143
+ # pubsub = Google::Cloud::PubSub.new
141
144
  #
142
145
  # topic = pubsub.topic "my-topic"
143
146
  # topic.delete
@@ -181,12 +184,12 @@ module Google
181
184
  # label in the list must have a different key. See [Creating and
182
185
  # Managing Labels](https://cloud.google.com/pubsub/docs/labels).
183
186
  #
184
- # @return [Google::Cloud::Pubsub::Subscription]
187
+ # @return [Google::Cloud::PubSub::Subscription]
185
188
  #
186
189
  # @example
187
190
  # require "google/cloud/pubsub"
188
191
  #
189
- # pubsub = Google::Cloud::Pubsub.new
192
+ # pubsub = Google::Cloud::PubSub.new
190
193
  #
191
194
  # topic = pubsub.topic "my-topic"
192
195
  # sub = topic.subscribe "my-topic-sub"
@@ -195,7 +198,7 @@ module Google
195
198
  # @example Wait 2 minutes for acknowledgement and push all to endpoint:
196
199
  # require "google/cloud/pubsub"
197
200
  #
198
- # pubsub = Google::Cloud::Pubsub.new
201
+ # pubsub = Google::Cloud::PubSub.new
199
202
  #
200
203
  # topic = pubsub.topic "my-topic"
201
204
  # sub = topic.subscribe "my-topic-sub",
@@ -222,13 +225,13 @@ module Google
222
225
  # service. Calls made on this object will raise errors if the service
223
226
  # resource does not exist. Default is `false`.
224
227
  #
225
- # @return [Google::Cloud::Pubsub::Subscription, nil] Returns `nil` if
228
+ # @return [Google::Cloud::PubSub::Subscription, nil] Returns `nil` if
226
229
  # the subscription does not exist.
227
230
  #
228
231
  # @example
229
232
  # require "google/cloud/pubsub"
230
233
  #
231
- # pubsub = Google::Cloud::Pubsub.new
234
+ # pubsub = Google::Cloud::PubSub.new
232
235
  #
233
236
  # topic = pubsub.topic "my-topic"
234
237
  #
@@ -238,7 +241,7 @@ module Google
238
241
  # @example Skip the lookup against the service with `skip_lookup`:
239
242
  # require "google/cloud/pubsub"
240
243
  #
241
- # pubsub = Google::Cloud::Pubsub.new
244
+ # pubsub = Google::Cloud::PubSub.new
242
245
  #
243
246
  # topic = pubsub.topic "my-topic"
244
247
  #
@@ -248,7 +251,9 @@ module Google
248
251
  #
249
252
  def subscription subscription_name, skip_lookup: nil
250
253
  ensure_service!
251
- return Subscription.new_lazy subscription_name, service if skip_lookup
254
+ if skip_lookup
255
+ return Subscription.from_name subscription_name, service
256
+ end
252
257
  grpc = service.get_subscription subscription_name
253
258
  Subscription.from_grpc grpc, service
254
259
  rescue Google::Cloud::NotFoundError
@@ -270,7 +275,7 @@ module Google
270
275
  # @example
271
276
  # require "google/cloud/pubsub"
272
277
  #
273
- # pubsub = Google::Cloud::Pubsub.new
278
+ # pubsub = Google::Cloud::PubSub.new
274
279
  #
275
280
  # topic = pubsub.topic "my-topic"
276
281
  # subscriptions = topic.subscriptions
@@ -281,7 +286,7 @@ module Google
281
286
  # @example Retrieve all subscriptions: (See {Subscription::List#all})
282
287
  # require "google/cloud/pubsub"
283
288
  #
284
- # pubsub = Google::Cloud::Pubsub.new
289
+ # pubsub = Google::Cloud::PubSub.new
285
290
  #
286
291
  # topic = pubsub.topic "my-topic"
287
292
  # subscriptions = topic.subscriptions
@@ -319,7 +324,7 @@ module Google
319
324
  # @example
320
325
  # require "google/cloud/pubsub"
321
326
  #
322
- # pubsub = Google::Cloud::Pubsub.new
327
+ # pubsub = Google::Cloud::PubSub.new
323
328
  #
324
329
  # topic = pubsub.topic "my-topic"
325
330
  # msg = topic.publish "task completed"
@@ -327,7 +332,7 @@ module Google
327
332
  # @example A message can be published using a File object:
328
333
  # require "google/cloud/pubsub"
329
334
  #
330
- # pubsub = Google::Cloud::Pubsub.new
335
+ # pubsub = Google::Cloud::PubSub.new
331
336
  #
332
337
  # topic = pubsub.topic "my-topic"
333
338
  # file = File.open "message.txt", mode: "rb"
@@ -336,7 +341,7 @@ module Google
336
341
  # @example Additionally, a message can be published with attributes:
337
342
  # require "google/cloud/pubsub"
338
343
  #
339
- # pubsub = Google::Cloud::Pubsub.new
344
+ # pubsub = Google::Cloud::PubSub.new
340
345
  #
341
346
  # topic = pubsub.topic "my-topic"
342
347
  # msg = topic.publish "task completed",
@@ -346,7 +351,7 @@ module Google
346
351
  # @example Multiple messages can be sent at the same time using a block:
347
352
  # require "google/cloud/pubsub"
348
353
  #
349
- # pubsub = Google::Cloud::Pubsub.new
354
+ # pubsub = Google::Cloud::PubSub.new
350
355
  #
351
356
  # topic = pubsub.topic "my-topic"
352
357
  # msgs = topic.publish do |t|
@@ -379,7 +384,7 @@ module Google
379
384
  # @example
380
385
  # require "google/cloud/pubsub"
381
386
  #
382
- # pubsub = Google::Cloud::Pubsub.new
387
+ # pubsub = Google::Cloud::PubSub.new
383
388
  #
384
389
  # topic = pubsub.topic "my-topic"
385
390
  # topic.publish_async "task completed" do |result|
@@ -395,7 +400,7 @@ module Google
395
400
  # @example A message can be published using a File object:
396
401
  # require "google/cloud/pubsub"
397
402
  #
398
- # pubsub = Google::Cloud::Pubsub.new
403
+ # pubsub = Google::Cloud::PubSub.new
399
404
  #
400
405
  # topic = pubsub.topic "my-topic"
401
406
  # file = File.open "message.txt", mode: "rb"
@@ -406,7 +411,7 @@ module Google
406
411
  # @example Additionally, a message can be published with attributes:
407
412
  # require "google/cloud/pubsub"
408
413
  #
409
- # pubsub = Google::Cloud::Pubsub.new
414
+ # pubsub = Google::Cloud::PubSub.new
410
415
  #
411
416
  # topic = pubsub.topic "my-topic"
412
417
  # topic.publish_async "task completed",
@@ -440,7 +445,7 @@ module Google
440
445
  # @example
441
446
  # require "google/cloud/pubsub"
442
447
  #
443
- # pubsub = Google::Cloud::Pubsub.new
448
+ # pubsub = Google::Cloud::PubSub.new
444
449
  # topic = pubsub.topic "my-topic"
445
450
  #
446
451
  # policy = topic.policy
@@ -448,7 +453,7 @@ module Google
448
453
  # @example Update the policy by passing a block:
449
454
  # require "google/cloud/pubsub"
450
455
  #
451
- # pubsub = Google::Cloud::Pubsub.new
456
+ # pubsub = Google::Cloud::PubSub.new
452
457
  # topic = pubsub.topic "my-topic"
453
458
  #
454
459
  # topic.policy do |p|
@@ -467,7 +472,7 @@ module Google
467
472
  ##
468
473
  # Updates the [Cloud IAM](https://cloud.google.com/iam/) access control
469
474
  # policy for this topic. The policy should be read from {#policy}. See
470
- # {Google::Cloud::Pubsub::Policy} for an explanation of the policy
475
+ # {Google::Cloud::PubSub::Policy} for an explanation of the policy
471
476
  # `etag` property and how to modify policies.
472
477
  #
473
478
  # You can also update the policy by passing a block to {#policy}, which
@@ -484,7 +489,7 @@ module Google
484
489
  # @example
485
490
  # require "google/cloud/pubsub"
486
491
  #
487
- # pubsub = Google::Cloud::Pubsub.new
492
+ # pubsub = Google::Cloud::PubSub.new
488
493
  # topic = pubsub.topic "my-topic"
489
494
  #
490
495
  # policy = topic.policy # API call
@@ -526,7 +531,7 @@ module Google
526
531
  # @example
527
532
  # require "google/cloud/pubsub"
528
533
  #
529
- # pubsub = Google::Cloud::Pubsub.new
534
+ # pubsub = Google::Cloud::PubSub.new
530
535
  # topic = pubsub.topic "my-topic"
531
536
  # perms = topic.test_permissions "pubsub.topics.get",
532
537
  # "pubsub.topics.publish"
@@ -547,14 +552,14 @@ module Google
547
552
  # @example
548
553
  # require "google/cloud/pubsub"
549
554
  #
550
- # pubsub = Google::Cloud::Pubsub.new
555
+ # pubsub = Google::Cloud::PubSub.new
551
556
  #
552
557
  # topic = pubsub.topic "my-topic"
553
558
  # topic.exists? #=> true
554
559
  #
555
560
  def exists?
556
- # Always true if the object is not set as lazy
557
- return true unless lazy?
561
+ # Always true if the object is not set as reference
562
+ return true unless reference?
558
563
  # If we have a value, return it
559
564
  return @exists unless @exists.nil?
560
565
  ensure_grpc!
@@ -564,23 +569,45 @@ module Google
564
569
  end
565
570
 
566
571
  ##
567
- # @private
568
- # Determines whether the topic object was created with an HTTP call.
572
+ # Determines whether the topic object was created without retrieving the
573
+ # resource representation from the Pub/Sub service.
574
+ #
575
+ # @return [Boolean] `true` when the topic was created without a resource
576
+ # representation, `false` otherwise.
569
577
  #
570
578
  # @example
571
579
  # require "google/cloud/pubsub"
572
580
  #
573
- # pubsub = Google::Cloud::Pubsub.new
581
+ # pubsub = Google::Cloud::PubSub.new
582
+ #
583
+ # topic = pubsub.topic "my-topic", skip_lookup: true
584
+ # topic.reference? #=> true
585
+ #
586
+ def reference?
587
+ @grpc.nil?
588
+ end
589
+
590
+ ##
591
+ # Determines whether the topic object was created with a resource
592
+ # representation from the Pub/Sub service.
593
+ #
594
+ # @return [Boolean] `true` when the topic was created with a resource
595
+ # representation, `false` otherwise.
596
+ #
597
+ # @example
598
+ # require "google/cloud/pubsub"
599
+ #
600
+ # pubsub = Google::Cloud::PubSub.new
574
601
  #
575
602
  # topic = pubsub.topic "my-topic"
576
- # topic.lazy? #=> nil
603
+ # topic.resource? #=> true
577
604
  #
578
- def lazy?
579
- @lazy
605
+ def resource?
606
+ !@grpc.nil?
580
607
  end
581
608
 
582
609
  ##
583
- # @private New Topic from a Google::Pubsub::V1::Topic object.
610
+ # @private New Topic from a Google::Cloud::PubSub::V1::Topic object.
584
611
  def self.from_grpc grpc, service, async: nil
585
612
  new.tap do |t|
586
613
  t.grpc = grpc
@@ -590,12 +617,11 @@ module Google
590
617
  end
591
618
 
592
619
  ##
593
- # @private New lazy {Topic} object without making an HTTP request.
594
- def self.new_lazy name, service, options = {}
595
- lazy_grpc = Google::Pubsub::V1::Topic.new \
596
- name: service.topic_path(name, options)
597
- from_grpc(lazy_grpc, service).tap do |t|
598
- t.instance_variable_set :@lazy, true
620
+ # @private New reference {Topic} object without making an HTTP request.
621
+ def self.from_name name, service, options = {}
622
+ name = service.topic_path name, options
623
+ from_grpc(nil, service).tap do |t|
624
+ t.instance_variable_set :@resource_name, name
599
625
  end
600
626
  end
601
627
 
@@ -609,11 +635,11 @@ module Google
609
635
  end
610
636
 
611
637
  ##
612
- # Ensures a Google::Pubsub::V1::Topic object exists.
638
+ # Ensures a Google::Cloud::PubSub::V1::Topic object exists.
613
639
  def ensure_grpc!
614
640
  ensure_service!
615
- @grpc = service.get_topic name if lazy?
616
- @lazy = nil
641
+ @grpc = service.get_topic name if reference?
642
+ @resource_name = nil
617
643
  end
618
644
 
619
645
  ##
@@ -624,5 +650,7 @@ module Google
624
650
  end
625
651
  end
626
652
  end
653
+
654
+ Pubsub = PubSub unless const_defined? :Pubsub
627
655
  end
628
656
  end