google-cloud-pubsub 0.26.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +12 -2
  3. data/AUTHENTICATION.md +178 -0
  4. data/CHANGELOG.md +659 -0
  5. data/CODE_OF_CONDUCT.md +40 -0
  6. data/CONTRIBUTING.md +187 -0
  7. data/EMULATOR.md +37 -0
  8. data/LICENSE +2 -2
  9. data/LOGGING.md +32 -0
  10. data/OVERVIEW.md +528 -0
  11. data/TROUBLESHOOTING.md +31 -0
  12. data/lib/google/cloud/pubsub/async_publisher/batch.rb +310 -0
  13. data/lib/google/cloud/pubsub/async_publisher.rb +402 -0
  14. data/lib/google/cloud/pubsub/batch_publisher.rb +100 -0
  15. data/lib/google/cloud/pubsub/convert.rb +91 -0
  16. data/lib/google/cloud/pubsub/credentials.rb +26 -10
  17. data/lib/google/cloud/pubsub/errors.rb +85 -0
  18. data/lib/google/cloud/pubsub/message.rb +80 -17
  19. data/lib/google/cloud/pubsub/policy.rb +17 -14
  20. data/lib/google/cloud/pubsub/project.rb +364 -250
  21. data/lib/google/cloud/pubsub/publish_result.rb +103 -0
  22. data/lib/google/cloud/pubsub/received_message.rb +162 -24
  23. data/lib/google/cloud/pubsub/retry_policy.rb +88 -0
  24. data/lib/google/cloud/pubsub/schema/list.rb +180 -0
  25. data/lib/google/cloud/pubsub/schema.rb +310 -0
  26. data/lib/google/cloud/pubsub/service.rb +281 -265
  27. data/lib/google/cloud/pubsub/snapshot/list.rb +21 -21
  28. data/lib/google/cloud/pubsub/snapshot.rb +55 -15
  29. data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +54 -0
  30. data/lib/google/cloud/pubsub/subscriber/inventory.rb +173 -0
  31. data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
  32. data/lib/google/cloud/pubsub/subscriber/stream.rb +400 -0
  33. data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +230 -0
  34. data/lib/google/cloud/pubsub/subscriber.rb +417 -0
  35. data/lib/google/cloud/pubsub/subscription/list.rb +28 -28
  36. data/lib/google/cloud/pubsub/subscription/push_config.rb +268 -0
  37. data/lib/google/cloud/pubsub/subscription.rb +900 -172
  38. data/lib/google/cloud/pubsub/topic/list.rb +21 -21
  39. data/lib/google/cloud/pubsub/topic.rb +674 -95
  40. data/lib/google/cloud/pubsub/version.rb +6 -4
  41. data/lib/google/cloud/pubsub.rb +104 -439
  42. data/lib/google-cloud-pubsub.rb +60 -29
  43. metadata +88 -50
  44. data/README.md +0 -69
  45. data/lib/google/cloud/pubsub/topic/publisher.rb +0 -86
  46. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -77
  47. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -223
  48. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -81
  49. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -503
  50. data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -605
  51. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -96
  52. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1104
  53. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -127
  54. data/lib/google/cloud/pubsub/v1.rb +0 -17
  55. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -187
  56. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -159
@@ -1,10 +1,10 @@
1
- # Copyright 2016 Google Inc. All rights reserved.
1
+ # Copyright 2016 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
5
5
  # You may obtain a copy of the License at
6
6
  #
7
- # http://www.apache.org/licenses/LICENSE-2.0
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
8
  #
9
9
  # Unless required by applicable law or agreed to in writing, software
10
10
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -15,8 +15,10 @@
15
15
 
16
16
  module Google
17
17
  module Cloud
18
- module Pubsub
19
- VERSION = "0.26.0"
18
+ module PubSub
19
+ VERSION = "2.6.1".freeze
20
20
  end
21
+
22
+ Pubsub = PubSub unless const_defined? :Pubsub
21
23
  end
22
24
  end
@@ -1,10 +1,10 @@
1
- # Copyright 2015 Google Inc. All rights reserved.
1
+ # Copyright 2015 Google LLC
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
5
5
  # You may obtain a copy of the License at
6
6
  #
7
- # http://www.apache.org/licenses/LICENSE-2.0
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
8
  #
9
9
  # Unless required by applicable law or agreed to in writing, software
10
10
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -15,6 +15,8 @@
15
15
 
16
16
  require "google-cloud-pubsub"
17
17
  require "google/cloud/pubsub/project"
18
+ require "google/cloud/config"
19
+ require "google/cloud/env"
18
20
 
19
21
  module Google
20
22
  module Cloud
@@ -28,422 +30,24 @@ module Google
28
30
  # Cloud Pub/Sub allows developers to communicate between independently
29
31
  # written applications.
30
32
  #
31
- # The goal of google-cloud is to provide a API that is comfortable to
32
- # Rubyists. Authentication is handled by {Google::Cloud#pubsub}. You can
33
- # provide the project and credential information to connect to the Pub/Sub
34
- # service, or if you are running on Google Compute Engine this configuration
35
- # is taken care of for you.
33
+ # See {file:OVERVIEW.md Google Cloud Pub/Sub Overview}.
36
34
  #
37
- # ```ruby
38
- # require "google/cloud/pubsub"
39
- #
40
- # pubsub = Google::Cloud::Pubsub.new
41
- #
42
- # topic = pubsub.topic "my-topic"
43
- # topic.publish "task completed"
44
- # ```
45
- #
46
- # To learn more about Pub/Sub, read the [Google Cloud Pub/Sub Overview
47
- # ](https://cloud.google.com/pubsub/overview).
48
- #
49
- # ## Retrieving Topics
50
- #
51
- # A Topic is a named resource to which messages are sent by publishers.
52
- # A Topic is found by its name. (See {Google::Cloud::Pubsub::Project#topic})
53
- #
54
- # ```ruby
55
- # require "google/cloud/pubsub"
56
- #
57
- # pubsub = Google::Cloud::Pubsub.new
58
- # topic = pubsub.topic "my-topic"
59
- # ```
60
- #
61
- # ## Creating a Topic
62
- #
63
- # A Topic is created from a Project. (See
64
- # {Google::Cloud::Pubsub::Project#create_topic})
65
- #
66
- # ```ruby
67
- # require "google/cloud/pubsub"
68
- #
69
- # pubsub = Google::Cloud::Pubsub.new
70
- # topic = pubsub.create_topic "my-topic"
71
- # ```
72
- #
73
- # ## Retrieving Subscriptions
74
- #
75
- # A Subscription is a named resource representing the stream of messages
76
- # from a single, specific Topic, to be delivered to the subscribing
77
- # application. A Subscription is found by its name. (See
78
- # {Google::Cloud::Pubsub::Topic#subscription})
79
- #
80
- # ```ruby
81
- # require "google/cloud/pubsub"
82
- #
83
- # pubsub = Google::Cloud::Pubsub.new
84
- #
85
- # topic = pubsub.topic "my-topic"
86
- # subscription = topic.subscription "my-topic-subscription"
87
- # puts subscription.name
88
- # ```
89
- #
90
- # ## Creating a Subscription
91
- #
92
- # A Subscription is created from a Topic. (See
93
- # {Google::Cloud::Pubsub::Topic#subscribe} and
94
- # {Google::Cloud::Pubsub::Project#subscribe})
95
- #
96
- # ```ruby
97
- # require "google/cloud/pubsub"
98
- #
99
- # pubsub = Google::Cloud::Pubsub.new
100
- #
101
- # topic = pubsub.topic "my-topic"
102
- # sub = topic.subscribe "my-topic-sub"
103
- # puts sub.name # => "my-topic-sub"
104
- # ```
105
- #
106
- # The subscription can be created that specifies the number of seconds to
107
- # wait to be acknowledged as well as an endpoint URL to push the messages
108
- # to:
109
- #
110
- # ```ruby
111
- # require "google/cloud/pubsub"
112
- #
113
- # pubsub = Google::Cloud::Pubsub.new
114
- #
115
- # topic = pubsub.topic "my-topic"
116
- # sub = topic.subscribe "my-topic-sub",
117
- # deadline: 120,
118
- # endpoint: "https://example.com/push"
119
- # ```
120
- #
121
- # ## Publishing Messages
122
- #
123
- # Messages are published to a topic. Any message published to a topic
124
- # without a subscription will be lost. Ensure the topic has a subscription
125
- # before publishing. (See {Google::Cloud::Pubsub::Topic#publish} and
126
- # {Google::Cloud::Pubsub::Project#publish})
127
- #
128
- # ```ruby
129
- # require "google/cloud/pubsub"
130
- #
131
- # pubsub = Google::Cloud::Pubsub.new
132
- #
133
- # topic = pubsub.topic "my-topic"
134
- # msg = topic.publish "task completed"
135
- # ```
136
- #
137
- # Messages can also be published with attributes:
138
- #
139
- # ```ruby
140
- # require "google/cloud/pubsub"
141
- #
142
- # pubsub = Google::Cloud::Pubsub.new
143
- #
144
- # topic = pubsub.topic "my-topic"
145
- # msg = topic.publish "task completed",
146
- # foo: :bar,
147
- # this: :that
148
- # ```
149
- #
150
- # Multiple messages can be published at the same time by passing a block:
151
- #
152
- # ```ruby
153
- # require "google/cloud/pubsub"
154
- #
155
- # pubsub = Google::Cloud::Pubsub.new
156
- #
157
- # topic = pubsub.topic "my-topic"
158
- # msgs = topic.publish do |batch|
159
- # batch.publish "task 1 completed", foo: :bar
160
- # batch.publish "task 2 completed", foo: :baz
161
- # batch.publish "task 3 completed", foo: :bif
162
- # end
163
- # ```
164
- #
165
- # ## Pulling Messages
166
- #
167
- # Messages are pulled from a Subscription. (See
168
- # {Google::Cloud::Pubsub::Subscription#pull})
169
- #
170
- # ```ruby
171
- # require "google/cloud/pubsub"
172
- #
173
- # pubsub = Google::Cloud::Pubsub.new
174
- #
175
- # sub = pubsub.subscription "my-topic-sub"
176
- # msgs = sub.pull
177
- # ```
178
- #
179
- # A maximum number of messages returned can also be specified:
180
- #
181
- # ```ruby
182
- # require "google/cloud/pubsub"
183
- #
184
- # pubsub = Google::Cloud::Pubsub.new
185
- #
186
- # sub = pubsub.subscription "my-topic-sub", max: 10
187
- # msgs = sub.pull
188
- # ```
189
- #
190
- # The request for messages can also block until messages are available.
191
- # (See {Google::Cloud::Pubsub::Subscription#wait_for_messages})
192
- #
193
- # ```ruby
194
- # require "google/cloud/pubsub"
195
- #
196
- # pubsub = Google::Cloud::Pubsub.new
197
- #
198
- # sub = pubsub.subscription "my-topic-sub"
199
- # msgs = sub.wait_for_messages
200
- # ```
201
- #
202
- # ## Acknowledging a Message
203
- #
204
- # Messages that are received can be acknowledged in Pub/Sub, marking the
205
- # message to be removed so it cannot be pulled again.
206
- #
207
- # A Message that can be acknowledged is called a ReceivedMessage.
208
- # ReceivedMessages can be acknowledged one at a time:
209
- # (See {Google::Cloud::Pubsub::ReceivedMessage#acknowledge!})
210
- #
211
- # ```ruby
212
- # require "google/cloud/pubsub"
213
- #
214
- # pubsub = Google::Cloud::Pubsub.new
215
- #
216
- # sub = pubsub.subscription "my-topic-sub"
217
- # sub.pull.each { |msg| msg.acknowledge! }
218
- # ```
219
- #
220
- # Or, multiple messages can be acknowledged in a single API call:
221
- # (See {Google::Cloud::Pubsub::Subscription#acknowledge})
222
- #
223
- # ```ruby
224
- # require "google/cloud/pubsub"
225
- #
226
- # pubsub = Google::Cloud::Pubsub.new
227
- #
228
- # sub = pubsub.subscription "my-topic-sub"
229
- # received_messages = sub.pull
230
- # sub.acknowledge received_messages
231
- # ```
232
- #
233
- # ## Modifying a Deadline
234
- #
235
- # A message must be acknowledged after it is pulled, or Pub/Sub will mark
236
- # the message for redelivery. The message acknowledgement deadline can
237
- # delayed if more time is needed. This will allow more time to process the
238
- # message before the message is marked for redelivery. (See
239
- # {Google::Cloud::Pubsub::ReceivedMessage#delay!})
240
- #
241
- # ```ruby
242
- # require "google/cloud/pubsub"
243
- #
244
- # pubsub = Google::Cloud::Pubsub.new
245
- #
246
- # sub = pubsub.subscription "my-topic-sub"
247
- # received_message = sub.pull.first
248
- # if received_message
249
- # puts received_message.message.data
250
- # # Delay for 2 minutes
251
- # received_message.delay! 120
252
- # end
253
- # ```
254
- #
255
- # The message can also be made available for immediate redelivery:
256
- #
257
- # ```ruby
258
- # require "google/cloud/pubsub"
259
- #
260
- # pubsub = Google::Cloud::Pubsub.new
261
- #
262
- # sub = pubsub.subscription "my-topic-sub"
263
- # received_message = sub.pull.first
264
- # if received_message
265
- # puts received_message.message.data
266
- # # Mark for redelivery by setting the deadline to now
267
- # received_message.delay! 0
268
- # end
269
- # ```
270
- #
271
- # Multiple messages can be delayed or made available for immediate
272
- # redelivery: (See {Google::Cloud::Pubsub::Subscription#delay})
273
- #
274
- # ```ruby
275
- # require "google/cloud/pubsub"
276
- #
277
- # pubsub = Google::Cloud::Pubsub.new
278
- #
279
- # sub = pubsub.subscription "my-topic-sub"
280
- # received_messages = sub.pull
281
- # sub.delay 120, received_messages
282
- # ```
283
- #
284
- # ## Creating a snapshot and using seek
285
- #
286
- # You can create a snapshot to retain the existing backlog on a
287
- # subscription. The snapshot will hold the messages in the subscription's
288
- # backlog that are unacknowledged upon the successful completion of the
289
- # `create_snapshot` operation.
290
- #
291
- # Later, you can use `seek` to reset the subscription's backlog to the
292
- # snapshot.
293
- #
294
- # (See {Google::Cloud::Pubsub::Subscription#create_snapshot} and
295
- # {Google::Cloud::Pubsub::Subscription#seek})
296
- #
297
- # ```ruby
298
- # require "google/cloud/pubsub"
299
- #
300
- # pubsub = Google::Cloud::Pubsub.new
301
- #
302
- # sub = pubsub.subscription "my-topic-sub"
303
- #
304
- # snapshot = sub.create_snapshot
305
- #
306
- # messages = sub.pull
307
- # sub.acknowledge messages
308
- #
309
- # sub.seek snapshot
310
- # ```
311
- #
312
- # ## Listening for Messages
313
- #
314
- # Long running workers are easy to create with `listen`, which runs an
315
- # infinitely blocking loop to process messages as they are received. (See
316
- # {Google::Cloud::Pubsub::Subscription#listen})
317
- #
318
- # ```ruby
319
- # require "google/cloud/pubsub"
320
- #
321
- # pubsub = Google::Cloud::Pubsub.new
322
- #
323
- # sub = pubsub.subscription "my-topic-sub"
324
- # sub.listen do |msg|
325
- # # process msg
326
- # end
327
- # ```
328
- #
329
- # Messages are retrieved in batches for efficiency. The number of messages
330
- # pulled per batch can be limited with the `max` option:
331
- #
332
- # ```ruby
333
- # require "google/cloud/pubsub"
334
- #
335
- # pubsub = Google::Cloud::Pubsub.new
336
- #
337
- # sub = pubsub.subscription "my-topic-sub"
338
- # sub.listen max: 20 do |msg|
339
- # # process msg
340
- # end
341
- # ```
342
- #
343
- # When processing time and the acknowledgement deadline are a concern,
344
- # messages can be automatically acknowledged as they are pulled with the
345
- # `autoack` option:
346
- #
347
- # ```ruby
348
- # require "google/cloud/pubsub"
349
- #
350
- # pubsub = Google::Cloud::Pubsub.new
351
- #
352
- # sub = pubsub.subscription "my-topic-sub"
353
- # sub.listen autoack: true do |msg|
354
- # # process msg
355
- # end
356
- # ```
357
- #
358
- # ## Configuring timeout
359
- #
360
- # You can configure the request `timeout` value in seconds.
361
- #
362
- # ```ruby
363
- # require "google/cloud/pubsub"
364
- #
365
- # pubsub = Google::Cloud::Pubsub.new timeout: 120
366
- # ```
367
- #
368
- # ## Working Across Projects
369
- #
370
- # All calls to the Pub/Sub service use the same project and credentials
371
- # provided to the {Google::Cloud#pubsub} method. However, it is common to
372
- # reference topics or subscriptions in other projects, which can be achieved
373
- # by using the `project` option. The main credentials must have permissions
374
- # to the topics and subscriptions in other projects.
375
- #
376
- # ```ruby
377
- # require "google/cloud/pubsub"
378
- #
379
- # pubsub = Google::Cloud::Pubsub.new # my-project-id
380
- #
381
- # # Get a topic in the current project
382
- # my_topic = pubsub.topic "my-topic"
383
- # my_topic.name #=> "projects/my-project-id/topics/my-topic"
384
- # # Get a topic in another project
385
- # other_topic = pubsub.topic "other-topic", project: "other-project-id"
386
- # other_topic.name #=> "projects/other-project-id/topics/other-topic"
387
- # ```
388
- #
389
- # It is possible to create a subscription in the current project that pulls
390
- # from a topic in another project:
391
- #
392
- # ```ruby
393
- # require "google/cloud/pubsub"
394
- #
395
- # pubsub = Google::Cloud::Pubsub.new # my-project-id
396
- #
397
- # # Get a topic in another project
398
- # topic = pubsub.topic "other-topic", project: "other-project-id"
399
- # # Create a subscription in the current project that pulls from
400
- # # the topic in another project
401
- # sub = topic.subscribe "my-sub"
402
- # sub.name #=> "projects/my-project-id/subscriptions/my-sub"
403
- # sub.topic.name #=> "projects/other-project-id/topics/other-topic"
404
- # ```
405
- #
406
- # ## Using the Google Cloud Pub/Sub Emulator
407
- #
408
- # To develop and test your application locally, you can use the [Google
409
- # Cloud Pub/Sub Emulator](https://cloud.google.com/pubsub/emulator), which
410
- # provides [local
411
- # emulation](https://cloud.google.com/sdk/gcloud/reference/beta/emulators/)
412
- # of the production Google Cloud Pub/Sub environment. You can start the
413
- # Google Cloud Pub/Sub emulator using the `gcloud` command-line tool.
414
- #
415
- # To configure your ruby code to use the emulator, set the
416
- # `PUBSUB_EMULATOR_HOST` environment variable to the host and port where the
417
- # emulator is running. The value can be set as an environment variable in
418
- # the shell running the ruby code, or can be set directly in the ruby code
419
- # as shown below.
420
- #
421
- # ```ruby
422
- # require "google/cloud/pubsub"
423
- #
424
- # # Make Pub/Sub use the emulator
425
- # ENV["PUBSUB_EMULATOR_HOST"] = "localhost:8918"
426
- #
427
- # pubsub = Google::Cloud::Pubsub.new "emulator-project-id"
428
- #
429
- # # Get a topic in the current project
430
- # my_topic = pubsub.new_topic "my-topic"
431
- # my_topic.name #=> "projects/emulator-project-id/topics/my-topic"
432
- # ```
433
- #
434
- module Pubsub
35
+ module PubSub
36
+ # rubocop:disable Metrics/AbcSize
37
+
435
38
  ##
436
39
  # Creates a new object for connecting to the Pub/Sub service.
437
40
  # Each call creates a new connection.
438
41
  #
439
42
  # For more information on connecting to Google Cloud see the
440
- # [Authentication
441
- # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
43
+ # {file:AUTHENTICATION.md Authentication Guide}.
442
44
  #
443
- # @param [String] project Project identifier for the Pub/Sub service you
444
- # are connecting to.
445
- # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
446
- # file path the file must be readable.
45
+ # @param [String] project_id Project identifier for the Pub/Sub service
46
+ # you are connecting to. If not present, the default project for the
47
+ # credentials is used.
48
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
49
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
50
+ # Google::Auth::Credentials object. (See {PubSub::Credentials})
447
51
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
448
52
  # the set of resources and operations that the connection can access.
449
53
  # See [Using OAuth 2.0 to Access Google
@@ -453,53 +57,114 @@ module Google
453
57
  #
454
58
  # * `https://www.googleapis.com/auth/pubsub`
455
59
  # @param [Integer] timeout Default timeout to use in requests. Optional.
456
- # @param [Hash] client_config A hash of values to override the default
457
- # behavior of the API client. Optional.
60
+ # @param [String] endpoint Override of the endpoint host name. Optional.
61
+ # If the param is nil, uses the default endpoint.
458
62
  # @param [String] emulator_host Pub/Sub emulator host. Optional.
459
- # If the param is nil, ENV["PUBSUB_EMULATOR_HOST"] will be used.
63
+ # If the param is nil, uses the value of the `emulator_host` config.
64
+ # @param [String] project Alias for the `project_id` argument. Deprecated.
65
+ # @param [String] keyfile Alias for the `credentials` argument.
66
+ # Deprecated.
460
67
  #
461
- # @return [Google::Cloud::Pubsub::Project]
68
+ # @return [Google::Cloud::PubSub::Project]
462
69
  #
463
70
  # @example
464
71
  # require "google/cloud/pubsub"
465
72
  #
466
- # pubsub = Google::Cloud.pubsub
73
+ # pubsub = Google::Cloud::PubSub.new
467
74
  #
468
75
  # topic = pubsub.topic "my-topic"
469
76
  # topic.publish "task completed"
470
77
  #
471
- def self.new project: nil, keyfile: nil, scope: nil, timeout: nil,
472
- client_config: nil, emulator_host: nil
473
- project ||= Google::Cloud::Pubsub::Project.default_project
474
- project = project.to_s # Always cast to a string
475
- fail ArgumentError, "project is missing" if project.empty?
78
+ def self.new project_id: nil,
79
+ credentials: nil,
80
+ scope: nil,
81
+ timeout: nil,
82
+ endpoint: nil,
83
+ emulator_host: nil,
84
+ project: nil,
85
+ keyfile: nil
86
+ project_id ||= (project || default_project_id)
87
+ scope ||= configure.scope
88
+ timeout ||= configure.timeout
89
+ endpoint ||= configure.endpoint
90
+ emulator_host ||= configure.emulator_host
476
91
 
477
- emulator_host ||= ENV["PUBSUB_EMULATOR_HOST"]
478
92
  if emulator_host
479
- ps = Google::Cloud::Pubsub::Project.new(
480
- Google::Cloud::Pubsub::Service.new(
481
- project, :this_channel_is_insecure))
482
- ps.service.host = emulator_host
483
- return ps
93
+ project_id = project_id.to_s # Always cast to a string
94
+ raise ArgumentError, "project_id is missing" if project_id.empty?
95
+
96
+ service = PubSub::Service.new project_id, :this_channel_is_insecure, host: emulator_host, timeout: timeout
97
+ return PubSub::Project.new service
484
98
  end
485
99
 
486
- credentials = credentials_with_scope keyfile, scope
100
+ credentials ||= (keyfile || default_credentials(scope: scope))
101
+ unless credentials.is_a? Google::Auth::Credentials
102
+ credentials = PubSub::Credentials.new credentials, scope: scope
103
+ end
104
+
105
+ project_id ||= credentials.project_id if credentials.respond_to? :project_id
106
+ project_id = project_id.to_s # Always cast to a string
107
+ raise ArgumentError, "project_id is missing" if project_id.empty?
487
108
 
488
- Google::Cloud::Pubsub::Project.new(
489
- Google::Cloud::Pubsub::Service.new(
490
- project, credentials, timeout: timeout,
491
- client_config: client_config))
109
+ service = PubSub::Service.new project_id, credentials, host: endpoint, timeout: timeout
110
+ PubSub::Project.new service
492
111
  end
493
112
 
113
+ # rubocop:enable Metrics/AbcSize
114
+
494
115
  ##
495
- # @private
496
- def self.credentials_with_scope keyfile, scope
497
- if keyfile.nil?
498
- Google::Cloud::Pubsub::Credentials.default(scope: scope)
499
- else
500
- Google::Cloud::Pubsub::Credentials.new(keyfile, scope: scope)
501
- end
116
+ # Configure the Google Cloud PubSub library.
117
+ #
118
+ # The following PubSub configuration parameters are supported:
119
+ #
120
+ # * `project_id` - (String) Identifier for a PubSub project. (The
121
+ # parameter `project` is considered deprecated, but may also be used.)
122
+ # * `credentials` - (String, Hash, Google::Auth::Credentials) The path to
123
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
124
+ # Google::Auth::Credentials object. (See {PubSub::Credentials}) (The
125
+ # parameter `keyfile` is considered deprecated, but may also be used.)
126
+ # * `scope` - (String, Array<String>) The OAuth 2.0 scopes controlling
127
+ # the set of resources and operations that the connection can access.
128
+ # * `retries` - (Integer) Number of times to retry requests on server
129
+ # error.
130
+ # * `timeout` - (Integer) Default timeout to use in requests.
131
+ # * `endpoint` - (String) Override of the endpoint host name, or `nil`
132
+ # to use the default endpoint.
133
+ # * `emulator_host` - (String) Host name of the emulator. Defaults to
134
+ # `ENV["PUBSUB_EMULATOR_HOST"]`
135
+ # * `on_error` - (Proc) A Proc to be run when an error is encountered
136
+ # on a background thread. The Proc must take the error object as the
137
+ # single argument. (See {Subscriber.on_error}.)
138
+ #
139
+ # @return [Google::Cloud::Config] The configuration object the
140
+ # Google::Cloud::PubSub library uses.
141
+ #
142
+ def self.configure
143
+ yield Google::Cloud.configure.pubsub if block_given?
144
+
145
+ Google::Cloud.configure.pubsub
146
+ end
147
+
148
+ ##
149
+ # @private Default project.
150
+ def self.default_project_id
151
+ Google::Cloud.configure.pubsub.project_id ||
152
+ Google::Cloud.configure.project_id ||
153
+ Google::Cloud.env.project_id
154
+ end
155
+
156
+ ##
157
+ # @private Default credentials.
158
+ def self.default_credentials scope: nil
159
+ Google::Cloud.configure.pubsub.credentials ||
160
+ Google::Cloud.configure.credentials ||
161
+ PubSub::Credentials.default(scope: scope)
502
162
  end
503
163
  end
164
+
165
+ ## Legacy veneer namespace
166
+ Pubsub = PubSub unless const_defined? :Pubsub
504
167
  end
168
+ ## Legacy generated client namespace
169
+ Pubsub = Cloud::PubSub unless const_defined? :Pubsub
505
170
  end