google-cloud-pubsub 0.26.0 → 2.6.1
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 +5 -5
- data/.yardopts +12 -2
- data/AUTHENTICATION.md +178 -0
- data/CHANGELOG.md +659 -0
- data/CODE_OF_CONDUCT.md +40 -0
- data/CONTRIBUTING.md +187 -0
- data/EMULATOR.md +37 -0
- data/LICENSE +2 -2
- data/LOGGING.md +32 -0
- data/OVERVIEW.md +528 -0
- data/TROUBLESHOOTING.md +31 -0
- data/lib/google/cloud/pubsub/async_publisher/batch.rb +310 -0
- data/lib/google/cloud/pubsub/async_publisher.rb +402 -0
- data/lib/google/cloud/pubsub/batch_publisher.rb +100 -0
- data/lib/google/cloud/pubsub/convert.rb +91 -0
- data/lib/google/cloud/pubsub/credentials.rb +26 -10
- data/lib/google/cloud/pubsub/errors.rb +85 -0
- data/lib/google/cloud/pubsub/message.rb +80 -17
- data/lib/google/cloud/pubsub/policy.rb +17 -14
- data/lib/google/cloud/pubsub/project.rb +364 -250
- data/lib/google/cloud/pubsub/publish_result.rb +103 -0
- data/lib/google/cloud/pubsub/received_message.rb +162 -24
- data/lib/google/cloud/pubsub/retry_policy.rb +88 -0
- data/lib/google/cloud/pubsub/schema/list.rb +180 -0
- data/lib/google/cloud/pubsub/schema.rb +310 -0
- data/lib/google/cloud/pubsub/service.rb +281 -265
- data/lib/google/cloud/pubsub/snapshot/list.rb +21 -21
- data/lib/google/cloud/pubsub/snapshot.rb +55 -15
- data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +54 -0
- data/lib/google/cloud/pubsub/subscriber/inventory.rb +173 -0
- data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
- data/lib/google/cloud/pubsub/subscriber/stream.rb +400 -0
- data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +230 -0
- data/lib/google/cloud/pubsub/subscriber.rb +417 -0
- data/lib/google/cloud/pubsub/subscription/list.rb +28 -28
- data/lib/google/cloud/pubsub/subscription/push_config.rb +268 -0
- data/lib/google/cloud/pubsub/subscription.rb +900 -172
- data/lib/google/cloud/pubsub/topic/list.rb +21 -21
- data/lib/google/cloud/pubsub/topic.rb +674 -95
- data/lib/google/cloud/pubsub/version.rb +6 -4
- data/lib/google/cloud/pubsub.rb +104 -439
- data/lib/google-cloud-pubsub.rb +60 -29
- metadata +88 -50
- data/README.md +0 -69
- data/lib/google/cloud/pubsub/topic/publisher.rb +0 -86
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -77
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -223
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -81
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -503
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -605
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -96
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1104
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -127
- data/lib/google/cloud/pubsub/v1.rb +0 -17
- data/lib/google/pubsub/v1/pubsub_pb.rb +0 -187
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -159
@@ -1,10 +1,10 @@
|
|
1
|
-
# Copyright 2016 Google
|
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
|
-
#
|
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,
|
@@ -17,7 +17,7 @@ require "google/cloud/errors"
|
|
17
17
|
|
18
18
|
module Google
|
19
19
|
module Cloud
|
20
|
-
module
|
20
|
+
module PubSub
|
21
21
|
##
|
22
22
|
# # Policy
|
23
23
|
#
|
@@ -27,7 +27,7 @@ module Google
|
|
27
27
|
# is to read the current data from the service, update the data locally,
|
28
28
|
# and then send the modified data for writing. This pattern may result in
|
29
29
|
# a conflict if two or more processes attempt the sequence simultaneously.
|
30
|
-
# IAM solves this problem with the {Google::Cloud::
|
30
|
+
# IAM solves this problem with the {Google::Cloud::PubSub::Policy#etag}
|
31
31
|
# property, which is used to verify whether the policy has changed since
|
32
32
|
# the last request. When you make a request to with an `etag` value, Cloud
|
33
33
|
# IAM compares the `etag` value in the request with the existing `etag`
|
@@ -37,8 +37,8 @@ module Google
|
|
37
37
|
# When you update a policy, first read the policy (and its current `etag`)
|
38
38
|
# from the service, then modify the policy locally, and then write the
|
39
39
|
# modified policy to the service. See
|
40
|
-
# {Google::Cloud::
|
41
|
-
# {Google::Cloud::
|
40
|
+
# {Google::Cloud::PubSub::Topic#policy} and
|
41
|
+
# {Google::Cloud::PubSub::Topic#policy=}.
|
42
42
|
#
|
43
43
|
# @see https://cloud.google.com/iam/docs/managing-policies Managing
|
44
44
|
# policies
|
@@ -58,7 +58,7 @@ module Google
|
|
58
58
|
# @example
|
59
59
|
# require "google/cloud/pubsub"
|
60
60
|
#
|
61
|
-
# pubsub = Google::Cloud::
|
61
|
+
# pubsub = Google::Cloud::PubSub.new
|
62
62
|
# topic = pubsub.topic "my-topic"
|
63
63
|
#
|
64
64
|
# topic.policy do |p|
|
@@ -68,7 +68,8 @@ module Google
|
|
68
68
|
# end
|
69
69
|
#
|
70
70
|
class Policy
|
71
|
-
attr_reader :etag
|
71
|
+
attr_reader :etag
|
72
|
+
attr_reader :roles
|
72
73
|
|
73
74
|
##
|
74
75
|
# @private Creates a Policy object.
|
@@ -93,7 +94,7 @@ module Google
|
|
93
94
|
# @example
|
94
95
|
# require "google/cloud/pubsub"
|
95
96
|
#
|
96
|
-
# pubsub = Google::Cloud::
|
97
|
+
# pubsub = Google::Cloud::PubSub.new
|
97
98
|
# topic = pubsub.topic "my-topic"
|
98
99
|
#
|
99
100
|
# topic.policy do |p|
|
@@ -120,7 +121,7 @@ module Google
|
|
120
121
|
# @example
|
121
122
|
# require "google/cloud/pubsub"
|
122
123
|
#
|
123
|
-
# pubsub = Google::Cloud::
|
124
|
+
# pubsub = Google::Cloud::PubSub.new
|
124
125
|
# topic = pubsub.topic "my-topic"
|
125
126
|
#
|
126
127
|
# topic.policy do |p|
|
@@ -145,7 +146,7 @@ module Google
|
|
145
146
|
# @example
|
146
147
|
# require "google/cloud/pubsub"
|
147
148
|
#
|
148
|
-
# pubsub = Google::Cloud::
|
149
|
+
# pubsub = Google::Cloud::PubSub.new
|
149
150
|
# topic = pubsub.topic "my-topic"
|
150
151
|
#
|
151
152
|
# topic.policy do |p|
|
@@ -160,14 +161,14 @@ module Google
|
|
160
161
|
# @private Convert the Policy to a Google::Iam::V1::Policy object.
|
161
162
|
def to_grpc
|
162
163
|
Google::Iam::V1::Policy.new(
|
163
|
-
etag:
|
164
|
+
etag: etag,
|
164
165
|
bindings: roles.keys.map do |role_name|
|
165
166
|
next if roles[role_name].empty?
|
166
167
|
Google::Iam::V1::Binding.new(
|
167
|
-
role:
|
168
|
+
role: role_name,
|
168
169
|
members: roles[role_name]
|
169
170
|
)
|
170
|
-
end
|
171
|
+
end.compact
|
171
172
|
)
|
172
173
|
end
|
173
174
|
|
@@ -181,5 +182,7 @@ module Google
|
|
181
182
|
end
|
182
183
|
end
|
183
184
|
end
|
185
|
+
|
186
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
184
187
|
end
|
185
188
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
# Copyright 2015 Google
|
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
|
-
#
|
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,
|
@@ -14,15 +14,16 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
require "google/cloud/errors"
|
17
|
-
require "google/cloud/env"
|
18
17
|
require "google/cloud/pubsub/service"
|
19
18
|
require "google/cloud/pubsub/credentials"
|
20
19
|
require "google/cloud/pubsub/topic"
|
20
|
+
require "google/cloud/pubsub/batch_publisher"
|
21
|
+
require "google/cloud/pubsub/schema"
|
21
22
|
require "google/cloud/pubsub/snapshot"
|
22
23
|
|
23
24
|
module Google
|
24
25
|
module Cloud
|
25
|
-
module
|
26
|
+
module PubSub
|
26
27
|
##
|
27
28
|
# # Project
|
28
29
|
#
|
@@ -39,7 +40,7 @@ module Google
|
|
39
40
|
# @example
|
40
41
|
# require "google/cloud/pubsub"
|
41
42
|
#
|
42
|
-
# pubsub = Google::Cloud::
|
43
|
+
# pubsub = Google::Cloud::PubSub.new
|
43
44
|
#
|
44
45
|
# topic = pubsub.topic "my-topic"
|
45
46
|
# topic.publish "task completed"
|
@@ -60,111 +61,189 @@ module Google
|
|
60
61
|
# @example
|
61
62
|
# require "google/cloud/pubsub"
|
62
63
|
#
|
63
|
-
# pubsub = Google::Cloud::
|
64
|
-
#
|
65
|
-
#
|
64
|
+
# pubsub = Google::Cloud::PubSub.new(
|
65
|
+
# project_id: "my-project",
|
66
|
+
# credentials: "/path/to/keyfile.json"
|
66
67
|
# )
|
67
68
|
#
|
68
|
-
# pubsub.
|
69
|
+
# pubsub.project_id #=> "my-project"
|
69
70
|
#
|
70
|
-
def
|
71
|
+
def project_id
|
71
72
|
service.project
|
72
73
|
end
|
73
|
-
|
74
|
-
##
|
75
|
-
# @private Default project.
|
76
|
-
def self.default_project
|
77
|
-
ENV["PUBSUB_PROJECT"] ||
|
78
|
-
ENV["GOOGLE_CLOUD_PROJECT"] ||
|
79
|
-
ENV["GCLOUD_PROJECT"] ||
|
80
|
-
Google::Cloud.env.project_id
|
81
|
-
end
|
74
|
+
alias project project_id
|
82
75
|
|
83
76
|
##
|
84
77
|
# Retrieves topic by name.
|
85
78
|
#
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
# @param [Boolean] autocreate Flag to control whether the requested
|
91
|
-
# topic will be created if it does not exist. Ignored if `skip_lookup`
|
92
|
-
# is `true`. The default value is `false`.
|
79
|
+
# @param [String] topic_name Name of a topic. The value can be a simple
|
80
|
+
# topic ID (relative name), in which case the current project ID will
|
81
|
+
# be supplied, or a fully-qualified topic name in the form
|
82
|
+
# `projects/{project_id}/topics/{topic_id}`.
|
93
83
|
# @param [String] project If the topic belongs to a project other than
|
94
84
|
# the one currently connected to, the alternate project ID can be
|
95
|
-
# specified here.
|
85
|
+
# specified here. Optional. Not used if a fully-qualified topic name
|
86
|
+
# is provided for `topic_name`.
|
96
87
|
# @param [Boolean] skip_lookup Optionally create a {Topic} object
|
97
88
|
# without verifying the topic resource exists on the Pub/Sub service.
|
98
89
|
# Calls made on this object will raise errors if the topic resource
|
99
|
-
# does not exist. Default is `false`.
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
90
|
+
# does not exist. Default is `false`. Optional.
|
91
|
+
# @param [Hash] async A hash of values to configure the topic's
|
92
|
+
# {AsyncPublisher} that is created when {Topic#publish_async}
|
93
|
+
# is called. Optional.
|
94
|
+
#
|
95
|
+
# Hash keys and values may include the following:
|
96
|
+
#
|
97
|
+
# * `:max_bytes` (Integer) The maximum size of messages to be collected before the batch is published. Default
|
98
|
+
# is 1,000,000 (1MB).
|
99
|
+
# * `:max_messages` (Integer) The maximum number of messages to be collected before the batch is published.
|
100
|
+
# Default is 100.
|
101
|
+
# * `:interval` (Numeric) The number of seconds to collect messages before the batch is published. Default is
|
102
|
+
# 0.01.
|
103
|
+
# * `:threads` (Hash) The number of threads to create to handle concurrent calls by the publisher:
|
104
|
+
# * `:publish` (Integer) The number of threads used to publish messages. Default is 2.
|
105
|
+
# * `:callback` (Integer) The number of threads to handle the published messages' callbacks. Default is 4.
|
106
|
+
#
|
107
|
+
# @return [Google::Cloud::PubSub::Topic, nil] Returns `nil` if topic
|
108
|
+
# does not exist.
|
105
109
|
#
|
106
110
|
# @example
|
107
111
|
# require "google/cloud/pubsub"
|
108
112
|
#
|
109
|
-
# pubsub = Google::Cloud::
|
113
|
+
# pubsub = Google::Cloud::PubSub.new
|
110
114
|
# topic = pubsub.topic "existing-topic"
|
111
115
|
#
|
112
116
|
# @example By default `nil` will be returned if topic does not exist.
|
113
117
|
# require "google/cloud/pubsub"
|
114
118
|
#
|
115
|
-
# pubsub = Google::Cloud::
|
119
|
+
# pubsub = Google::Cloud::PubSub.new
|
116
120
|
# topic = pubsub.topic "non-existing-topic" # nil
|
117
121
|
#
|
118
|
-
# @example With the `autocreate` option set to `true`.
|
119
|
-
# require "google/cloud/pubsub"
|
120
|
-
#
|
121
|
-
# pubsub = Google::Cloud::Pubsub.new
|
122
|
-
# topic = pubsub.topic "non-existing-topic", autocreate: true
|
123
|
-
#
|
124
122
|
# @example Create topic in a different project with the `project` flag.
|
125
123
|
# require "google/cloud/pubsub"
|
126
124
|
#
|
127
|
-
# pubsub = Google::Cloud::
|
125
|
+
# pubsub = Google::Cloud::PubSub.new
|
128
126
|
# topic = pubsub.topic "another-topic", project: "another-project"
|
129
127
|
#
|
130
128
|
# @example Skip the lookup against the service with `skip_lookup`:
|
131
129
|
# require "google/cloud/pubsub"
|
132
130
|
#
|
133
|
-
# pubsub = Google::Cloud::
|
131
|
+
# pubsub = Google::Cloud::PubSub.new
|
134
132
|
# topic = pubsub.topic "another-topic", skip_lookup: true
|
135
133
|
#
|
136
|
-
|
134
|
+
# @example Configuring AsyncPublisher to increase concurrent callbacks:
|
135
|
+
# require "google/cloud/pubsub"
|
136
|
+
#
|
137
|
+
# pubsub = Google::Cloud::PubSub.new
|
138
|
+
# topic = pubsub.topic "my-topic",
|
139
|
+
# async: { threads: { callback: 16 } }
|
140
|
+
#
|
141
|
+
# topic.publish_async "task completed" do |result|
|
142
|
+
# if result.succeeded?
|
143
|
+
# log_publish_success result.data
|
144
|
+
# else
|
145
|
+
# log_publish_failure result.data, result.error
|
146
|
+
# end
|
147
|
+
# end
|
148
|
+
#
|
149
|
+
# topic.async_publisher.stop!
|
150
|
+
#
|
151
|
+
def topic topic_name, project: nil, skip_lookup: nil, async: nil
|
137
152
|
ensure_service!
|
138
153
|
options = { project: project }
|
139
|
-
return Topic.
|
140
|
-
grpc = service.get_topic topic_name
|
141
|
-
Topic.from_grpc grpc, service
|
154
|
+
return Topic.from_name topic_name, service, options if skip_lookup
|
155
|
+
grpc = service.get_topic topic_name, options
|
156
|
+
Topic.from_grpc grpc, service, async: async
|
142
157
|
rescue Google::Cloud::NotFoundError
|
143
|
-
return create_topic(topic_name) if autocreate
|
144
158
|
nil
|
145
159
|
end
|
146
|
-
|
147
|
-
|
160
|
+
alias get_topic topic
|
161
|
+
alias find_topic topic
|
148
162
|
|
149
163
|
##
|
150
164
|
# Creates a new topic.
|
151
165
|
#
|
152
|
-
# @param [String] topic_name Name of a topic.
|
153
|
-
#
|
154
|
-
#
|
166
|
+
# @param [String] topic_name Name of a topic. Required.
|
167
|
+
# The value can be a simple topic ID (relative name), in which
|
168
|
+
# case the current project ID will be supplied, or a fully-qualified
|
169
|
+
# topic name in the form `projects/{project_id}/topics/{topic_id}`.
|
170
|
+
#
|
171
|
+
# The topic ID (relative name) must start with a letter, and
|
172
|
+
# contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
|
173
|
+
# underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
|
174
|
+
# signs (`%`). It must be between 3 and 255 characters in length, and
|
175
|
+
# it must not start with `goog`.
|
176
|
+
# @param [Hash] labels A hash of user-provided labels associated with
|
177
|
+
# the topic. You can use these to organize and group your topics.
|
178
|
+
# Label keys and values can be no longer than 63 characters, can only
|
179
|
+
# contain lowercase letters, numeric characters, underscores and
|
180
|
+
# dashes. International characters are allowed. Label values are
|
181
|
+
# optional. Label keys must start with a letter and each label in the
|
182
|
+
# list must have a different key. See [Creating and Managing
|
183
|
+
# Labels](https://cloud.google.com/pubsub/docs/labels).
|
184
|
+
# @param [String] kms_key The Cloud KMS encryption key that will be used
|
185
|
+
# to protect access to messages published on this topic. Optional.
|
186
|
+
# For example: `projects/a/locations/b/keyRings/c/cryptoKeys/d`
|
187
|
+
# @param [Array<String>] persistence_regions The list of GCP region IDs
|
188
|
+
# where messages that are published to the topic may be persisted in
|
189
|
+
# storage. Optional.
|
190
|
+
# @param [Hash] async A hash of values to configure the topic's
|
191
|
+
# {AsyncPublisher} that is created when {Topic#publish_async}
|
192
|
+
# is called. Optional.
|
193
|
+
#
|
194
|
+
# Hash keys and values may include the following:
|
195
|
+
#
|
196
|
+
# * `:max_bytes` (Integer) The maximum size of messages to be collected
|
197
|
+
# before the batch is published. Default is 1,000,000 (1MB).
|
198
|
+
# * `:max_messages` (Integer) The maximum number of messages to be
|
199
|
+
# collected before the batch is published. Default is 100.
|
200
|
+
# * `:interval` (Numeric) The number of seconds to collect messages before
|
201
|
+
# the batch is published. Default is 0.01.
|
202
|
+
# * `:threads` (Hash) The number of threads to create to handle concurrent
|
203
|
+
# calls by the publisher:
|
204
|
+
#
|
205
|
+
# * `:publish` (Integer) The number of threads used to publish messages.
|
206
|
+
# Default is 2.
|
207
|
+
# * `:callback` (Integer) The number of threads to handle the published
|
208
|
+
# messages' callbacks. Default is 4.
|
209
|
+
# @param [String] schema_name The name of the schema that messages
|
210
|
+
# published should be validated against. Optional. The value can be a
|
211
|
+
# simple schema ID (relative name), in which case the current project
|
212
|
+
# ID will be supplied, or a fully-qualified schema name in the form
|
213
|
+
# `projects/{project_id}/schemas/{schema_id}`. If provided,
|
214
|
+
# `message_encoding` must also be provided.
|
215
|
+
# @param [String, Symbol] message_encoding The encoding of messages validated
|
216
|
+
# against the schema identified by `schema_name`. Optional. Values include:
|
217
|
+
#
|
218
|
+
# * `JSON` - JSON encoding.
|
219
|
+
# * `BINARY` - Binary encoding, as defined by the schema type. For some
|
220
|
+
# schema types, binary encoding may not be available.
|
221
|
+
#
|
222
|
+
# @return [Google::Cloud::PubSub::Topic]
|
155
223
|
#
|
156
224
|
# @example
|
157
225
|
# require "google/cloud/pubsub"
|
158
226
|
#
|
159
|
-
# pubsub = Google::Cloud::
|
227
|
+
# pubsub = Google::Cloud::PubSub.new
|
160
228
|
# topic = pubsub.create_topic "my-topic"
|
161
229
|
#
|
162
|
-
def create_topic topic_name
|
230
|
+
def create_topic topic_name,
|
231
|
+
labels: nil,
|
232
|
+
kms_key: nil,
|
233
|
+
persistence_regions: nil,
|
234
|
+
async: nil,
|
235
|
+
schema_name: nil,
|
236
|
+
message_encoding: nil
|
163
237
|
ensure_service!
|
164
|
-
grpc = service.create_topic topic_name
|
165
|
-
|
238
|
+
grpc = service.create_topic topic_name,
|
239
|
+
labels: labels,
|
240
|
+
kms_key_name: kms_key,
|
241
|
+
persistence_regions: persistence_regions,
|
242
|
+
schema_name: schema_name,
|
243
|
+
message_encoding: message_encoding
|
244
|
+
Topic.from_grpc grpc, service, async: async
|
166
245
|
end
|
167
|
-
|
246
|
+
alias new_topic create_topic
|
168
247
|
|
169
248
|
##
|
170
249
|
# Retrieves a list of topics for the given project.
|
@@ -174,13 +253,13 @@ module Google
|
|
174
253
|
# the system should return the next page of data.
|
175
254
|
# @param [Integer] max Maximum number of topics to return.
|
176
255
|
#
|
177
|
-
# @return [Array<Google::Cloud::
|
178
|
-
# {Google::Cloud::
|
256
|
+
# @return [Array<Google::Cloud::PubSub::Topic>] (See
|
257
|
+
# {Google::Cloud::PubSub::Topic::List})
|
179
258
|
#
|
180
259
|
# @example
|
181
260
|
# require "google/cloud/pubsub"
|
182
261
|
#
|
183
|
-
# pubsub = Google::Cloud::
|
262
|
+
# pubsub = Google::Cloud::PubSub.new
|
184
263
|
#
|
185
264
|
# topics = pubsub.topics
|
186
265
|
# topics.each do |topic|
|
@@ -190,7 +269,7 @@ module Google
|
|
190
269
|
# @example Retrieve all topics: (See {Topic::List#all})
|
191
270
|
# require "google/cloud/pubsub"
|
192
271
|
#
|
193
|
-
# pubsub = Google::Cloud::
|
272
|
+
# pubsub = Google::Cloud::PubSub.new
|
194
273
|
#
|
195
274
|
# topics = pubsub.topics
|
196
275
|
# topics.all do |topic|
|
@@ -203,183 +282,32 @@ module Google
|
|
203
282
|
grpc = service.list_topics options
|
204
283
|
Topic::List.from_grpc grpc, service, max
|
205
284
|
end
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
##
|
210
|
-
# Publishes one or more messages to the given topic. The topic will be
|
211
|
-
# created if the topic does previously not exist and the `autocreate`
|
212
|
-
# option is provided.
|
213
|
-
#
|
214
|
-
# A note about auto-creating the topic: Any message published to a topic
|
215
|
-
# without a subscription will be lost.
|
216
|
-
#
|
217
|
-
# @param [String] topic_name Name of a topic.
|
218
|
-
# @param [String, File] data The message data.
|
219
|
-
# @param [Hash] attributes Optional attributes for the message.
|
220
|
-
# @option attributes [Boolean] :autocreate Flag to control whether the
|
221
|
-
# provided topic will be created if it does not exist.
|
222
|
-
# @yield [publisher] a block for publishing multiple messages in one
|
223
|
-
# request
|
224
|
-
# @yieldparam [Topic::Publisher] publisher the topic publisher object
|
225
|
-
#
|
226
|
-
# @return [Message, Array<Message>] Returns the published message when
|
227
|
-
# called without a block, or an array of messages when called with a
|
228
|
-
# block.
|
229
|
-
#
|
230
|
-
# @example
|
231
|
-
# require "google/cloud/pubsub"
|
232
|
-
#
|
233
|
-
# pubsub = Google::Cloud::Pubsub.new
|
234
|
-
#
|
235
|
-
# msg = pubsub.publish "my-topic", "task completed"
|
236
|
-
#
|
237
|
-
# @example A message can be published using a File object:
|
238
|
-
# require "google/cloud/pubsub"
|
239
|
-
#
|
240
|
-
# pubsub = Google::Cloud::Pubsub.new
|
241
|
-
#
|
242
|
-
# msg = pubsub.publish "my-topic", File.open("message.txt")
|
243
|
-
#
|
244
|
-
# @example Additionally, a message can be published with attributes:
|
245
|
-
# require "google/cloud/pubsub"
|
246
|
-
#
|
247
|
-
# pubsub = Google::Cloud::Pubsub.new
|
248
|
-
#
|
249
|
-
# msg = pubsub.publish "my-topic", "task completed", foo: :bar,
|
250
|
-
# this: :that
|
251
|
-
#
|
252
|
-
# @example Multiple messages can be sent at the same time using a block:
|
253
|
-
# require "google/cloud/pubsub"
|
254
|
-
#
|
255
|
-
# pubsub = Google::Cloud::Pubsub.new
|
256
|
-
#
|
257
|
-
# msgs = pubsub.publish "my-topic" do |p|
|
258
|
-
# p.publish "task 1 completed", foo: :bar
|
259
|
-
# p.publish "task 2 completed", foo: :baz
|
260
|
-
# p.publish "task 3 completed", foo: :bif
|
261
|
-
# end
|
262
|
-
#
|
263
|
-
# @example With `autocreate`:
|
264
|
-
# require "google/cloud/pubsub"
|
265
|
-
#
|
266
|
-
# pubsub = Google::Cloud::Pubsub.new
|
267
|
-
#
|
268
|
-
# msg = pubsub.publish "new-topic", "task completed", autocreate: true
|
269
|
-
#
|
270
|
-
def publish topic_name, data = nil, attributes = {}
|
271
|
-
# Fix parameters
|
272
|
-
if data.is_a?(::Hash) && attributes.empty?
|
273
|
-
attributes = data
|
274
|
-
data = nil
|
275
|
-
end
|
276
|
-
# extract autocreate option
|
277
|
-
autocreate = attributes.delete :autocreate
|
278
|
-
ensure_service!
|
279
|
-
publisher = Topic::Publisher.new data, attributes
|
280
|
-
yield publisher if block_given?
|
281
|
-
return nil if publisher.messages.count.zero?
|
282
|
-
publish_batch_messages topic_name, publisher, autocreate
|
283
|
-
end
|
284
|
-
|
285
|
-
##
|
286
|
-
# Creates a new {Subscription} object for the provided topic. The topic
|
287
|
-
# will be created if the topic does previously not exist and the
|
288
|
-
# `autocreate` option is provided.
|
289
|
-
#
|
290
|
-
# @param [String] topic_name Name of a topic.
|
291
|
-
# @param [String] subscription_name Name of the new subscription. Must
|
292
|
-
# start with a letter, and contain only letters ([A-Za-z]), numbers
|
293
|
-
# ([0-9], dashes (-), underscores (_), periods (.), tildes (~), plus
|
294
|
-
# (+) or percent signs (%). It must be between 3 and 255 characters in
|
295
|
-
# length, and it must not start with "goog".
|
296
|
-
# @param [Integer] deadline The maximum number of seconds after a
|
297
|
-
# subscriber receives a message before the subscriber should
|
298
|
-
# acknowledge the message.
|
299
|
-
# @param [Boolean] retain_acked Indicates whether to retain acknowledged
|
300
|
-
# messages. If `true`, then messages are not expunged from the
|
301
|
-
# subscription's backlog, even if they are acknowledged, until they
|
302
|
-
# fall out of the `retention_duration` window. Default is `false`.
|
303
|
-
# @param [Numeric] retention How long to retain unacknowledged messages
|
304
|
-
# in the subscription's backlog, from the moment a message is
|
305
|
-
# published. If `retain_acked` is `true`, then this also configures
|
306
|
-
# the retention of acknowledged messages, and thus configures how far
|
307
|
-
# back in time a {#seek} can be done. Cannot be more than 604,800
|
308
|
-
# seconds (7 days) or less than 600 seconds (10 minutes). Default is
|
309
|
-
# 604,800 seconds (7 days).
|
310
|
-
# @param [String] endpoint A URL locating the endpoint to which messages
|
311
|
-
# should be pushed.
|
312
|
-
# @param [String] autocreate Flag to control whether the topic will be
|
313
|
-
# created if it does not exist.
|
314
|
-
#
|
315
|
-
# @return [Google::Cloud::Pubsub::Subscription]
|
316
|
-
#
|
317
|
-
# @example
|
318
|
-
# require "google/cloud/pubsub"
|
319
|
-
#
|
320
|
-
# pubsub = Google::Cloud::Pubsub.new
|
321
|
-
#
|
322
|
-
# sub = pubsub.subscribe "my-topic", "my-topic-sub"
|
323
|
-
# sub.name #=> "my-topic-sub"
|
324
|
-
#
|
325
|
-
# @example Wait 2 minutes for acknowledgement and push all to endpoint:
|
326
|
-
# require "google/cloud/pubsub"
|
327
|
-
#
|
328
|
-
# pubsub = Google::Cloud::Pubsub.new
|
329
|
-
#
|
330
|
-
# sub = pubsub.subscribe "my-topic", "my-topic-sub",
|
331
|
-
# deadline: 120,
|
332
|
-
# endpoint: "https://example.com/push"
|
333
|
-
#
|
334
|
-
# @example With `autocreate`:
|
335
|
-
# require "google/cloud/pubsub"
|
336
|
-
#
|
337
|
-
# pubsub = Google::Cloud::Pubsub.new
|
338
|
-
#
|
339
|
-
# sub = pubsub.subscribe "new-topic", "new-topic-sub",
|
340
|
-
# autocreate: true
|
341
|
-
#
|
342
|
-
def subscribe topic_name, subscription_name, deadline: nil,
|
343
|
-
retain_acked: false, retention: nil, endpoint: nil,
|
344
|
-
autocreate: nil
|
345
|
-
ensure_service!
|
346
|
-
options = { deadline: deadline, retain_acked: retain_acked,
|
347
|
-
retention: retention, endpoint: endpoint }
|
348
|
-
grpc = service.create_subscription topic_name,
|
349
|
-
subscription_name, options
|
350
|
-
Subscription.from_grpc grpc, service
|
351
|
-
rescue Google::Cloud::NotFoundError => e
|
352
|
-
if autocreate
|
353
|
-
create_topic topic_name
|
354
|
-
return subscribe(topic_name, subscription_name,
|
355
|
-
deadline: deadline, retain_acked: retain_acked,
|
356
|
-
retention: retention, endpoint: endpoint,
|
357
|
-
autocreate: false)
|
358
|
-
end
|
359
|
-
raise e
|
360
|
-
end
|
361
|
-
alias_method :create_subscription, :subscribe
|
362
|
-
alias_method :new_subscription, :subscribe
|
285
|
+
alias find_topics topics
|
286
|
+
alias list_topics topics
|
363
287
|
|
364
288
|
##
|
365
289
|
# Retrieves subscription by name.
|
366
290
|
#
|
367
|
-
# @param [String] subscription_name Name of a subscription.
|
291
|
+
# @param [String] subscription_name Name of a subscription. The value can
|
292
|
+
# be a simple subscription ID, in which case the current project ID
|
293
|
+
# will be supplied, or a fully-qualified subscription name in the form
|
294
|
+
# `projects/{project_id}/subscriptions/{subscription_id}`.
|
368
295
|
# @param [String] project If the subscription belongs to a project other
|
369
296
|
# than the one currently connected to, the alternate project ID can be
|
370
|
-
# specified here.
|
297
|
+
# specified here. Not used if a fully-qualified subscription name is
|
298
|
+
# provided for `subscription_name`.
|
371
299
|
# @param [Boolean] skip_lookup Optionally create a {Subscription} object
|
372
300
|
# without verifying the subscription resource exists on the Pub/Sub
|
373
301
|
# service. Calls made on this object will raise errors if the service
|
374
302
|
# resource does not exist. Default is `false`.
|
375
303
|
#
|
376
|
-
# @return [Google::Cloud::
|
304
|
+
# @return [Google::Cloud::PubSub::Subscription, nil] Returns `nil` if
|
377
305
|
# the subscription does not exist
|
378
306
|
#
|
379
307
|
# @example
|
380
308
|
# require "google/cloud/pubsub"
|
381
309
|
#
|
382
|
-
# pubsub = Google::Cloud::
|
310
|
+
# pubsub = Google::Cloud::PubSub.new
|
383
311
|
#
|
384
312
|
# sub = pubsub.subscription "my-sub"
|
385
313
|
# sub.name #=> "projects/my-project/subscriptions/my-sub"
|
@@ -387,7 +315,7 @@ module Google
|
|
387
315
|
# @example Skip the lookup against the service with `skip_lookup`:
|
388
316
|
# require "google/cloud/pubsub"
|
389
317
|
#
|
390
|
-
# pubsub = Google::Cloud::
|
318
|
+
# pubsub = Google::Cloud::PubSub.new
|
391
319
|
#
|
392
320
|
# # No API call is made to retrieve the subscription information.
|
393
321
|
# sub = pubsub.subscription "my-sub", skip_lookup: true
|
@@ -396,16 +324,14 @@ module Google
|
|
396
324
|
def subscription subscription_name, project: nil, skip_lookup: nil
|
397
325
|
ensure_service!
|
398
326
|
options = { project: project }
|
399
|
-
if skip_lookup
|
400
|
-
|
401
|
-
end
|
402
|
-
grpc = service.get_subscription subscription_name
|
327
|
+
return Subscription.from_name subscription_name, service, options if skip_lookup
|
328
|
+
grpc = service.get_subscription subscription_name, options
|
403
329
|
Subscription.from_grpc grpc, service
|
404
330
|
rescue Google::Cloud::NotFoundError
|
405
331
|
nil
|
406
332
|
end
|
407
|
-
|
408
|
-
|
333
|
+
alias get_subscription subscription
|
334
|
+
alias find_subscription subscription
|
409
335
|
|
410
336
|
##
|
411
337
|
# Retrieves a list of subscriptions for the given project.
|
@@ -414,13 +340,13 @@ module Google
|
|
414
340
|
# part of the larger set of results to view.
|
415
341
|
# @param [Integer] max Maximum number of subscriptions to return.
|
416
342
|
#
|
417
|
-
# @return [Array<Google::Cloud::
|
418
|
-
# {Google::Cloud::
|
343
|
+
# @return [Array<Google::Cloud::PubSub::Subscription>] (See
|
344
|
+
# {Google::Cloud::PubSub::Subscription::List})
|
419
345
|
#
|
420
346
|
# @example
|
421
347
|
# require "google/cloud/pubsub"
|
422
348
|
#
|
423
|
-
# pubsub = Google::Cloud::
|
349
|
+
# pubsub = Google::Cloud::PubSub.new
|
424
350
|
#
|
425
351
|
# subs = pubsub.subscriptions
|
426
352
|
# subs.each do |sub|
|
@@ -430,7 +356,7 @@ module Google
|
|
430
356
|
# @example Retrieve all subscriptions: (See {Subscription::List#all})
|
431
357
|
# require "google/cloud/pubsub"
|
432
358
|
#
|
433
|
-
# pubsub = Google::Cloud::
|
359
|
+
# pubsub = Google::Cloud::PubSub.new
|
434
360
|
#
|
435
361
|
# subs = pubsub.subscriptions
|
436
362
|
# subs.all do |sub|
|
@@ -443,8 +369,8 @@ module Google
|
|
443
369
|
grpc = service.list_subscriptions options
|
444
370
|
Subscription::List.from_grpc grpc, service, max
|
445
371
|
end
|
446
|
-
|
447
|
-
|
372
|
+
alias find_subscriptions subscriptions
|
373
|
+
alias list_subscriptions subscriptions
|
448
374
|
|
449
375
|
|
450
376
|
##
|
@@ -454,13 +380,13 @@ module Google
|
|
454
380
|
# part of the larger set of results to view.
|
455
381
|
# @param [Integer] max Maximum number of snapshots to return.
|
456
382
|
#
|
457
|
-
# @return [Array<Google::Cloud::
|
458
|
-
# {Google::Cloud::
|
383
|
+
# @return [Array<Google::Cloud::PubSub::Snapshot>] (See
|
384
|
+
# {Google::Cloud::PubSub::Snapshot::List})
|
459
385
|
#
|
460
386
|
# @example
|
461
387
|
# require "google/cloud/pubsub"
|
462
388
|
#
|
463
|
-
# pubsub = Google::Cloud::
|
389
|
+
# pubsub = Google::Cloud::PubSub.new
|
464
390
|
#
|
465
391
|
# snapshots = pubsub.snapshots
|
466
392
|
# snapshots.each do |snapshot|
|
@@ -470,7 +396,7 @@ module Google
|
|
470
396
|
# @example Retrieve all snapshots: (See {Snapshot::List#all})
|
471
397
|
# require "google/cloud/pubsub"
|
472
398
|
#
|
473
|
-
# pubsub = Google::Cloud::
|
399
|
+
# pubsub = Google::Cloud::PubSub.new
|
474
400
|
#
|
475
401
|
# snapshots = pubsub.snapshots
|
476
402
|
# snapshots.all do |snapshot|
|
@@ -483,8 +409,200 @@ module Google
|
|
483
409
|
grpc = service.list_snapshots options
|
484
410
|
Snapshot::List.from_grpc grpc, service, max
|
485
411
|
end
|
486
|
-
|
487
|
-
|
412
|
+
alias find_snapshots snapshots
|
413
|
+
alias list_snapshots snapshots
|
414
|
+
|
415
|
+
##
|
416
|
+
# Retrieves schema by name.
|
417
|
+
#
|
418
|
+
# @param [String] schema_name Name of a schema. The value can
|
419
|
+
# be a simple schema ID, in which case the current project ID
|
420
|
+
# will be supplied, or a fully-qualified schema name in the form
|
421
|
+
# `projects/{project_id}/schemas/{schema_id}`.
|
422
|
+
# @param view [Symbol, String, nil] Possible values:
|
423
|
+
# * `BASIC` - Include the `name` and `type` of the schema, but not the `definition`.
|
424
|
+
# * `FULL` - Include all Schema object fields.
|
425
|
+
#
|
426
|
+
# The default value is `BASIC`.
|
427
|
+
# @param [String] project If the schema belongs to a project other
|
428
|
+
# than the one currently connected to, the alternate project ID can be
|
429
|
+
# specified here. Not used if a fully-qualified schema name is
|
430
|
+
# provided for `schema_name`.
|
431
|
+
# @param [Boolean] skip_lookup Optionally create a {Schema} object
|
432
|
+
# without verifying the schema resource exists on the Pub/Sub
|
433
|
+
# service. Calls made on this object will raise errors if the service
|
434
|
+
# resource does not exist. Default is `false`.
|
435
|
+
#
|
436
|
+
# @return [Google::Cloud::PubSub::Schema, nil] Returns `nil` if
|
437
|
+
# the schema does not exist.
|
438
|
+
#
|
439
|
+
# @example
|
440
|
+
# require "google/cloud/pubsub"
|
441
|
+
#
|
442
|
+
# pubsub = Google::Cloud::PubSub.new
|
443
|
+
#
|
444
|
+
# schema = pubsub.schema "my-schema"
|
445
|
+
# schema.name #=> "projects/my-project/schemas/my-schema"
|
446
|
+
# schema.type #=> :PROTOCOL_BUFFER
|
447
|
+
# # schema.definition # nil - Use view: :full to load complete resource.
|
448
|
+
#
|
449
|
+
# @example Skip the lookup against the service with `skip_lookup`:
|
450
|
+
# require "google/cloud/pubsub"
|
451
|
+
#
|
452
|
+
# pubsub = Google::Cloud::PubSub.new
|
453
|
+
#
|
454
|
+
# # No API call is made to retrieve the schema information.
|
455
|
+
# # The default project is used in the name.
|
456
|
+
# schema = pubsub.schema "my-schema", skip_lookup: true
|
457
|
+
# schema.name #=> "projects/my-project/schemas/my-schema"
|
458
|
+
# schema.type #=> nil
|
459
|
+
# schema.definition #=> nil
|
460
|
+
#
|
461
|
+
# @example Get the schema definition with `view: :full`:
|
462
|
+
# require "google/cloud/pubsub"
|
463
|
+
#
|
464
|
+
# pubsub = Google::Cloud::PubSub.new
|
465
|
+
#
|
466
|
+
# schema = pubsub.schema "my-schema", view: :full
|
467
|
+
# schema.name #=> "projects/my-project/schemas/my-schema"
|
468
|
+
# schema.type #=> :PROTOCOL_BUFFER
|
469
|
+
# schema.definition # The schema definition
|
470
|
+
#
|
471
|
+
def schema schema_name, view: nil, project: nil, skip_lookup: nil
|
472
|
+
ensure_service!
|
473
|
+
options = { project: project }
|
474
|
+
return Schema.from_name schema_name, view, service, options if skip_lookup
|
475
|
+
view ||= :BASIC
|
476
|
+
grpc = service.get_schema schema_name, view, options
|
477
|
+
Schema.from_grpc grpc, service
|
478
|
+
rescue Google::Cloud::NotFoundError
|
479
|
+
nil
|
480
|
+
end
|
481
|
+
alias get_schema schema
|
482
|
+
alias find_schema schema
|
483
|
+
|
484
|
+
##
|
485
|
+
# Creates a new schema.
|
486
|
+
#
|
487
|
+
# @param [String] schema_id The ID to use for the schema, which will
|
488
|
+
# become the final component of the schema's resource name. Required.
|
489
|
+
#
|
490
|
+
# The schema ID (relative name) must start with a letter, and
|
491
|
+
# contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
|
492
|
+
# underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
|
493
|
+
# signs (`%`). It must be between 3 and 255 characters in length, and
|
494
|
+
# it must not start with `goog`.
|
495
|
+
# @param [String, Symbol] type The type of the schema. Required. Possible
|
496
|
+
# values are case-insensitive and include:
|
497
|
+
#
|
498
|
+
# * `PROTOCOL_BUFFER` - A Protocol Buffer schema definition.
|
499
|
+
# * `AVRO` - An Avro schema definition.
|
500
|
+
# @param [String] definition The definition of the schema. Required. This
|
501
|
+
# should be a string representing the full definition of the schema that
|
502
|
+
# is a valid schema definition of the type specified in `type`.
|
503
|
+
# @param [String] project If the schema belongs to a project other
|
504
|
+
# than the one currently connected to, the alternate project ID can be
|
505
|
+
# specified here. Optional.
|
506
|
+
#
|
507
|
+
# @return [Google::Cloud::PubSub::Schema]
|
508
|
+
#
|
509
|
+
# @example
|
510
|
+
# require "google/cloud/pubsub"
|
511
|
+
#
|
512
|
+
# pubsub = Google::Cloud::PubSub.new
|
513
|
+
#
|
514
|
+
# definition = "..."
|
515
|
+
# schema = pubsub.create_schema "my-schema", :avro, definition
|
516
|
+
# schema.name #=> "projects/my-project/schemas/my-schema"
|
517
|
+
#
|
518
|
+
def create_schema schema_id, type, definition, project: nil
|
519
|
+
ensure_service!
|
520
|
+
type = type.to_s.upcase
|
521
|
+
grpc = service.create_schema schema_id, type, definition, project: project
|
522
|
+
Schema.from_grpc grpc, service
|
523
|
+
end
|
524
|
+
alias new_schema create_schema
|
525
|
+
|
526
|
+
##
|
527
|
+
# Retrieves a list of schemas for the given project.
|
528
|
+
#
|
529
|
+
# @param view [String, Symbol, nil] The set of fields to return in the response. Possible values:
|
530
|
+
#
|
531
|
+
# * `BASIC` - Include the `name` and `type` of the schema, but not the `definition`.
|
532
|
+
# * `FULL` - Include all Schema object fields.
|
533
|
+
#
|
534
|
+
# The default value is `BASIC`.
|
535
|
+
# @param [String] token A previously-returned page token representing
|
536
|
+
# part of the larger set of results to view.
|
537
|
+
# @param [Integer] max Maximum number of schemas to return.
|
538
|
+
#
|
539
|
+
# @return [Array<Google::Cloud::PubSub::Schema>] (See
|
540
|
+
# {Google::Cloud::PubSub::Schema::List})
|
541
|
+
#
|
542
|
+
# @example
|
543
|
+
# require "google/cloud/pubsub"
|
544
|
+
#
|
545
|
+
# pubsub = Google::Cloud::PubSub.new
|
546
|
+
#
|
547
|
+
# schemas = pubsub.schemas
|
548
|
+
# schemas.each do |schema|
|
549
|
+
# puts schema.name
|
550
|
+
# end
|
551
|
+
#
|
552
|
+
# @example Retrieve all schemas: (See {Schema::List#all})
|
553
|
+
# require "google/cloud/pubsub"
|
554
|
+
#
|
555
|
+
# pubsub = Google::Cloud::PubSub.new
|
556
|
+
#
|
557
|
+
# schemas = pubsub.schemas
|
558
|
+
# schemas.all do |schema|
|
559
|
+
# puts schema.name
|
560
|
+
# end
|
561
|
+
#
|
562
|
+
def schemas view: nil, token: nil, max: nil
|
563
|
+
ensure_service!
|
564
|
+
view ||= :BASIC
|
565
|
+
options = { token: token, max: max }
|
566
|
+
grpc = service.list_schemas view, options
|
567
|
+
Schema::List.from_grpc grpc, service, view, max
|
568
|
+
end
|
569
|
+
alias find_schemas schemas
|
570
|
+
alias list_schemas schemas
|
571
|
+
|
572
|
+
##
|
573
|
+
# Validates a schema type and definition.
|
574
|
+
#
|
575
|
+
# @param [String, Symbol] type The type of the schema. Required. Possible
|
576
|
+
# values are case-insensitive and include:
|
577
|
+
#
|
578
|
+
# * `PROTOCOL_BUFFER` - A Protocol Buffer schema definition.
|
579
|
+
# * `AVRO` - An Avro schema definition.
|
580
|
+
# @param [String] definition The definition of the schema. Required. This
|
581
|
+
# should be a string representing the full definition of the schema that
|
582
|
+
# is a valid schema definition of the type specified in `type`.
|
583
|
+
# @param [String] project If the schema belongs to a project other
|
584
|
+
# than the one currently connected to, the alternate project ID can be
|
585
|
+
# specified here. Optional.
|
586
|
+
#
|
587
|
+
# @return [Boolean] `true` if the schema is valid, `false` otherwise.
|
588
|
+
#
|
589
|
+
# @example
|
590
|
+
# require "google/cloud/pubsub"
|
591
|
+
#
|
592
|
+
# pubsub = Google::Cloud::PubSub.new
|
593
|
+
#
|
594
|
+
# definition = "..."
|
595
|
+
# pubsub.validate_schema :avro, definition #=> true
|
596
|
+
#
|
597
|
+
def valid_schema? type, definition, project: nil
|
598
|
+
ensure_service!
|
599
|
+
type = type.to_s.upcase
|
600
|
+
service.validate_schema type, definition, project: project # return type is empty
|
601
|
+
true
|
602
|
+
rescue Google::Cloud::InvalidArgumentError
|
603
|
+
false
|
604
|
+
end
|
605
|
+
alias validate_schema valid_schema?
|
488
606
|
|
489
607
|
protected
|
490
608
|
|
@@ -492,22 +610,18 @@ module Google
|
|
492
610
|
# @private Raise an error unless an active connection to the service is
|
493
611
|
# available.
|
494
612
|
def ensure_service!
|
495
|
-
|
613
|
+
raise "Must have active connection to service" unless service
|
496
614
|
end
|
497
615
|
|
498
616
|
##
|
499
617
|
# Call the publish API with arrays of data data and attrs.
|
500
|
-
def publish_batch_messages topic_name, batch
|
618
|
+
def publish_batch_messages topic_name, batch
|
501
619
|
grpc = service.publish topic_name, batch.messages
|
502
620
|
batch.to_gcloud_messages Array(grpc.message_ids)
|
503
|
-
rescue Google::Cloud::NotFoundError => e
|
504
|
-
if autocreate
|
505
|
-
create_topic topic_name
|
506
|
-
return publish_batch_messages topic_name, batch, false
|
507
|
-
end
|
508
|
-
raise e
|
509
621
|
end
|
510
622
|
end
|
511
623
|
end
|
624
|
+
|
625
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
512
626
|
end
|
513
627
|
end
|