google-cloud-pubsub 2.23.0 → 3.0.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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/OVERVIEW.md +188 -144
  4. data/lib/google/cloud/pubsub/admin_clients.rb +116 -0
  5. data/lib/google/cloud/pubsub/async_publisher.rb +9 -9
  6. data/lib/google/cloud/pubsub/batch_publisher.rb +4 -4
  7. data/lib/google/cloud/pubsub/errors.rb +3 -3
  8. data/lib/google/cloud/pubsub/message.rb +8 -8
  9. data/lib/google/cloud/pubsub/{subscriber → message_listener}/enumerator_queue.rb +1 -1
  10. data/lib/google/cloud/pubsub/{subscriber → message_listener}/inventory.rb +2 -4
  11. data/lib/google/cloud/pubsub/{subscriber → message_listener}/sequencer.rb +1 -1
  12. data/lib/google/cloud/pubsub/{subscriber → message_listener}/stream.rb +10 -10
  13. data/lib/google/cloud/pubsub/{subscriber → message_listener}/timed_unary_buffer.rb +1 -1
  14. data/lib/google/cloud/pubsub/message_listener.rb +413 -0
  15. data/lib/google/cloud/pubsub/project.rb +98 -531
  16. data/lib/google/cloud/pubsub/publisher.rb +373 -0
  17. data/lib/google/cloud/pubsub/received_message.rb +44 -39
  18. data/lib/google/cloud/pubsub/service.rb +24 -386
  19. data/lib/google/cloud/pubsub/subscriber.rb +442 -279
  20. data/lib/google/cloud/pubsub/version.rb +1 -1
  21. data/lib/google/cloud/pubsub.rb +8 -15
  22. data/lib/google-cloud-pubsub.rb +5 -4
  23. metadata +9 -17
  24. data/lib/google/cloud/pubsub/policy.rb +0 -188
  25. data/lib/google/cloud/pubsub/retry_policy.rb +0 -88
  26. data/lib/google/cloud/pubsub/schema/list.rb +0 -180
  27. data/lib/google/cloud/pubsub/schema.rb +0 -378
  28. data/lib/google/cloud/pubsub/snapshot/list.rb +0 -178
  29. data/lib/google/cloud/pubsub/snapshot.rb +0 -205
  30. data/lib/google/cloud/pubsub/subscription/list.rb +0 -205
  31. data/lib/google/cloud/pubsub/subscription/push_config.rb +0 -268
  32. data/lib/google/cloud/pubsub/subscription.rb +0 -1467
  33. data/lib/google/cloud/pubsub/topic/list.rb +0 -171
  34. data/lib/google/cloud/pubsub/topic.rb +0 -1100
@@ -16,10 +16,8 @@
16
16
  require "google/cloud/errors"
17
17
  require "google/cloud/pubsub/service"
18
18
  require "google/cloud/pubsub/credentials"
19
- require "google/cloud/pubsub/topic"
20
- require "google/cloud/pubsub/batch_publisher"
21
- require "google/cloud/pubsub/schema"
22
- require "google/cloud/pubsub/snapshot"
19
+ require "google/cloud/pubsub/publisher"
20
+ require "google/cloud/pubsub/subscriber"
23
21
 
24
22
  module Google
25
23
  module Cloud
@@ -31,10 +29,13 @@ module Google
31
29
  # # Project
32
30
  #
33
31
  # Represents the project that pubsub messages are pushed to and pulled
34
- # from. {Topic} is a named resource to which messages are sent by
35
- # publishers. {Subscription} is a named resource representing the stream
32
+ # from.
33
+ #
34
+ # {Google::Cloud::PubSub::V1::Topic} is a named resource to which
35
+ # messages are sent by using {Publisher}.
36
+ # {Google::Cloud::PubSub::V1::Subscription} is a named resource representing the stream
36
37
  # of messages from a single, specific topic, to be delivered to the
37
- # subscribing application. {Message} is a combination of data and
38
+ # subscribing application via {Subscriber}. {Message} is a combination of data and
38
39
  # attributes that a publisher sends to a topic and is eventually delivered
39
40
  # to subscribers.
40
41
  #
@@ -45,8 +46,8 @@ module Google
45
46
  #
46
47
  # pubsub = Google::Cloud::PubSub.new
47
48
  #
48
- # topic = pubsub.topic "my-topic"
49
- # topic.publish "task completed"
49
+ # publisher = pubsub.publisher "my-topic"
50
+ # publisher.publish "task completed"
50
51
  #
51
52
  class Project
52
53
  ##
@@ -86,574 +87,140 @@ module Google
86
87
  end
87
88
 
88
89
  ##
89
- # Retrieves topic by name.
90
- #
91
- # @param [String] topic_name Name of a topic. The value can be a simple
92
- # topic ID (relative name), in which case the current project ID will
93
- # be supplied, or a fully-qualified topic name in the form
94
- # `projects/{project_id}/topics/{topic_id}`.
95
- # @param [String] project If the topic belongs to a project other than
96
- # the one currently connected to, the alternate project ID can be
97
- # specified here. Optional. Not used if a fully-qualified topic name
98
- # is provided for `topic_name`.
99
- # @param [Boolean] skip_lookup Optionally create a {Topic} object
100
- # without verifying the topic resource exists on the Pub/Sub service.
101
- # Calls made on this object will raise errors if the topic resource
102
- # does not exist. Default is `false`. Optional.
103
- # @param [Hash] async A hash of values to configure the topic's
104
- # {AsyncPublisher} that is created when {Topic#publish_async}
105
- # is called. Optional.
106
- #
107
- # Hash keys and values may include the following:
108
- #
109
- # * `:max_bytes` (Integer) The maximum size of messages to be collected before the batch is published. Default
110
- # is 1,000,000 (1MB).
111
- # * `:max_messages` (Integer) The maximum number of messages to be collected before the batch is published.
112
- # Default is 100.
113
- # * `:interval` (Numeric) The number of seconds to collect messages before the batch is published. Default is
114
- # 0.01.
115
- # * `:threads` (Hash) The number of threads to create to handle concurrent calls by the publisher:
116
- # * `:publish` (Integer) The number of threads used to publish messages. Default is 2.
117
- # * `:callback` (Integer) The number of threads to handle the published messages' callbacks. Default is 4.
118
- # * `:compress` (Boolean) The flag that enables publisher compression. Default is false
119
- # * `:compression_bytes_threshold` (Integer) The number of bytes above which compress should be enabled.
120
- # Default is 240.
121
- # * `:flow_control` (Hash) The client flow control settings for message publishing:
122
- # * `:message_limit` (Integer) The maximum number of messages allowed to wait to be published. Default is
123
- # `10 * max_messages`.
124
- # * `:byte_limit` (Integer) The maximum total size of messages allowed to wait to be published. Default is
125
- # `10 * max_bytes`.
126
- # * `:limit_exceeded_behavior` (Symbol) The action to take when publish flow control limits are exceeded.
127
- # Possible values include: `:ignore` - Flow control is disabled. `:error` - Calls to {Topic#publish_async}
128
- # will raise {FlowControlLimitError} when publish flow control limits are exceeded. `:block` - Calls to
129
- # {Topic#publish_async} will block until capacity is available when publish flow control limits are
130
- # exceeded. The default value is `:ignore`.
131
- #
132
- # @return [Google::Cloud::PubSub::Topic, nil] Returns `nil` if topic
133
- # does not exist.
134
- #
135
- # @example
136
- # require "google/cloud/pubsub"
137
- #
138
- # pubsub = Google::Cloud::PubSub.new
139
- # topic = pubsub.topic "existing-topic"
140
- #
141
- # @example By default `nil` will be returned if topic does not exist.
142
- # require "google/cloud/pubsub"
143
- #
144
- # pubsub = Google::Cloud::PubSub.new
145
- # topic = pubsub.topic "non-existing-topic" # nil
146
- #
147
- # @example Create topic in a different project with the `project` flag.
148
- # require "google/cloud/pubsub"
149
- #
150
- # pubsub = Google::Cloud::PubSub.new
151
- # topic = pubsub.topic "another-topic", project: "another-project"
152
- #
153
- # @example Skip the lookup against the service with `skip_lookup`:
154
- # require "google/cloud/pubsub"
155
- #
156
- # pubsub = Google::Cloud::PubSub.new
157
- # topic = pubsub.topic "another-topic", skip_lookup: true
158
- #
159
- # @example Configuring AsyncPublisher to increase concurrent callbacks:
160
- # require "google/cloud/pubsub"
161
- #
162
- # pubsub = Google::Cloud::PubSub.new
163
- # topic = pubsub.topic "my-topic",
164
- # async: { threads: { callback: 16 } }
90
+ # Retrieve a client for managing subscriptions.
165
91
  #
166
- # topic.publish_async "task completed" do |result|
167
- # if result.succeeded?
168
- # log_publish_success result.data
169
- # else
170
- # log_publish_failure result.data, result.error
171
- # end
172
- # end
92
+ # @return [Google::Cloud::PubSub::SubscriptionAdmin::Client]
173
93
  #
174
- # topic.async_publisher.stop!
175
- #
176
- def topic topic_name, project: nil, skip_lookup: nil, async: nil
177
- ensure_service!
178
- options = { project: project, async: async }
179
- return Topic.from_name topic_name, service, options if skip_lookup
180
- grpc = service.get_topic topic_name, options
181
- Topic.from_grpc grpc, service, async: async
182
- rescue Google::Cloud::NotFoundError
183
- nil
94
+ def subscription_admin
95
+ service.subscription_admin
184
96
  end
185
- alias get_topic topic
186
- alias find_topic topic
187
97
 
188
98
  ##
189
- # Creates a new topic.
190
- #
191
- # @param [String] topic_name Name of a topic. Required.
192
- # The value can be a simple topic ID (relative name), in which
193
- # case the current project ID will be supplied, or a fully-qualified
194
- # topic name in the form `projects/{project_id}/topics/{topic_id}`.
195
- #
196
- # The topic ID (relative name) must start with a letter, and
197
- # contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
198
- # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
199
- # signs (`%`). It must be between 3 and 255 characters in length, and
200
- # it must not start with `goog`.
201
- # @param [Hash] labels A hash of user-provided labels associated with
202
- # the topic. You can use these to organize and group your topics.
203
- # Label keys and values can be no longer than 63 characters, can only
204
- # contain lowercase letters, numeric characters, underscores and
205
- # dashes. International characters are allowed. Label values are
206
- # optional. Label keys must start with a letter and each label in the
207
- # list must have a different key. See [Creating and Managing
208
- # Labels](https://cloud.google.com/pubsub/docs/labels).
209
- # @param [String] kms_key The Cloud KMS encryption key that will be used
210
- # to protect access to messages published on this topic. Optional.
211
- # For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
212
- # @param [Array<String>] persistence_regions The list of GCP region IDs
213
- # where messages that are published to the topic may be persisted in
214
- # storage. Optional.
215
- # @param [Hash] async A hash of values to configure the topic's
216
- # {AsyncPublisher} that is created when {Topic#publish_async}
217
- # is called. Optional.
218
- #
219
- # Hash keys and values may include the following:
220
- #
221
- # * `:max_bytes` (Integer) The maximum size of messages to be collected
222
- # before the batch is published. Default is 1,000,000 (1MB).
223
- # * `:max_messages` (Integer) The maximum number of messages to be
224
- # collected before the batch is published. Default is 100.
225
- # * `:interval` (Numeric) The number of seconds to collect messages before
226
- # the batch is published. Default is 0.01.
227
- # * `:threads` (Hash) The number of threads to create to handle concurrent
228
- # calls by the publisher:
229
- # * `:publish` (Integer) The number of threads used to publish messages.
230
- # Default is 2.
231
- # * `:callback` (Integer) The number of threads to handle the published
232
- # messages' callbacks. Default is 4.
233
- # * `:compress` (Boolean) The flag that enables publisher compression. Default is false
234
- # * `:compression_bytes_threshold` (Integer) The number of bytes above which compress should be enabled.
235
- # Default is 240.
236
- # * `:flow_control` (Hash) The client flow control settings for message publishing:
237
- # * `:message_limit` (Integer) The maximum number of messages allowed to wait to be published. Default is
238
- # `10 * max_messages`.
239
- # * `:byte_limit` (Integer) The maximum total size of messages allowed to wait to be published. Default is
240
- # `10 * max_bytes`.
241
- # * `:limit_exceeded_behavior` (Symbol) The action to take when publish flow control limits are exceeded.
242
- # Possible values include: `:ignore` - Flow control is disabled. `:error` - Calls to {Topic#publish_async}
243
- # will raise {FlowControlLimitError} when publish flow control limits are exceeded. `:block` - Calls to
244
- # {Topic#publish_async} will block until capacity is available when publish flow control limits are
245
- # exceeded. The default value is `:ignore`.
246
- # @param [String] schema_name The name of the schema that messages
247
- # published should be validated against. Optional. The value can be a
248
- # simple schema ID (relative name), in which case the current project
249
- # ID will be supplied, or a fully-qualified schema name in the form
250
- # `projects/{project_id}/schemas/{schema_id}`. If provided,
251
- # `message_encoding` must also be provided.
252
- # @param [String, Symbol] message_encoding The encoding of messages validated
253
- # against the schema identified by `schema_name`. Optional. Values include:
254
- #
255
- # * `JSON` - JSON encoding.
256
- # * `BINARY` - Binary encoding, as defined by the schema type. For some
257
- # schema types, binary encoding may not be available.
258
- # @param [Numeric] retention Indicates the minimum number of seconds to retain a message
259
- # after it is published to the topic. If this field is set, messages published
260
- # to the topic within the `retention` number of seconds are always available to
261
- # subscribers. For instance, it allows any attached subscription to [seek to a
262
- # timestamp](https://cloud.google.com/pubsub/docs/replay-overview#seek_to_a_time)
263
- # that is up to `retention` number of seconds in the past. If this field is
264
- # not set, message retention is controlled by settings on individual
265
- # subscriptions. Cannot be less than 600 (10 minutes) or more than 604,800 (7 days).
266
- # @param ingestion_data_source_settings [::Google::Cloud::PubSub::V1::IngestionDataSourceSettings, ::Hash]
267
- # Optional. Settings for ingestion from a data source into this topic.
268
- #
269
- # @return [Google::Cloud::PubSub::Topic]
270
- #
271
- # @example
272
- # require "google/cloud/pubsub"
99
+ # Retrieve a client for managing topics.
273
100
  #
274
- # pubsub = Google::Cloud::PubSub.new
275
- # topic = pubsub.create_topic "my-topic"
101
+ # @return [Google::Cloud::PubSub::TopicAdmin::Client]
276
102
  #
277
- def create_topic topic_name,
278
- labels: nil,
279
- kms_key: nil,
280
- persistence_regions: nil,
281
- async: nil,
282
- schema_name: nil,
283
- message_encoding: nil,
284
- retention: nil,
285
- ingestion_data_source_settings: nil
286
- ensure_service!
287
- grpc = service.create_topic topic_name,
288
- labels: labels,
289
- kms_key_name: kms_key,
290
- persistence_regions: persistence_regions,
291
- schema_name: schema_name,
292
- message_encoding: message_encoding,
293
- retention: retention,
294
- ingestion_data_source_settings: ingestion_data_source_settings
295
- Topic.from_grpc grpc, service, async: async
103
+ def topic_admin
104
+ service.topic_admin
296
105
  end
297
- alias new_topic create_topic
298
106
 
299
107
  ##
300
- # Retrieves a list of topics for the given project.
301
- #
302
- # @param [String] token The `token` value returned by the last call to
303
- # `topics`; indicates that this is a continuation of a call, and that
304
- # the system should return the next page of data.
305
- # @param [Integer] max Maximum number of topics to return.
306
- #
307
- # @return [Array<Google::Cloud::PubSub::Topic>] (See
308
- # {Google::Cloud::PubSub::Topic::List})
108
+ # Retrieve a client for managing schemas.
309
109
  #
310
- # @example
311
- # require "google/cloud/pubsub"
110
+ # @return [Google::Cloud::PubSub::V1::SchemaService::Client]
312
111
  #
313
- # pubsub = Google::Cloud::PubSub.new
112
+ def schemas
113
+ service.schemas
114
+ end
115
+
116
+ ##
117
+ # Retrieve a client specific for Iam Policy related functions.
314
118
  #
315
- # topics = pubsub.topics
316
- # topics.each do |topic|
317
- # puts topic.name
318
- # end
119
+ # @return [Google::Iam::V1::IAMPolicy::Client]
319
120
  #
320
- # @example Retrieve all topics: (See {Topic::List#all})
321
- # require "google/cloud/pubsub"
121
+ def iam
122
+ service.iam
123
+ end
124
+
125
+ ##
126
+ # Retrieves a Publisher by topic name or full project path.
322
127
  #
323
- # pubsub = Google::Cloud::PubSub.new
128
+ # @param [String] topic_name Name of a topic. The value can be a simple
129
+ # topic ID (relative name) or a fully-qualified topic name.
130
+ # @param [String] project The alternate project ID can be specified here.
131
+ # Optional. Not used if a fully-qualified topic name is provided
132
+ # for `topic_name`.
133
+ # @param [Hash] async A hash of values to configure the topic's
134
+ # {AsyncPublisher} that is created when {Publisher#publish_async}
135
+ # is called. Optional.
324
136
  #
325
- # topics = pubsub.topics
326
- # topics.all do |topic|
327
- # puts topic.name
328
- # end
137
+ # @return [Google::Cloud::PubSub::Publisher]
329
138
  #
330
- def topics token: nil, max: nil
139
+ def publisher topic_name, project: nil, async: nil
331
140
  ensure_service!
332
- options = { token: token, max: max }
333
- grpc = service.list_topics options
334
- Topic::List.from_grpc grpc, service, max
141
+ options = { project: project, async: async }
142
+ grpc = topic_admin.get_topic topic: service.topic_path(topic_name, options)
143
+ Publisher.from_grpc grpc, service, async: async
335
144
  end
336
- alias find_topics topics
337
- alias list_topics topics
338
145
 
339
146
  ##
340
- # Retrieves subscription by name.
147
+ # Retrieves a Subscriber by subscription name or full project path.
341
148
  #
342
149
  # @param [String] subscription_name Name of a subscription. The value can
343
- # be a simple subscription ID, in which case the current project ID
344
- # will be supplied, or a fully-qualified subscription name in the form
345
- # `projects/{project_id}/subscriptions/{subscription_id}`.
346
- # @param [String] project If the subscription belongs to a project other
347
- # than the one currently connected to, the alternate project ID can be
348
- # specified here. Not used if a fully-qualified subscription name is
349
- # provided for `subscription_name`.
350
- # @param [Boolean] skip_lookup Optionally create a {Subscription} object
351
- # without verifying the subscription resource exists on the Pub/Sub
150
+ # be a simple subscription ID (relative name) or a fully-qualified
151
+ # subscription name.
152
+ # @param [String] project The alternate project ID can be specified here.
153
+ # Optional. Not used if a fully-qualified topic name is provided
154
+ # for `topic_name`.
155
+ # @param [Boolean] skip_lookup Optionally create a {Google::Cloud::PubSub::V1::Subscription}
156
+ # object without verifying the subscription resource exists on the Pub/Sub
352
157
  # service. Calls made on this object will raise errors if the service
353
158
  # resource does not exist. Default is `false`.
354
159
  #
355
- # @return [Google::Cloud::PubSub::Subscription, nil] Returns `nil` if
356
- # the subscription does not exist
357
- #
358
- # @example
359
- # require "google/cloud/pubsub"
160
+ # @return [Google::Cloud::PubSub::Subscriber, nil] Returns `nil` if
161
+ # the subscription does not exist.
360
162
  #
361
- # pubsub = Google::Cloud::PubSub.new
362
- #
363
- # sub = pubsub.subscription "my-sub"
364
- # sub.name #=> "projects/my-project/subscriptions/my-sub"
365
- #
366
- # @example Skip the lookup against the service with `skip_lookup`:
367
- # require "google/cloud/pubsub"
368
- #
369
- # pubsub = Google::Cloud::PubSub.new
370
- #
371
- # # No API call is made to retrieve the subscription information.
372
- # sub = pubsub.subscription "my-sub", skip_lookup: true
373
- # sub.name #=> "projects/my-project/subscriptions/my-sub"
374
- #
375
- def subscription subscription_name, project: nil, skip_lookup: nil
163
+ def subscriber subscription_name, project: nil, skip_lookup: nil
376
164
  ensure_service!
377
165
  options = { project: project }
378
- return Subscription.from_name subscription_name, service, options if skip_lookup
379
- grpc = service.get_subscription subscription_name, options
380
- Subscription.from_grpc grpc, service
381
- rescue Google::Cloud::NotFoundError
382
- nil
166
+ return Subscriber.from_name subscription_name, service, options if skip_lookup
167
+ grpc = subscription_admin.get_subscription subscription: service.subscription_path(subscription_name, options)
168
+ Subscriber.from_grpc grpc, service
383
169
  end
384
- alias get_subscription subscription
385
- alias find_subscription subscription
386
170
 
387
171
  ##
388
- # Retrieves a list of subscriptions for the given project.
389
- #
390
- # @param [String] token A previously-returned page token representing
391
- # part of the larger set of results to view.
392
- # @param [Integer] max Maximum number of subscriptions to return.
393
- #
394
- # @return [Array<Google::Cloud::PubSub::Subscription>] (See
395
- # {Google::Cloud::PubSub::Subscription::List})
396
- #
397
- # @example
398
- # require "google/cloud/pubsub"
399
- #
400
- # pubsub = Google::Cloud::PubSub.new
172
+ # Returns a fully-qualified project path in the form of
173
+ # `projects/{project_id}`
174
+ # @param [String] project_name A project name. Optional.
175
+ # If provided, this will be used in place of the default `project_id`.
401
176
  #
402
- # subs = pubsub.subscriptions
403
- # subs.each do |sub|
404
- # puts sub.name
405
- # end
406
- #
407
- # @example Retrieve all subscriptions: (See {Subscription::List#all})
408
- # require "google/cloud/pubsub"
409
- #
410
- # pubsub = Google::Cloud::PubSub.new
411
- #
412
- # subs = pubsub.subscriptions
413
- # subs.all do |sub|
414
- # puts sub.name
415
- # end
416
- #
417
- def subscriptions token: nil, max: nil
418
- ensure_service!
419
- options = { token: token, max: max }
420
- grpc = service.list_subscriptions options
421
- Subscription::List.from_grpc grpc, service, max
177
+ def project_path project_name: nil
178
+ service.project_path options: { "project" => project_name }.compact
422
179
  end
423
- alias find_subscriptions subscriptions
424
- alias list_subscriptions subscriptions
425
-
426
180
 
427
181
  ##
428
- # Retrieves a list of snapshots for the given project.
429
- #
430
- # @param [String] token A previously-returned page token representing
431
- # part of the larger set of results to view.
432
- # @param [Integer] max Maximum number of snapshots to return.
433
- #
434
- # @return [Array<Google::Cloud::PubSub::Snapshot>] (See
435
- # {Google::Cloud::PubSub::Snapshot::List})
436
- #
437
- # @example
438
- # require "google/cloud/pubsub"
439
- #
440
- # pubsub = Google::Cloud::PubSub.new
441
- #
442
- # snapshots = pubsub.snapshots
443
- # snapshots.each do |snapshot|
444
- # puts snapshot.name
445
- # end
446
- #
447
- # @example Retrieve all snapshots: (See {Snapshot::List#all})
448
- # require "google/cloud/pubsub"
449
- #
450
- # pubsub = Google::Cloud::PubSub.new
451
- #
452
- # snapshots = pubsub.snapshots
453
- # snapshots.all do |snapshot|
454
- # puts snapshot.name
455
- # end
456
- #
457
- def snapshots token: nil, max: nil
458
- ensure_service!
459
- options = { token: token, max: max }
460
- grpc = service.list_snapshots options
461
- Snapshot::List.from_grpc grpc, service, max
462
- end
463
- alias find_snapshots snapshots
464
- alias list_snapshots snapshots
465
-
466
- ##
467
- # Retrieves schema by name.
468
- #
469
- # @param [String] schema_name Name of a schema. The value can
470
- # be a simple schema ID, in which case the current project ID
471
- # will be supplied, or a fully-qualified schema name in the form
472
- # `projects/{project_id}/schemas/{schema_id}`.
473
- # @param view [Symbol, String, nil] Possible values:
474
- # * `BASIC` - Include the `name` and `type` of the schema, but not the `definition`.
475
- # * `FULL` - Include all Schema object fields.
476
- #
477
- # The default value is `FULL`.
478
- # @param [String] project If the schema belongs to a project other
479
- # than the one currently connected to, the alternate project ID can be
480
- # specified here. Not used if a fully-qualified schema name is
481
- # provided for `schema_name`.
482
- # @param [Boolean] skip_lookup Optionally create a {Schema} object
483
- # without verifying the schema resource exists on the Pub/Sub
484
- # service. Calls made on this object will raise errors if the service
485
- # resource does not exist. Default is `false`.
486
- #
487
- # @return [Google::Cloud::PubSub::Schema, nil] Returns `nil` if
488
- # the schema does not exist.
489
- #
490
- # @example
491
- # require "google/cloud/pubsub"
492
- #
493
- # pubsub = Google::Cloud::PubSub.new
494
- #
495
- # schema = pubsub.schema "my-schema"
496
- # schema.name #=> "projects/my-project/schemas/my-schema"
497
- # schema.type #=> :PROTOCOL_BUFFER
498
- # schema.definition # The schema definition
499
- #
500
- # @example Skip the lookup against the service with `skip_lookup`:
501
- # require "google/cloud/pubsub"
502
- #
503
- # pubsub = Google::Cloud::PubSub.new
504
- #
505
- # # No API call is made to retrieve the schema information.
506
- # # The default project is used in the name.
507
- # schema = pubsub.schema "my-schema", skip_lookup: true
508
- # schema.name #=> "projects/my-project/schemas/my-schema"
509
- # schema.type #=> nil
510
- # schema.definition #=> nil
511
- #
512
- # @example Omit the schema definition with `view: :basic`:
513
- # require "google/cloud/pubsub"
514
- #
515
- # pubsub = Google::Cloud::PubSub.new
516
- #
517
- # schema = pubsub.schema "my-schema", view: :basic
518
- # schema.name #=> "projects/my-project/schemas/my-schema"
519
- # schema.type #=> :PROTOCOL_BUFFER
520
- # schema.definition #=> nil
521
- #
522
- def schema schema_name, view: nil, project: nil, skip_lookup: nil
523
- ensure_service!
524
- options = { project: project }
525
- return Schema.from_name schema_name, view, service, options if skip_lookup
526
- view ||= :FULL
527
- grpc = service.get_schema schema_name, view, options
528
- Schema.from_grpc grpc, service
529
- rescue Google::Cloud::NotFoundError
530
- nil
182
+ # Returns a fully-qualified topic path in the form of
183
+ # `projects/{project_id}/topics/{topic_name}`
184
+ # @param [String] topic_name A topic name.
185
+ # @param [String] project_name A project name. Optional.
186
+ # If provided, this will be used in place of the default `project_id`.
187
+ #
188
+ def topic_path topic_name, project_name: nil
189
+ service.topic_path topic_name, options: { "project" => project_name }.compact
531
190
  end
532
- alias get_schema schema
533
- alias find_schema schema
534
191
 
535
192
  ##
536
- # Creates a new schema.
537
- #
538
- # @param [String] schema_id The ID to use for the schema, which will
539
- # become the final component of the schema's resource name. Required.
540
- #
541
- # The schema ID (relative name) must start with a letter, and
542
- # contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
543
- # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
544
- # signs (`%`). It must be between 3 and 255 characters in length, and
545
- # it must not start with `goog`.
546
- # @param [String, Symbol] type The type of the schema. Required. Possible
547
- # values are case-insensitive and include:
548
- #
549
- # * `PROTOCOL_BUFFER` - A Protocol Buffer schema definition.
550
- # * `AVRO` - An Avro schema definition.
551
- # @param [String] definition The definition of the schema. Required. This
552
- # should be a string representing the full definition of the schema that
553
- # is a valid schema definition of the type specified in `type`.
554
- # @param [String] project If the schema belongs to a project other
555
- # than the one currently connected to, the alternate project ID can be
556
- # specified here. Optional.
557
- #
558
- # @return [Google::Cloud::PubSub::Schema]
559
- #
560
- # @example
561
- # require "google/cloud/pubsub"
562
- #
563
- # pubsub = Google::Cloud::PubSub.new
564
- #
565
- # definition = "..."
566
- # schema = pubsub.create_schema "my-schema", :avro, definition
567
- # schema.name #=> "projects/my-project/schemas/my-schema"
568
- #
569
- def create_schema schema_id, type, definition, project: nil
570
- ensure_service!
571
- type = type.to_s.upcase
572
- grpc = service.create_schema schema_id, type, definition, project: project
573
- Schema.from_grpc grpc, service
193
+ # Returns a fully-qualified subscription path in the form of
194
+ # `projects/{project_id}/subscriptions/{subscription_name}`
195
+ # @param [String] subscription_name A subscription name.
196
+ # @param [String] project_name A project name. Optional.
197
+ # If provided, this will be used in place of the default `project_id`.
198
+ #
199
+ def subscription_path subscription_name, project_name: nil
200
+ service.subscription_path subscription_name, options: { "project" => project_name }.compact
574
201
  end
575
- alias new_schema create_schema
576
202
 
577
203
  ##
578
- # Retrieves a list of schemas for the given project.
579
- #
580
- # @param view [String, Symbol, nil] The set of fields to return in the response. Possible values:
581
- #
582
- # * `BASIC` - Include the `name` and `type` of the schema, but not the `definition`.
583
- # * `FULL` - Include all Schema object fields.
584
- #
585
- # The default value is `FULL`.
586
- # @param [String] token A previously-returned page token representing
587
- # part of the larger set of results to view.
588
- # @param [Integer] max Maximum number of schemas to return.
589
- #
590
- # @return [Array<Google::Cloud::PubSub::Schema>] (See
591
- # {Google::Cloud::PubSub::Schema::List})
592
- #
593
- # @example
594
- # require "google/cloud/pubsub"
595
- #
596
- # pubsub = Google::Cloud::PubSub.new
597
- #
598
- # schemas = pubsub.schemas
599
- # schemas.each do |schema|
600
- # puts schema.name
601
- # end
602
- #
603
- # @example Retrieve all schemas: (See {Schema::List#all})
604
- # require "google/cloud/pubsub"
605
- #
606
- # pubsub = Google::Cloud::PubSub.new
607
- #
608
- # schemas = pubsub.schemas
609
- # schemas.all do |schema|
610
- # puts schema.name
611
- # end
612
- #
613
- def schemas view: nil, token: nil, max: nil
614
- ensure_service!
615
- view ||= :FULL
616
- options = { token: token, max: max }
617
- grpc = service.list_schemas view, options
618
- Schema::List.from_grpc grpc, service, view, max
204
+ # Returns a fully-qualified snapshot path in the form of
205
+ # `projects/{project_id}/snapshots/{snapshot_name}`
206
+ # @param [String] snapshot_name A snapshot name.
207
+ # @param [String] project_name A project name. Optional.
208
+ # If provided, this will be used in place of the default `project_id`.
209
+ #
210
+ def snapshot_path snapshot_name, project_name: nil
211
+ service.snapshot_path snapshot_name, options: { "project" => project_name }.compact
619
212
  end
620
- alias find_schemas schemas
621
- alias list_schemas schemas
622
213
 
623
214
  ##
624
- # Validates a schema type and definition.
625
- #
626
- # @param [String, Symbol] type The type of the schema. Required. Possible
627
- # values are case-insensitive and include:
628
- #
629
- # * `PROTOCOL_BUFFER` - A Protocol Buffer schema definition.
630
- # * `AVRO` - An Avro schema definition.
631
- # @param [String] definition The definition of the schema. Required. This
632
- # should be a string representing the full definition of the schema that
633
- # is a valid schema definition of the type specified in `type`.
634
- # @param [String] project If the schema belongs to a project other
635
- # than the one currently connected to, the alternate project ID can be
636
- # specified here. Optional.
637
- #
638
- # @return [Boolean] `true` if the schema is valid, `false` otherwise.
639
- #
640
- # @example
641
- # require "google/cloud/pubsub"
642
- #
643
- # pubsub = Google::Cloud::PubSub.new
644
- #
645
- # definition = "..."
646
- # pubsub.validate_schema :avro, definition #=> true
647
- #
648
- def valid_schema? type, definition, project: nil
649
- ensure_service!
650
- type = type.to_s.upcase
651
- service.validate_schema type, definition, project: project # return type is empty
652
- true
653
- rescue Google::Cloud::InvalidArgumentError
654
- false
215
+ # Returns a fully-qualified schema path in the form of
216
+ # `projects/{project_id}/schemas/{schema_name}`
217
+ # @param [String] schema_name A schema name.
218
+ # @param [String] project_name A project name. Optional.
219
+ # If provided, this will be used in place of the default `project_id`.
220
+ #
221
+ def schema_path schema_name, project_name: nil
222
+ service.schema_path schema_name, options: { "project" => project_name }.compact
655
223
  end
656
- alias validate_schema valid_schema?
657
224
 
658
225
  protected
659
226