google-cloud-pubsub 0.26.0 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -0,0 +1,100 @@
|
|
1
|
+
# Copyright 2015 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/convert"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module PubSub
|
21
|
+
##
|
22
|
+
# Topic Batch Publisher object used to publish multiple messages at
|
23
|
+
# once.
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# require "google/cloud/pubsub"
|
27
|
+
#
|
28
|
+
# pubsub = Google::Cloud::PubSub.new
|
29
|
+
#
|
30
|
+
# topic = pubsub.topic "my-topic"
|
31
|
+
# msgs = topic.publish do |batch_publisher|
|
32
|
+
# batch_publisher.publish "task 1 completed", foo: :bar
|
33
|
+
# batch_publisher.publish "task 2 completed", foo: :baz
|
34
|
+
# batch_publisher.publish "task 3 completed", foo: :bif
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
class BatchPublisher
|
38
|
+
##
|
39
|
+
# @private The messages to publish
|
40
|
+
attr_reader :messages
|
41
|
+
|
42
|
+
##
|
43
|
+
# @private Create a new instance of the object.
|
44
|
+
def initialize data, attributes, ordering_key, extra_attrs
|
45
|
+
@messages = []
|
46
|
+
@mode = :batch
|
47
|
+
return if data.nil?
|
48
|
+
@mode = :single
|
49
|
+
publish data, attributes, ordering_key: ordering_key, **extra_attrs
|
50
|
+
end
|
51
|
+
|
52
|
+
##
|
53
|
+
# Add a message to the batch to be published to the topic.
|
54
|
+
# All messages added to the batch will be published at once.
|
55
|
+
# See {Google::Cloud::PubSub::Topic#publish}
|
56
|
+
#
|
57
|
+
# @param [String, File] data The message payload. This will be converted
|
58
|
+
# to bytes encoded as ASCII-8BIT.
|
59
|
+
# @param [Hash] attributes Optional attributes for the message.
|
60
|
+
# @param [String] ordering_key Identifies related messages for which
|
61
|
+
# publish order should be respected.
|
62
|
+
#
|
63
|
+
# @example Multiple messages can be sent at the same time using a block:
|
64
|
+
# require "google/cloud/pubsub"
|
65
|
+
#
|
66
|
+
# pubsub = Google::Cloud::PubSub.new
|
67
|
+
#
|
68
|
+
# topic = pubsub.topic "my-topic"
|
69
|
+
# msgs = topic.publish do |batch_publisher|
|
70
|
+
# batch_publisher.publish "task 1 completed", foo: :bar
|
71
|
+
# batch_publisher.publish "task 2 completed", foo: :baz
|
72
|
+
# batch_publisher.publish "task 3 completed", foo: :bif
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
def publish data, attributes = nil, ordering_key: nil, **extra_attrs
|
76
|
+
msg = Convert.pubsub_message data, attributes, ordering_key, extra_attrs
|
77
|
+
@messages << msg
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# @private Create Message objects with message ids.
|
82
|
+
def to_gcloud_messages message_ids
|
83
|
+
msgs = @messages.zip(Array(message_ids)).map do |msg, id|
|
84
|
+
msg.message_id = id
|
85
|
+
Message.from_grpc msg
|
86
|
+
end
|
87
|
+
# Return just one Message if a single publish,
|
88
|
+
# otherwise return the array of Messages.
|
89
|
+
if @mode == :single && msgs.count <= 1
|
90
|
+
msgs.first
|
91
|
+
else
|
92
|
+
msgs
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# Copyright 2017 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 "time"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module PubSub
|
21
|
+
##
|
22
|
+
# @private Helper module for converting Pub/Sub values.
|
23
|
+
module Convert
|
24
|
+
module ClassMethods
|
25
|
+
def time_to_timestamp time
|
26
|
+
return nil if time.nil?
|
27
|
+
|
28
|
+
# Force the object to be a Time object.
|
29
|
+
time = time.to_time
|
30
|
+
|
31
|
+
Google::Protobuf::Timestamp.new seconds: time.to_i, nanos: time.nsec
|
32
|
+
end
|
33
|
+
|
34
|
+
def timestamp_to_time timestamp
|
35
|
+
return nil if timestamp.nil?
|
36
|
+
|
37
|
+
Time.at timestamp.seconds, Rational(timestamp.nanos, 1000)
|
38
|
+
end
|
39
|
+
|
40
|
+
def number_to_duration number
|
41
|
+
return nil if number.nil?
|
42
|
+
|
43
|
+
Google::Protobuf::Duration.new seconds: number.to_i, nanos: (number.remainder(1) * 1_000_000_000).round
|
44
|
+
end
|
45
|
+
|
46
|
+
def duration_to_number duration
|
47
|
+
return nil if duration.nil?
|
48
|
+
|
49
|
+
return duration.seconds if duration.nanos.zero?
|
50
|
+
|
51
|
+
duration.seconds + (duration.nanos / 1_000_000_000.0)
|
52
|
+
end
|
53
|
+
|
54
|
+
def pubsub_message data, attributes, ordering_key, extra_attrs
|
55
|
+
# TODO: allow data to be a Message object,
|
56
|
+
# then ensure attributes and ordering_key are nil
|
57
|
+
if data.is_a?(::Hash) && (attributes.nil? || attributes.empty?)
|
58
|
+
attributes = data.merge extra_attrs
|
59
|
+
data = nil
|
60
|
+
else
|
61
|
+
attributes = Hash(attributes).merge extra_attrs
|
62
|
+
end
|
63
|
+
# Convert IO-ish objects to strings
|
64
|
+
if data.respond_to?(:read) && data.respond_to?(:rewind)
|
65
|
+
data.rewind
|
66
|
+
data = data.read
|
67
|
+
end
|
68
|
+
# Convert data to encoded byte array to match the protobuf defn
|
69
|
+
data_bytes = String(data).dup.force_encoding(Encoding::ASCII_8BIT).freeze
|
70
|
+
|
71
|
+
# Convert attributes to strings to match the protobuf definition
|
72
|
+
attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
|
73
|
+
|
74
|
+
# Ordering Key must always be a string
|
75
|
+
ordering_key = String(ordering_key).freeze
|
76
|
+
|
77
|
+
Google::Cloud::PubSub::V1::PubsubMessage.new(
|
78
|
+
data: data_bytes,
|
79
|
+
attributes: attributes,
|
80
|
+
ordering_key: ordering_key
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
extend ClassMethods
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
90
|
+
end
|
91
|
+
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,
|
@@ -13,19 +13,35 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
15
|
|
16
|
-
require "
|
16
|
+
require "googleauth"
|
17
|
+
require "google/cloud/pubsub/v1/publisher/credentials"
|
17
18
|
|
18
19
|
module Google
|
19
20
|
module Cloud
|
20
|
-
module
|
21
|
+
module PubSub
|
21
22
|
##
|
22
|
-
#
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
# # Credentials
|
24
|
+
#
|
25
|
+
# Represents the authentication and authorization used to connect to the
|
26
|
+
# Pub/Sub API.
|
27
|
+
#
|
28
|
+
# @example
|
29
|
+
# require "google/cloud/pubsub"
|
30
|
+
#
|
31
|
+
# keyfile = "/path/to/keyfile.json"
|
32
|
+
# creds = Google::Cloud::PubSub::Credentials.new keyfile
|
33
|
+
#
|
34
|
+
# pubsub = Google::Cloud::PubSub.new(
|
35
|
+
# project_id: "my-project",
|
36
|
+
# credentials: creds
|
37
|
+
# )
|
38
|
+
#
|
39
|
+
# pubsub.project_id #=> "my-project"
|
40
|
+
#
|
41
|
+
class Credentials < Google::Cloud::PubSub::V1::Publisher::Credentials
|
28
42
|
end
|
29
43
|
end
|
44
|
+
|
45
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
30
46
|
end
|
31
47
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# Copyright 2019 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/errors"
|
17
|
+
|
18
|
+
module Google
|
19
|
+
module Cloud
|
20
|
+
module PubSub
|
21
|
+
##
|
22
|
+
# Indicates that the {AsyncPublisher} has been stopped and cannot accept
|
23
|
+
# messages to publish.
|
24
|
+
#
|
25
|
+
class AsyncPublisherStopped < Google::Cloud::Error
|
26
|
+
def initialize message = "Can't publish when stopped."
|
27
|
+
super message
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Indicates that the {AsyncPublisher} has not been enabled to publish
|
33
|
+
# messages with an ordering key. Use
|
34
|
+
# {AsyncPublisher#enable_message_ordering!} to enable publishing ordered
|
35
|
+
# messages.
|
36
|
+
#
|
37
|
+
class OrderedMessagesDisabled < Google::Cloud::Error
|
38
|
+
def initialize message = "Ordered messages are disabled."
|
39
|
+
super message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Indicates that the {Subscriber} for a {Subscription} with message
|
45
|
+
# ordering enabled has observed that a message has been delivered out of
|
46
|
+
# order.
|
47
|
+
#
|
48
|
+
class OrderedMessageDeliveryError < Google::Cloud::Error
|
49
|
+
attr_reader :ordered_message
|
50
|
+
|
51
|
+
def initialize ordered_message
|
52
|
+
@ordered_message = ordered_message
|
53
|
+
|
54
|
+
super "Ordered message delivered out of order."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Indicates that messages using the {#ordering_key} are not being
|
60
|
+
# published due to error. Future calls to {Topic#publish_async} with the
|
61
|
+
# {#ordering_key} will fail with this error.
|
62
|
+
#
|
63
|
+
# To allow future messages with the {#ordering_key} to be published, the
|
64
|
+
# {#ordering_key} must be passed to {Topic#resume_publish}.
|
65
|
+
#
|
66
|
+
# If this error is retrieved from {PublishResult#error}, inspect `cause`
|
67
|
+
# for the error raised while publishing.
|
68
|
+
#
|
69
|
+
# @!attribute [r] ordering_key
|
70
|
+
# @return [String] The ordering key that is in a failed state.
|
71
|
+
#
|
72
|
+
class OrderingKeyError < Google::Cloud::Error
|
73
|
+
attr_reader :ordering_key
|
74
|
+
|
75
|
+
def initialize ordering_key
|
76
|
+
@ordering_key = ordering_key
|
77
|
+
|
78
|
+
super "Can't publish message using #{ordering_key}."
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
84
|
+
end
|
85
|
+
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,
|
@@ -13,11 +13,12 @@
|
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
15
|
|
16
|
+
require "google/cloud/pubsub/convert"
|
16
17
|
require "google/cloud/errors"
|
17
18
|
|
18
19
|
module Google
|
19
20
|
module Cloud
|
20
|
-
module
|
21
|
+
module PubSub
|
21
22
|
##
|
22
23
|
# # Message
|
23
24
|
#
|
@@ -31,21 +32,29 @@ module Google
|
|
31
32
|
# @example
|
32
33
|
# require "google/cloud/pubsub"
|
33
34
|
#
|
34
|
-
# pubsub = Google::Cloud::
|
35
|
+
# pubsub = Google::Cloud::PubSub.new
|
35
36
|
#
|
36
37
|
# # Publish a message
|
37
38
|
# topic = pubsub.topic "my-topic"
|
38
39
|
# message = topic.publish "task completed"
|
39
|
-
# message.data #=>
|
40
|
+
# message.data #=> "task completed"
|
40
41
|
#
|
41
|
-
# #
|
42
|
+
# # Listen for messages
|
42
43
|
# sub = pubsub.subscription "my-topic-sub"
|
43
|
-
#
|
44
|
-
#
|
44
|
+
# subscriber = sub.listen do |received_message|
|
45
|
+
# # process message
|
46
|
+
# received_message.acknowledge!
|
47
|
+
# end
|
48
|
+
#
|
49
|
+
# # Start background threads that will call the block passed to listen.
|
50
|
+
# subscriber.start
|
51
|
+
#
|
52
|
+
# # Shut down the subscriber when ready to stop receiving messages.
|
53
|
+
# subscriber.stop!
|
45
54
|
#
|
46
55
|
class Message
|
47
56
|
##
|
48
|
-
# @private The gRPC Google::
|
57
|
+
# @private The gRPC Google::Cloud::PubSub::V1::PubsubMessage object.
|
49
58
|
attr_accessor :grpc
|
50
59
|
|
51
60
|
##
|
@@ -55,19 +64,21 @@ module Google
|
|
55
64
|
# Convert attributes to strings to match the protobuf definition
|
56
65
|
attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
|
57
66
|
|
58
|
-
@grpc = Google::
|
59
|
-
data:
|
60
|
-
attributes: attributes
|
67
|
+
@grpc = Google::Cloud::PubSub::V1::PubsubMessage.new(
|
68
|
+
data: String(data).dup.force_encoding(Encoding::ASCII_8BIT),
|
69
|
+
attributes: attributes
|
70
|
+
)
|
61
71
|
end
|
62
72
|
|
63
73
|
##
|
64
|
-
# The
|
74
|
+
# The message payload. This data is a list of bytes encoded as
|
75
|
+
# ASCII-8BIT.
|
65
76
|
def data
|
66
77
|
@grpc.data
|
67
78
|
end
|
68
79
|
|
69
80
|
##
|
70
|
-
#
|
81
|
+
# Optional attributes for the message.
|
71
82
|
def attributes
|
72
83
|
return @grpc.attributes.to_h if @grpc.attributes.respond_to? :to_h
|
73
84
|
# Enumerable doesn't have to_h on Ruby 2.0, so fallback to this
|
@@ -80,16 +91,68 @@ module Google
|
|
80
91
|
def message_id
|
81
92
|
@grpc.message_id
|
82
93
|
end
|
83
|
-
|
94
|
+
alias msg_id message_id
|
95
|
+
|
96
|
+
##
|
97
|
+
# The time at which the message was published.
|
98
|
+
def published_at
|
99
|
+
Convert.timestamp_to_time @grpc.publish_time
|
100
|
+
end
|
101
|
+
alias publish_time published_at
|
84
102
|
|
85
103
|
##
|
86
|
-
#
|
104
|
+
# Identifies related messages for which publish order should be
|
105
|
+
# respected.
|
106
|
+
#
|
107
|
+
# Google Cloud Pub/Sub ordering keys provide the ability to ensure
|
108
|
+
# related messages are sent to subscribers in the order in which they
|
109
|
+
# were published. Messages can be tagged with an ordering key, a string
|
110
|
+
# that identifies related messages for which publish order should be
|
111
|
+
# respected. The service guarantees that, for a given ordering key and
|
112
|
+
# publisher, messages are sent to subscribers in the order in which they
|
113
|
+
# were published. Ordering does not require sacrificing high throughput
|
114
|
+
# or scalability, as the service automatically distributes messages for
|
115
|
+
# different ordering keys across subscribers.
|
116
|
+
#
|
117
|
+
# See {Topic#publish_async} and {Subscription#listen}.
|
118
|
+
#
|
119
|
+
# @return [String]
|
120
|
+
#
|
121
|
+
def ordering_key
|
122
|
+
@grpc.ordering_key
|
123
|
+
end
|
124
|
+
|
125
|
+
# @private
|
126
|
+
def hash
|
127
|
+
@grpc.hash
|
128
|
+
end
|
129
|
+
|
130
|
+
# @private
|
131
|
+
def eql? other
|
132
|
+
return false unless other.is_a? self.class
|
133
|
+
@grpc.hash == other.hash
|
134
|
+
end
|
135
|
+
# @private
|
136
|
+
alias == eql?
|
137
|
+
|
138
|
+
# @private
|
139
|
+
def <=> other
|
140
|
+
return nil unless other.is_a? self.class
|
141
|
+
other_grpc = other.instance_variable_get :@grpc
|
142
|
+
@grpc <=> other_grpc
|
143
|
+
end
|
144
|
+
|
145
|
+
##
|
146
|
+
# @private New Message from a Google::Cloud::PubSub::V1::PubsubMessage
|
147
|
+
# object.
|
87
148
|
def self.from_grpc grpc
|
88
149
|
new.tap do |m|
|
89
|
-
m.instance_variable_set
|
150
|
+
m.instance_variable_set :@grpc, grpc
|
90
151
|
end
|
91
152
|
end
|
92
153
|
end
|
93
154
|
end
|
155
|
+
|
156
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
94
157
|
end
|
95
158
|
end
|