google-cloud-pubsub 0.33.1 → 2.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +41 -40
  3. data/CHANGELOG.md +610 -0
  4. data/CONTRIBUTING.md +328 -116
  5. data/EMULATOR.md +2 -2
  6. data/LOGGING.md +95 -3
  7. data/OVERVIEW.md +183 -90
  8. data/TROUBLESHOOTING.md +2 -8
  9. data/lib/google/cloud/pubsub/acknowledge_result.rb +79 -0
  10. data/lib/google/cloud/pubsub/async_publisher/batch.rb +306 -0
  11. data/lib/google/cloud/pubsub/async_publisher.rb +270 -161
  12. data/lib/google/cloud/pubsub/batch_publisher.rb +65 -33
  13. data/lib/google/cloud/pubsub/convert.rb +36 -8
  14. data/lib/google/cloud/pubsub/credentials.rb +7 -5
  15. data/lib/google/cloud/pubsub/errors.rb +93 -0
  16. data/lib/google/cloud/pubsub/flow_controller.rb +139 -0
  17. data/lib/google/cloud/pubsub/message.rb +52 -7
  18. data/lib/google/cloud/pubsub/policy.rb +15 -12
  19. data/lib/google/cloud/pubsub/project.rb +341 -75
  20. data/lib/google/cloud/pubsub/publish_result.rb +9 -2
  21. data/lib/google/cloud/pubsub/received_message.rb +182 -20
  22. data/lib/google/cloud/pubsub/retry_policy.rb +88 -0
  23. data/lib/google/cloud/pubsub/schema/list.rb +180 -0
  24. data/lib/google/cloud/pubsub/schema.rb +310 -0
  25. data/lib/google/cloud/pubsub/service.rb +285 -258
  26. data/lib/google/cloud/pubsub/snapshot/list.rb +14 -14
  27. data/lib/google/cloud/pubsub/snapshot.rb +17 -12
  28. data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +4 -4
  29. data/lib/google/cloud/pubsub/subscriber/inventory.rb +74 -33
  30. data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
  31. data/lib/google/cloud/pubsub/subscriber/stream.rb +138 -91
  32. data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +397 -0
  33. data/lib/google/cloud/pubsub/subscriber.rb +213 -51
  34. data/lib/google/cloud/pubsub/subscription/list.rb +16 -16
  35. data/lib/google/cloud/pubsub/subscription/push_config.rb +268 -0
  36. data/lib/google/cloud/pubsub/subscription.rb +827 -137
  37. data/lib/google/cloud/pubsub/topic/list.rb +14 -14
  38. data/lib/google/cloud/pubsub/topic.rb +565 -93
  39. data/lib/google/cloud/pubsub/version.rb +4 -2
  40. data/lib/google/cloud/pubsub.rb +50 -41
  41. data/lib/google-cloud-pubsub.rb +26 -29
  42. metadata +59 -53
  43. data/lib/google/cloud/pubsub/subscriber/async_stream_pusher.rb +0 -222
  44. data/lib/google/cloud/pubsub/subscriber/async_unary_pusher.rb +0 -270
  45. data/lib/google/cloud/pubsub/v1/credentials.rb +0 -39
  46. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +0 -63
  47. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +0 -128
  48. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -91
  49. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +0 -29
  50. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -230
  51. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -109
  52. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -628
  53. data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -734
  54. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -105
  55. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1267
  56. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -144
  57. data/lib/google/cloud/pubsub/v1.rb +0 -17
  58. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -222
  59. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -192
@@ -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