google-cloud-pubsub 1.0.2 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/AUTHENTICATION.md +16 -54
- data/CHANGELOG.md +464 -0
- data/CONTRIBUTING.md +328 -116
- data/EMULATOR.md +1 -1
- data/LOGGING.md +94 -2
- data/OVERVIEW.md +121 -68
- data/TROUBLESHOOTING.md +2 -8
- data/lib/google/cloud/pubsub/acknowledge_result.rb +79 -0
- data/lib/google/cloud/pubsub/async_publisher/batch.rb +319 -0
- data/lib/google/cloud/pubsub/async_publisher.rb +231 -156
- data/lib/google/cloud/pubsub/batch_publisher.rb +60 -30
- data/lib/google/cloud/pubsub/convert.rb +33 -7
- data/lib/google/cloud/pubsub/credentials.rb +2 -2
- data/lib/google/cloud/pubsub/errors.rb +93 -0
- data/lib/google/cloud/pubsub/flow_controller.rb +137 -0
- data/lib/google/cloud/pubsub/message.rb +45 -4
- data/lib/google/cloud/pubsub/policy.rb +3 -2
- data/lib/google/cloud/pubsub/project.rb +316 -49
- data/lib/google/cloud/pubsub/publish_result.rb +6 -1
- data/lib/google/cloud/pubsub/received_message.rb +171 -10
- 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 +285 -269
- data/lib/google/cloud/pubsub/snapshot/list.rb +4 -6
- data/lib/google/cloud/pubsub/snapshot.rb +5 -2
- data/lib/google/cloud/pubsub/subscriber/inventory.rb +69 -32
- data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
- data/lib/google/cloud/pubsub/subscriber/stream.rb +108 -49
- data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +191 -30
- data/lib/google/cloud/pubsub/subscriber.rb +155 -45
- data/lib/google/cloud/pubsub/subscription/list.rb +4 -6
- data/lib/google/cloud/pubsub/subscription/push_config.rb +55 -31
- data/lib/google/cloud/pubsub/subscription.rb +561 -77
- data/lib/google/cloud/pubsub/topic/list.rb +4 -6
- data/lib/google/cloud/pubsub/topic.rb +372 -52
- data/lib/google/cloud/pubsub/version.rb +1 -1
- data/lib/google/cloud/pubsub.rb +35 -46
- data/lib/google-cloud-pubsub.rb +21 -27
- metadata +26 -189
- data/lib/google/cloud/pubsub/v1/credentials.rb +0 -41
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +0 -21
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -91
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +0 -29
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -222
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -113
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -744
- data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +0 -19
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -786
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -105
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1385
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -138
- data/lib/google/cloud/pubsub/v1.rb +0 -17
- data/lib/google/pubsub/v1/pubsub_pb.rb +0 -249
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -211
@@ -0,0 +1,310 @@
|
|
1
|
+
# Copyright 2021 Google LLC
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
|
16
|
+
require "google/cloud/pubsub/schema/list"
|
17
|
+
require "google/cloud/pubsub/v1"
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Cloud
|
21
|
+
module PubSub
|
22
|
+
##
|
23
|
+
# # Schema
|
24
|
+
#
|
25
|
+
# A schema resource.
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# require "google/cloud/pubsub"
|
29
|
+
#
|
30
|
+
# pubsub = Google::Cloud::PubSub.new
|
31
|
+
#
|
32
|
+
# schema = pubsub.schema "my-schema"
|
33
|
+
# schema.name #=> "projects/my-project/schemas/my-schema"
|
34
|
+
# schema.type #=> :PROTOCOL_BUFFER
|
35
|
+
#
|
36
|
+
class Schema
|
37
|
+
##
|
38
|
+
# @private The Service object.
|
39
|
+
attr_accessor :service
|
40
|
+
|
41
|
+
##
|
42
|
+
# @private The gRPC Google::Cloud::PubSub::V1::Schema object.
|
43
|
+
attr_accessor :grpc
|
44
|
+
|
45
|
+
##
|
46
|
+
# @private Create a new Schema instance.
|
47
|
+
def initialize grpc, service, view: nil
|
48
|
+
@grpc = grpc
|
49
|
+
@service = service
|
50
|
+
@exists = nil
|
51
|
+
@view = view || :FULL
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# The name of the schema.
|
56
|
+
#
|
57
|
+
# @return [String] A fully-qualified schema name in the form `projects/{project_id}/schemas/{schema_id}`.
|
58
|
+
#
|
59
|
+
def name
|
60
|
+
@grpc.name
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# The type of the schema. Possible values include:
|
65
|
+
#
|
66
|
+
# * `PROTOCOL_BUFFER` - A Protocol Buffer schema definition.
|
67
|
+
# * `AVRO` - An Avro schema definition.
|
68
|
+
#
|
69
|
+
# @return [String, nil] The upper-case type name.
|
70
|
+
#
|
71
|
+
def type
|
72
|
+
return nil if reference?
|
73
|
+
@grpc.type
|
74
|
+
end
|
75
|
+
|
76
|
+
##
|
77
|
+
# The definition of the schema. This should be a string representing the full definition of the schema that is a
|
78
|
+
# valid schema definition of the type specified in {#type}.
|
79
|
+
#
|
80
|
+
# @return [String, nil] The schema definition.
|
81
|
+
#
|
82
|
+
def definition
|
83
|
+
return nil if reference?
|
84
|
+
@grpc.definition if @grpc.definition && !@grpc.definition.empty?
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Validates a message against a schema.
|
89
|
+
#
|
90
|
+
# @param message_data [String] Message to validate against the provided `schema_spec`.
|
91
|
+
# @param message_encoding [Symbol, String] The encoding of the message validated against the schema. Values
|
92
|
+
# include:
|
93
|
+
#
|
94
|
+
# * `JSON` - JSON encoding.
|
95
|
+
# * `BINARY` - Binary encoding, as defined by the schema type. For some schema types, binary encoding may not
|
96
|
+
# be available.
|
97
|
+
#
|
98
|
+
# @return [Boolean] Returns `true` if the message validiation succeeds, `false` otherwise.
|
99
|
+
#
|
100
|
+
# @example
|
101
|
+
# require "google/cloud/pubsub"
|
102
|
+
#
|
103
|
+
# pubsub = Google::Cloud::PubSub.new
|
104
|
+
# schema = pubsub.schema "my-schema"
|
105
|
+
#
|
106
|
+
# message_data = { "name" => "Alaska", "post_abbr" => "AK" }.to_json
|
107
|
+
# schema.validate_message message_data, :json
|
108
|
+
#
|
109
|
+
def validate_message message_data, message_encoding
|
110
|
+
message_encoding = message_encoding.to_s.upcase
|
111
|
+
service.validate_message message_data, message_encoding, schema_name: name
|
112
|
+
true
|
113
|
+
rescue Google::Cloud::InvalidArgumentError
|
114
|
+
false
|
115
|
+
end
|
116
|
+
|
117
|
+
##
|
118
|
+
# Removes the schema, if it exists.
|
119
|
+
#
|
120
|
+
# @return [Boolean] Returns `true` if the schema was deleted.
|
121
|
+
#
|
122
|
+
# @example
|
123
|
+
# require "google/cloud/pubsub"
|
124
|
+
#
|
125
|
+
# pubsub = Google::Cloud::PubSub.new
|
126
|
+
# schema = pubsub.schema "my-schema"
|
127
|
+
#
|
128
|
+
# schema.delete
|
129
|
+
#
|
130
|
+
def delete
|
131
|
+
ensure_service!
|
132
|
+
service.delete_schema name
|
133
|
+
true
|
134
|
+
end
|
135
|
+
|
136
|
+
##
|
137
|
+
# Reloads the schema with current data from the Pub/Sub service.
|
138
|
+
#
|
139
|
+
# @param view [Symbol, String, nil] The set of fields to return in the response. Possible values:
|
140
|
+
# * `BASIC` - Include the `name` and `type` of the schema, but not the `definition`.
|
141
|
+
# * `FULL` - Include all Schema object fields.
|
142
|
+
#
|
143
|
+
# Optional. If not provided or `nil`, the last non-nil `view` argument to this method will be used if one has
|
144
|
+
# been given, othewise `FULL` will be used.
|
145
|
+
#
|
146
|
+
# @return [Google::Cloud::PubSub::Schema] Returns the reloaded schema.
|
147
|
+
#
|
148
|
+
# @example Skip retrieving the schema from the service, then load it:
|
149
|
+
# require "google/cloud/pubsub"
|
150
|
+
#
|
151
|
+
# pubsub = Google::Cloud::PubSub.new
|
152
|
+
# schema = pubsub.schema "my-schema", skip_lookup: true
|
153
|
+
#
|
154
|
+
# schema.reload!
|
155
|
+
#
|
156
|
+
# @example Use the `view` option to load the basic or full resource:
|
157
|
+
# require "google/cloud/pubsub"
|
158
|
+
#
|
159
|
+
# pubsub = Google::Cloud::PubSub.new
|
160
|
+
# schema = pubsub.schema "my-schema", view: :basic
|
161
|
+
# schema.resource_partial? #=> true
|
162
|
+
#
|
163
|
+
# schema.reload! view: :full
|
164
|
+
# schema.resource_partial? #=> false
|
165
|
+
#
|
166
|
+
# @!group Lifecycle
|
167
|
+
#
|
168
|
+
def reload! view: nil
|
169
|
+
ensure_service!
|
170
|
+
@view = view || @view
|
171
|
+
@grpc = service.get_schema name, @view
|
172
|
+
@reference = nil
|
173
|
+
@exists = nil
|
174
|
+
self
|
175
|
+
end
|
176
|
+
alias refresh! reload!
|
177
|
+
|
178
|
+
##
|
179
|
+
# Determines whether the schema exists in the Pub/Sub service.
|
180
|
+
#
|
181
|
+
# @example
|
182
|
+
# require "google/cloud/pubsub"
|
183
|
+
#
|
184
|
+
# pubsub = Google::Cloud::PubSub.new
|
185
|
+
#
|
186
|
+
# schema = pubsub.schema "my-schema"
|
187
|
+
# schema.exists? #=> true
|
188
|
+
#
|
189
|
+
def exists?
|
190
|
+
# Always true if the object is not set as reference
|
191
|
+
return true unless reference?
|
192
|
+
# If we have a value, return it
|
193
|
+
return @exists unless @exists.nil?
|
194
|
+
ensure_grpc!
|
195
|
+
@exists = true
|
196
|
+
rescue Google::Cloud::NotFoundError
|
197
|
+
@exists = false
|
198
|
+
end
|
199
|
+
|
200
|
+
##
|
201
|
+
# Determines whether the schema object was created without retrieving the
|
202
|
+
# resource representation from the Pub/Sub service.
|
203
|
+
#
|
204
|
+
# @return [Boolean] `true` when the schema was created without a resource
|
205
|
+
# representation, `false` otherwise.
|
206
|
+
#
|
207
|
+
# @example
|
208
|
+
# require "google/cloud/pubsub"
|
209
|
+
#
|
210
|
+
# pubsub = Google::Cloud::PubSub.new
|
211
|
+
#
|
212
|
+
# schema = pubsub.schema "my-schema", skip_lookup: true
|
213
|
+
# schema.reference? #=> true
|
214
|
+
#
|
215
|
+
def reference?
|
216
|
+
@grpc.type.nil? || @grpc.type == :TYPE_UNSPECIFIED
|
217
|
+
end
|
218
|
+
|
219
|
+
##
|
220
|
+
# Determines whether the schema object was created with a resource
|
221
|
+
# representation from the Pub/Sub service.
|
222
|
+
#
|
223
|
+
# @return [Boolean] `true` when the schema was created with a resource
|
224
|
+
# representation, `false` otherwise.
|
225
|
+
#
|
226
|
+
# @example
|
227
|
+
# require "google/cloud/pubsub"
|
228
|
+
#
|
229
|
+
# pubsub = Google::Cloud::PubSub.new
|
230
|
+
#
|
231
|
+
# schema = pubsub.schema "my-schema"
|
232
|
+
# schema.resource? #=> true
|
233
|
+
#
|
234
|
+
def resource?
|
235
|
+
!reference?
|
236
|
+
end
|
237
|
+
|
238
|
+
##
|
239
|
+
# Whether the schema was created with a partial resource representation
|
240
|
+
# from the Pub/Sub service.
|
241
|
+
#
|
242
|
+
# @return [Boolean] `true` when the schema was created with a partial
|
243
|
+
# resource representation, `false` otherwise.
|
244
|
+
#
|
245
|
+
# @example
|
246
|
+
# require "google/cloud/pubsub"
|
247
|
+
#
|
248
|
+
# pubsub = Google::Cloud::PubSub.new
|
249
|
+
# schema = pubsub.schema "my-schema", view: :basic
|
250
|
+
#
|
251
|
+
# schema.resource_partial? #=> true
|
252
|
+
# schema.reload! view: :full # Loads the full resource.
|
253
|
+
# schema.resource_partial? #=> false
|
254
|
+
#
|
255
|
+
def resource_partial?
|
256
|
+
resource? && !resource_full?
|
257
|
+
end
|
258
|
+
|
259
|
+
##
|
260
|
+
# Whether the schema was created with a full resource representation
|
261
|
+
# from the Pub/Sub service.
|
262
|
+
#
|
263
|
+
# @return [Boolean] `true` when the schema was created with a full
|
264
|
+
# resource representation, `false` otherwise.
|
265
|
+
#
|
266
|
+
# @example
|
267
|
+
# require "google/cloud/pubsub"
|
268
|
+
#
|
269
|
+
# pubsub = Google::Cloud::PubSub.new
|
270
|
+
# schema = pubsub.schema "my-schema"
|
271
|
+
#
|
272
|
+
# schema.resource_full? #=> true
|
273
|
+
#
|
274
|
+
def resource_full?
|
275
|
+
resource? && @grpc.definition && !@grpc.definition.empty?
|
276
|
+
end
|
277
|
+
|
278
|
+
##
|
279
|
+
# @private New Schema from a Google::Cloud::PubSub::V1::Schema object.
|
280
|
+
def self.from_grpc grpc, service, view: nil
|
281
|
+
new grpc, service, view: view
|
282
|
+
end
|
283
|
+
|
284
|
+
##
|
285
|
+
# @private New reference Schema object without making an HTTP request.
|
286
|
+
def self.from_name name, view, service, options = {}
|
287
|
+
grpc = Google::Cloud::PubSub::V1::Schema.new name: service.schema_path(name, options)
|
288
|
+
from_grpc grpc, service, view: view
|
289
|
+
end
|
290
|
+
|
291
|
+
protected
|
292
|
+
|
293
|
+
##
|
294
|
+
# @private Raise an error unless an active connection to the service is available.
|
295
|
+
def ensure_service!
|
296
|
+
raise "Must have active connection to service" unless service
|
297
|
+
end
|
298
|
+
|
299
|
+
##
|
300
|
+
# Ensures a Google::Cloud::PubSub::V1::Schema object exists.
|
301
|
+
def ensure_grpc!
|
302
|
+
ensure_service!
|
303
|
+
reload! if reference?
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
309
|
+
end
|
310
|
+
end
|