google-cloud-pubsub 1.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.yardopts +18 -0
- data/AUTHENTICATION.md +177 -0
- data/CHANGELOG.md +538 -0
- data/CODE_OF_CONDUCT.md +40 -0
- data/CONTRIBUTING.md +188 -0
- data/EMULATOR.md +37 -0
- data/LICENSE +201 -0
- data/LOGGING.md +32 -0
- data/OVERVIEW.md +557 -0
- data/TROUBLESHOOTING.md +31 -0
- data/lib/google-cloud-pubsub.rb +139 -0
- data/lib/google/cloud/pubsub.rb +173 -0
- data/lib/google/cloud/pubsub/async_publisher.rb +399 -0
- data/lib/google/cloud/pubsub/async_publisher/batch.rb +309 -0
- data/lib/google/cloud/pubsub/batch_publisher.rb +99 -0
- data/lib/google/cloud/pubsub/convert.rb +91 -0
- data/lib/google/cloud/pubsub/credentials.rb +47 -0
- data/lib/google/cloud/pubsub/errors.rb +85 -0
- data/lib/google/cloud/pubsub/message.rb +158 -0
- data/lib/google/cloud/pubsub/policy.rb +187 -0
- data/lib/google/cloud/pubsub/project.rb +393 -0
- data/lib/google/cloud/pubsub/publish_result.rb +103 -0
- data/lib/google/cloud/pubsub/received_message.rb +297 -0
- data/lib/google/cloud/pubsub/retry_policy.rb +90 -0
- data/lib/google/cloud/pubsub/service.rb +514 -0
- data/lib/google/cloud/pubsub/snapshot.rb +202 -0
- data/lib/google/cloud/pubsub/snapshot/list.rb +178 -0
- data/lib/google/cloud/pubsub/subscriber.rb +399 -0
- data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +54 -0
- data/lib/google/cloud/pubsub/subscriber/inventory.rb +166 -0
- data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
- data/lib/google/cloud/pubsub/subscriber/stream.rb +401 -0
- data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +231 -0
- data/lib/google/cloud/pubsub/subscription.rb +1279 -0
- data/lib/google/cloud/pubsub/subscription/list.rb +205 -0
- data/lib/google/cloud/pubsub/subscription/push_config.rb +244 -0
- data/lib/google/cloud/pubsub/topic.rb +934 -0
- data/lib/google/cloud/pubsub/topic/list.rb +171 -0
- data/lib/google/cloud/pubsub/v1.rb +17 -0
- data/lib/google/cloud/pubsub/v1/credentials.rb +41 -0
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +21 -0
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +21 -0
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +21 -0
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +91 -0
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +29 -0
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +222 -0
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +113 -0
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +833 -0
- data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +19 -0
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +928 -0
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +120 -0
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +1466 -0
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +153 -0
- data/lib/google/cloud/pubsub/version.rb +24 -0
- data/lib/google/pubsub/v1/pubsub_pb.rb +269 -0
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +215 -0
- metadata +337 -0
@@ -0,0 +1,47 @@
|
|
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 "googleauth"
|
17
|
+
require "google/cloud/pubsub/v1/credentials.rb"
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Cloud
|
21
|
+
module PubSub
|
22
|
+
##
|
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::Credentials
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
46
|
+
end
|
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
|
@@ -0,0 +1,158 @@
|
|
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
|
+
require "google/cloud/errors"
|
18
|
+
|
19
|
+
module Google
|
20
|
+
module Cloud
|
21
|
+
module PubSub
|
22
|
+
##
|
23
|
+
# # Message
|
24
|
+
#
|
25
|
+
# Represents a Pub/Sub Message.
|
26
|
+
#
|
27
|
+
# Message objects are created by {Topic#publish}. {Subscription#pull}
|
28
|
+
# returns an array of {ReceivedMessage} objects, each of which contains a
|
29
|
+
# Message object. Each {ReceivedMessage} object can be acknowledged and/or
|
30
|
+
# delayed.
|
31
|
+
#
|
32
|
+
# @example
|
33
|
+
# require "google/cloud/pubsub"
|
34
|
+
#
|
35
|
+
# pubsub = Google::Cloud::PubSub.new
|
36
|
+
#
|
37
|
+
# # Publish a message
|
38
|
+
# topic = pubsub.topic "my-topic"
|
39
|
+
# message = topic.publish "task completed"
|
40
|
+
# message.data #=> "task completed"
|
41
|
+
#
|
42
|
+
# # Listen for messages
|
43
|
+
# sub = pubsub.subscription "my-topic-sub"
|
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.wait!
|
54
|
+
#
|
55
|
+
class Message
|
56
|
+
##
|
57
|
+
# @private The gRPC Google::Cloud::PubSub::V1::PubsubMessage object.
|
58
|
+
attr_accessor :grpc
|
59
|
+
|
60
|
+
##
|
61
|
+
# Create an empty Message object.
|
62
|
+
# This can be used to publish several messages in bulk.
|
63
|
+
def initialize data = nil, attributes = {}
|
64
|
+
# Convert attributes to strings to match the protobuf definition
|
65
|
+
attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
|
66
|
+
|
67
|
+
@grpc = Google::Cloud::PubSub::V1::PubsubMessage.new(
|
68
|
+
data: String(data).dup.force_encoding(Encoding::ASCII_8BIT),
|
69
|
+
attributes: attributes
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
##
|
74
|
+
# The message payload. This data is a list of bytes encoded as
|
75
|
+
# ASCII-8BIT.
|
76
|
+
def data
|
77
|
+
@grpc.data
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# Optional attributes for the message.
|
82
|
+
def attributes
|
83
|
+
return @grpc.attributes.to_h if @grpc.attributes.respond_to? :to_h
|
84
|
+
# Enumerable doesn't have to_h on Ruby 2.0, so fallback to this
|
85
|
+
Hash[@grpc.attributes.to_a]
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# The ID of this message, assigned by the server at publication time.
|
90
|
+
# Guaranteed to be unique within the topic.
|
91
|
+
def message_id
|
92
|
+
@grpc.message_id
|
93
|
+
end
|
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
|
102
|
+
|
103
|
+
##
|
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.
|
148
|
+
def self.from_grpc grpc
|
149
|
+
new.tap do |m|
|
150
|
+
m.instance_variable_set :@grpc, grpc
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# Copyright 2016 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
|
+
# # Policy
|
23
|
+
#
|
24
|
+
# Represents a Cloud IAM Policy for the Pub/Sub service.
|
25
|
+
#
|
26
|
+
# A common pattern for updating a resource's metadata, such as its Policy,
|
27
|
+
# is to read the current data from the service, update the data locally,
|
28
|
+
# and then send the modified data for writing. This pattern may result in
|
29
|
+
# a conflict if two or more processes attempt the sequence simultaneously.
|
30
|
+
# IAM solves this problem with the {Google::Cloud::PubSub::Policy#etag}
|
31
|
+
# property, which is used to verify whether the policy has changed since
|
32
|
+
# the last request. When you make a request to with an `etag` value, Cloud
|
33
|
+
# IAM compares the `etag` value in the request with the existing `etag`
|
34
|
+
# value associated with the policy. It writes the policy only if the
|
35
|
+
# `etag` values match.
|
36
|
+
#
|
37
|
+
# When you update a policy, first read the policy (and its current `etag`)
|
38
|
+
# from the service, then modify the policy locally, and then write the
|
39
|
+
# modified policy to the service. See
|
40
|
+
# {Google::Cloud::PubSub::Topic#policy} and
|
41
|
+
# {Google::Cloud::PubSub::Topic#policy=}.
|
42
|
+
#
|
43
|
+
# @see https://cloud.google.com/iam/docs/managing-policies Managing
|
44
|
+
# policies
|
45
|
+
# @see https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#iampolicy
|
46
|
+
# google.iam.v1.IAMPolicy
|
47
|
+
#
|
48
|
+
# @attr [String] etag Used to verify whether the policy has changed since
|
49
|
+
# the last request. The policy will be written only if the `etag` values
|
50
|
+
# match.
|
51
|
+
# @attr [Hash{String => Array<String>}] roles The bindings that associate
|
52
|
+
# roles with an array of members. See [Understanding
|
53
|
+
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
54
|
+
# listing of primitive and curated roles.
|
55
|
+
# See [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
56
|
+
# for a listing of values and patterns for members.
|
57
|
+
#
|
58
|
+
# @example
|
59
|
+
# require "google/cloud/pubsub"
|
60
|
+
#
|
61
|
+
# pubsub = Google::Cloud::PubSub.new
|
62
|
+
# topic = pubsub.topic "my-topic"
|
63
|
+
#
|
64
|
+
# topic.policy do |p|
|
65
|
+
# p.remove "roles/owner", "user:owner@example.com"
|
66
|
+
# p.add "roles/owner", "user:newowner@example.com"
|
67
|
+
# p.roles["roles/viewer"] = ["allUsers"]
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
class Policy
|
71
|
+
attr_reader :etag, :roles
|
72
|
+
|
73
|
+
##
|
74
|
+
# @private Creates a Policy object.
|
75
|
+
def initialize etag, roles
|
76
|
+
@etag = etag
|
77
|
+
@roles = roles
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
# Convenience method for adding a member to a binding on this policy.
|
82
|
+
# See [Understanding
|
83
|
+
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
84
|
+
# listing of primitive and curated roles.
|
85
|
+
# See [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
86
|
+
# for a listing of values and patterns for members.
|
87
|
+
#
|
88
|
+
# @param [String] role_name A Cloud IAM role, such as
|
89
|
+
# `"roles/pubsub.admin"`.
|
90
|
+
# @param [String] member A Cloud IAM identity, such as
|
91
|
+
# `"user:owner@example.com"`.
|
92
|
+
#
|
93
|
+
# @example
|
94
|
+
# require "google/cloud/pubsub"
|
95
|
+
#
|
96
|
+
# pubsub = Google::Cloud::PubSub.new
|
97
|
+
# topic = pubsub.topic "my-topic"
|
98
|
+
#
|
99
|
+
# topic.policy do |p|
|
100
|
+
# p.add "roles/owner", "user:newowner@example.com"
|
101
|
+
# end
|
102
|
+
#
|
103
|
+
def add role_name, member
|
104
|
+
role(role_name) << member
|
105
|
+
end
|
106
|
+
|
107
|
+
##
|
108
|
+
# Convenience method for removing a member from a binding on this
|
109
|
+
# policy. See [Understanding
|
110
|
+
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
111
|
+
# listing of primitive and curated roles. See
|
112
|
+
# [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
113
|
+
# for a listing of values and patterns for members.
|
114
|
+
#
|
115
|
+
# @param [String] role_name A Cloud IAM role, such as
|
116
|
+
# `"roles/pubsub.admin"`.
|
117
|
+
# @param [String] member A Cloud IAM identity, such as
|
118
|
+
# `"user:owner@example.com"`.
|
119
|
+
#
|
120
|
+
# @example
|
121
|
+
# require "google/cloud/pubsub"
|
122
|
+
#
|
123
|
+
# pubsub = Google::Cloud::PubSub.new
|
124
|
+
# topic = pubsub.topic "my-topic"
|
125
|
+
#
|
126
|
+
# topic.policy do |p|
|
127
|
+
# p.remove "roles/owner", "user:owner@example.com"
|
128
|
+
# end
|
129
|
+
#
|
130
|
+
def remove role_name, member
|
131
|
+
role(role_name).delete member
|
132
|
+
end
|
133
|
+
|
134
|
+
##
|
135
|
+
# Convenience method returning the array of members bound to a role in
|
136
|
+
# this policy, or an empty array if no value is present for the role in
|
137
|
+
# {#roles}. See [Understanding
|
138
|
+
# Roles](https://cloud.google.com/iam/docs/understanding-roles) for a
|
139
|
+
# listing of primitive and curated roles. See
|
140
|
+
# [Binding](https://cloud.google.com/pubsub/docs/reference/rpc/google.iam.v1#binding)
|
141
|
+
# for a listing of values and patterns for members.
|
142
|
+
#
|
143
|
+
# @return [Array<String>] The members strings, or an empty array.
|
144
|
+
#
|
145
|
+
# @example
|
146
|
+
# require "google/cloud/pubsub"
|
147
|
+
#
|
148
|
+
# pubsub = Google::Cloud::PubSub.new
|
149
|
+
# topic = pubsub.topic "my-topic"
|
150
|
+
#
|
151
|
+
# topic.policy do |p|
|
152
|
+
# p.role("roles/viewer") << "user:viewer@example.com"
|
153
|
+
# end
|
154
|
+
#
|
155
|
+
def role role_name
|
156
|
+
roles[role_name] ||= []
|
157
|
+
end
|
158
|
+
|
159
|
+
##
|
160
|
+
# @private Convert the Policy to a Google::Iam::V1::Policy object.
|
161
|
+
def to_grpc
|
162
|
+
Google::Iam::V1::Policy.new(
|
163
|
+
etag: etag,
|
164
|
+
bindings: roles.keys.map do |role_name|
|
165
|
+
next if roles[role_name].empty?
|
166
|
+
Google::Iam::V1::Binding.new(
|
167
|
+
role: role_name,
|
168
|
+
members: roles[role_name]
|
169
|
+
)
|
170
|
+
end
|
171
|
+
)
|
172
|
+
end
|
173
|
+
|
174
|
+
##
|
175
|
+
# @private New Policy from a Google::Iam::V1::Policy object.
|
176
|
+
def self.from_grpc grpc
|
177
|
+
roles = grpc.bindings.each_with_object({}) do |binding, memo|
|
178
|
+
memo[binding.role] = binding.members.to_a
|
179
|
+
end
|
180
|
+
new grpc.etag, roles
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
Pubsub = PubSub unless const_defined? :Pubsub
|
186
|
+
end
|
187
|
+
end
|