google-cloud-pubsub 1.10.0 → 2.0.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.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +2 -1
  3. data/CHANGELOG.md +23 -0
  4. data/lib/google-cloud-pubsub.rb +13 -13
  5. data/lib/google/cloud/pubsub.rb +15 -18
  6. data/lib/google/cloud/pubsub/async_publisher.rb +1 -2
  7. data/lib/google/cloud/pubsub/credentials.rb +2 -2
  8. data/lib/google/cloud/pubsub/service.rb +102 -251
  9. data/lib/google/cloud/pubsub/subscriber/stream.rb +1 -2
  10. data/lib/google/cloud/pubsub/subscription.rb +1 -1
  11. data/lib/google/cloud/pubsub/version.rb +1 -1
  12. metadata +7 -78
  13. data/lib/google/cloud/pubsub/v1.rb +0 -17
  14. data/lib/google/cloud/pubsub/v1/credentials.rb +0 -41
  15. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +0 -21
  16. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +0 -21
  17. data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +0 -21
  18. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -91
  19. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +0 -29
  20. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -222
  21. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -113
  22. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -833
  23. data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +0 -19
  24. data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -928
  25. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -120
  26. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1466
  27. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -153
  28. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -269
  29. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -215
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43ee60087a74bfc9938a61cf66f67b937f30c440f921ef83294f5dd2ec8e1079
4
- data.tar.gz: 9104bacc161434e7edc1b5553cb0d2f2681ddd6a6a000bf947e212af7dad4df0
3
+ metadata.gz: f5faee5de29df83057422ad7029a047eb10e8408a9b4e87599d301bc1c907a06
4
+ data.tar.gz: bc9d9b75232d66b09b5d45310875fbbd734663cf226575e43656da47aa955204
5
5
  SHA512:
6
- metadata.gz: 4130c4d2961f54b8cf6f1a5957f50d50e37d57bcd56d032df3bbc10497e8788d55e405c69b8570cc24322800af37a35e49daf67755b1652b763b5a9da44b464e
7
- data.tar.gz: 5777e0c8d1ca9d56c2a94056971b1e59ccf63e3a1e6dd532f5d223f7a6b8a80f0f0aa29bf1aa984376b48d279bccc3e23aa4ff50940c47b4920c47a6340e5975
6
+ metadata.gz: b59bc075932f2a592276a8e0472371a18a8cc6e835ccb6c36ece17f277528bf92813d978e06393cf384c54c282c8a04fa6ba1d2fcfab08214e3cb3a55d2724ac
7
+ data.tar.gz: 8a6fffc01ab630eaf960c3c87858f942fe6a0241cfdf024875d379f2a915be724ea209bcfdc07c7ab12a1299949785456c27f0725d6d4b4cac519749cbc6f1fc
@@ -76,7 +76,8 @@ The environment variables that google-cloud-pubsub checks for project ID are:
76
76
  1. `PUBSUB_PROJECT`
77
77
  2. `GOOGLE_CLOUD_PROJECT`
78
78
 
79
- The environment variables that google-cloud-pubsub checks for credentials are configured on {Google::Cloud::PubSub::V1::Credentials}:
79
+ The environment variables that google-cloud-pubsub checks for credentials
80
+ are configured on {Google::Cloud::PubSub::Credentials}:
80
81
 
81
82
  1. `PUBSUB_CREDENTIALS` - Path to JSON file, or JSON contents
82
83
  2. `PUBSUB_KEYFILE` - Path to JSON file, or JSON contents
@@ -1,5 +1,28 @@
1
1
  # Release History
2
2
 
3
+ ### 2.0.0 / 2020-08-06
4
+
5
+ This is a major update that removes the "low-level" client interface code, and
6
+ instead adds the new `google-cloud-pubsub-v1` gem as a dependency.
7
+ The new dependency is a rewritten low-level client, produced by a next-
8
+ generation client code generator, with improved performance and stability.
9
+
10
+ This change should have no effect on the high-level interface that most users
11
+ will use. The one exception is that the (mostly undocumented) `client_config`
12
+ argument, for adjusting low-level parameters such as RPC retry settings on
13
+ client objects, has been removed. If you need to adjust these parameters, use
14
+ the configuration interface in `google-cloud-pubsub-v1`.
15
+
16
+ Substantial changes have been made in the low-level interfaces, however. If you
17
+ are using the low-level classes under the `Google::Cloud::PubSub::V1` module,
18
+ please review the docs for the new `google-cloud-pubsub-v1` gem. In
19
+ particular:
20
+
21
+ * Some classes have been renamed, notably the client classes themselves.
22
+ * The client constructor takes a configuration block instead of configuration
23
+ keyword arguments.
24
+ * All RPC method arguments are now keyword arguments.
25
+
3
26
  ### 1.10.0 / 2020-07-23
4
27
 
5
28
  #### Features
@@ -42,8 +42,6 @@ module Google
42
42
  #
43
43
  # * `https://www.googleapis.com/auth/pubsub`
44
44
  # @param [Integer] timeout Default timeout to use in requests. Optional.
45
- # @param [Hash] client_config A hash of values to override the default
46
- # behavior of the API client. Optional.
47
45
  #
48
46
  # @return [Google::Cloud::PubSub::Project]
49
47
  #
@@ -62,9 +60,9 @@ module Google
62
60
  # platform_scope = "https://www.googleapis.com/auth/cloud-platform"
63
61
  # pubsub = gcloud.pubsub scope: platform_scope
64
62
  #
65
- def pubsub scope: nil, timeout: nil, client_config: nil
63
+ def pubsub scope: nil, timeout: nil
66
64
  timeout ||= @timeout
67
- Google::Cloud.pubsub @project, @keyfile, scope: scope, timeout: timeout, client_config: client_config
65
+ Google::Cloud.pubsub @project, @keyfile, scope: scope, timeout: timeout
68
66
  end
69
67
 
70
68
  ##
@@ -90,8 +88,6 @@ module Google
90
88
  #
91
89
  # * `https://www.googleapis.com/auth/pubsub`
92
90
  # @param [Integer] timeout Default timeout to use in requests. Optional.
93
- # @param [Hash] client_config A hash of values to override the default
94
- # behavior of the API client. Optional.
95
91
  #
96
92
  # @return [Google::Cloud::PubSub::Project]
97
93
  #
@@ -103,11 +99,12 @@ module Google
103
99
  # topic = pubsub.topic "my-topic"
104
100
  # topic.publish "task completed"
105
101
  #
106
- def self.pubsub project_id = nil, credentials = nil, scope: nil,
107
- timeout: nil, client_config: nil
102
+ def self.pubsub project_id = nil,
103
+ credentials = nil,
104
+ scope: nil,
105
+ timeout: nil
108
106
  require "google/cloud/pubsub"
109
- Google::Cloud::PubSub.new project_id: project_id, credentials: credentials,
110
- scope: scope, timeout: timeout, client_config: client_config
107
+ Google::Cloud::PubSub.new project_id: project_id, credentials: credentials, scope: scope, timeout: timeout
111
108
  end
112
109
  end
113
110
  end
@@ -125,15 +122,18 @@ Google::Cloud.configure.add_config! :pubsub do |config|
125
122
  default_emulator = Google::Cloud::Config.deferred do
126
123
  ENV["PUBSUB_EMULATOR_HOST"]
127
124
  end
125
+ default_scopes = [
126
+ "https://www.googleapis.com/auth/cloud-platform",
127
+ "https://www.googleapis.com/auth/pubsub"
128
+ ]
128
129
 
129
130
  config.add_field! :project_id, default_project, match: String, allow_nil: true
130
131
  config.add_alias! :project, :project_id
131
132
  config.add_field! :credentials, default_creds, match: [String, Hash, Google::Auth::Credentials], allow_nil: true
132
133
  config.add_alias! :keyfile, :credentials
133
- config.add_field! :scope, nil, match: [String, Array]
134
+ config.add_field! :scope, default_scopes, match: [String, Array]
134
135
  config.add_field! :timeout, nil, match: Integer
135
- config.add_field! :client_config, nil, match: Hash
136
136
  config.add_field! :emulator_host, default_emulator, match: String, allow_nil: true
137
137
  config.add_field! :on_error, nil, match: Proc
138
- config.add_field! :endpoint, nil, match: String
138
+ config.add_field! :endpoint, "pubsub.googleapis.com", match: String
139
139
  end
@@ -57,8 +57,6 @@ module Google
57
57
  #
58
58
  # * `https://www.googleapis.com/auth/pubsub`
59
59
  # @param [Integer] timeout Default timeout to use in requests. Optional.
60
- # @param [Hash] client_config A hash of values to override the default
61
- # behavior of the API client. Optional.
62
60
  # @param [String] endpoint Override of the endpoint host name. Optional.
63
61
  # If the param is nil, uses the default endpoint.
64
62
  # @param [String] emulator_host Pub/Sub emulator host. Optional.
@@ -77,12 +75,17 @@ module Google
77
75
  # topic = pubsub.topic "my-topic"
78
76
  # topic.publish "task completed"
79
77
  #
80
- def self.new project_id: nil, credentials: nil, scope: nil, timeout: nil, client_config: nil, endpoint: nil,
81
- emulator_host: nil, project: nil, keyfile: nil
78
+ def self.new project_id: nil,
79
+ credentials: nil,
80
+ scope: nil,
81
+ timeout: nil,
82
+ endpoint: nil,
83
+ emulator_host: nil,
84
+ project: nil,
85
+ keyfile: nil
82
86
  project_id ||= (project || default_project_id)
83
87
  scope ||= configure.scope
84
88
  timeout ||= configure.timeout
85
- client_config ||= configure.client_config
86
89
  endpoint ||= configure.endpoint
87
90
  emulator_host ||= configure.emulator_host
88
91
 
@@ -90,11 +93,8 @@ module Google
90
93
  project_id = project_id.to_s # Always cast to a string
91
94
  raise ArgumentError, "project_id is missing" if project_id.empty?
92
95
 
93
- return PubSub::Project.new(
94
- PubSub::Service.new(
95
- project_id, :this_channel_is_insecure, host: emulator_host, timeout: timeout, client_config: client_config
96
- )
97
- )
96
+ service = PubSub::Service.new project_id, :this_channel_is_insecure, host: emulator_host, timeout: timeout
97
+ return PubSub::Project.new service
98
98
  end
99
99
 
100
100
  credentials ||= (keyfile || default_credentials(scope: scope))
@@ -106,11 +106,8 @@ module Google
106
106
  project_id = project_id.to_s # Always cast to a string
107
107
  raise ArgumentError, "project_id is missing" if project_id.empty?
108
108
 
109
- PubSub::Project.new(
110
- PubSub::Service.new(
111
- project_id, credentials, timeout: timeout, host: endpoint, client_config: client_config
112
- )
113
- )
109
+ service = PubSub::Service.new project_id, credentials, host: endpoint, timeout: timeout
110
+ PubSub::Project.new service
114
111
  end
115
112
 
116
113
  # rubocop:enable Metrics/AbcSize
@@ -131,8 +128,6 @@ module Google
131
128
  # * `retries` - (Integer) Number of times to retry requests on server
132
129
  # error.
133
130
  # * `timeout` - (Integer) Default timeout to use in requests.
134
- # * `client_config` - (Hash) A hash of values to override the default
135
- # behavior of the API client.
136
131
  # * `endpoint` - (String) Override of the endpoint host name, or `nil`
137
132
  # to use the default endpoint.
138
133
  # * `emulator_host` - (String) Host name of the emulator. Defaults to
@@ -167,7 +162,9 @@ module Google
167
162
  end
168
163
  end
169
164
 
170
- ## Legacy namespace
165
+ ## Legacy veneer namespace
171
166
  Pubsub = PubSub unless const_defined? :Pubsub
172
167
  end
168
+ ## Legacy generated client namespace
169
+ Pubsub = Cloud::PubSub unless const_defined? :Pubsub
173
170
  end
@@ -374,8 +374,7 @@ module Google
374
374
 
375
375
  PUBLISH_RETRY_ERRORS = [
376
376
  GRPC::Cancelled, GRPC::DeadlineExceeded, GRPC::Internal,
377
- GRPC::ResourceExhausted, GRPC::Unauthenticated, GRPC::Unavailable,
378
- GRPC::Core::CallError
377
+ GRPC::ResourceExhausted, GRPC::Unauthenticated, GRPC::Unavailable
379
378
  ].freeze
380
379
 
381
380
  def publish_batch_error_retryable? error
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
  require "googleauth"
17
- require "google/cloud/pubsub/v1/credentials.rb"
17
+ require "google/cloud/pubsub/v1/publisher/credentials.rb"
18
18
 
19
19
  module Google
20
20
  module Cloud
@@ -38,7 +38,7 @@ module Google
38
38
  #
39
39
  # pubsub.project_id #=> "my-project"
40
40
  #
41
- class Credentials < Google::Cloud::PubSub::V1::Credentials
41
+ class Credentials < Google::Cloud::PubSub::V1::Publisher::Credentials
42
42
  end
43
43
  end
44
44
 
@@ -18,17 +18,15 @@ require "google/cloud/pubsub/credentials"
18
18
  require "google/cloud/pubsub/convert"
19
19
  require "google/cloud/pubsub/version"
20
20
  require "google/cloud/pubsub/v1"
21
- require "google/gax/errors"
22
21
  require "securerandom"
23
22
 
24
23
  module Google
25
24
  module Cloud
26
25
  module PubSub
27
26
  ##
28
- # @private Represents the GAX Pub/Sub service, including all the API
29
- # methods.
27
+ # @private Represents the Pub/Sub service API, including IAM mixins.
30
28
  class Service
31
- attr_accessor :project, :credentials, :host, :timeout, :client_config
29
+ attr_accessor :project, :credentials, :host, :timeout
32
30
  ###
33
31
  # The same client_id is used across all streaming pull connections that are created by this client. This is
34
32
  # intentional, as it indicates to the server that any guarantees, such as message ordering, made for a stream
@@ -38,44 +36,25 @@ module Google
38
36
 
39
37
  ##
40
38
  # Creates a new Service instance.
41
- def initialize project, credentials, host: nil, timeout: nil,
42
- client_config: nil
39
+ def initialize project, credentials, host: nil, timeout: nil
43
40
  @project = project
44
41
  @credentials = credentials
45
- @host = host || V1::PublisherClient::SERVICE_ADDRESS
42
+ @host = host
46
43
  @timeout = timeout
47
- @client_config = client_config || {}
48
44
  @client_id = SecureRandom.uuid.freeze
49
45
  end
50
46
 
51
- def channel
52
- require "grpc"
53
- GRPC::Core::Channel.new host, chan_args, chan_creds
54
- end
55
-
56
- def chan_args
57
- { "grpc.max_send_message_length" => -1,
58
- "grpc.max_receive_message_length" => -1,
59
- "grpc.keepalive_time_ms" => 300_000,
60
- "grpc.service_config_disable_resolution" => 1 }
61
- end
62
-
63
- def chan_creds
64
- return credentials if insecure?
65
- require "grpc"
66
- GRPC::Core::ChannelCredentials.new.compose GRPC::Core::CallCredentials.new credentials.client.updater_proc
67
- end
68
-
69
47
  def subscriber
70
48
  return mocked_subscriber if mocked_subscriber
71
49
  @subscriber ||= begin
72
- V1::SubscriberClient.new(
73
- credentials: channel,
74
- timeout: timeout,
75
- client_config: client_config,
76
- lib_name: "gccl",
77
- lib_version: Google::Cloud::PubSub::VERSION
78
- )
50
+ V1::Subscriber::Client.new do |config|
51
+ config.credentials = credentials if credentials
52
+ config.timeout = timeout if timeout
53
+ config.endpoint = host if host
54
+ config.lib_name = "gccl"
55
+ config.lib_version = Google::Cloud::PubSub::VERSION
56
+ config.metadata = { "google-cloud-resource-prefix": "projects/#{@project}" }
57
+ end
79
58
  end
80
59
  end
81
60
  attr_accessor :mocked_subscriber
@@ -83,20 +62,32 @@ module Google
83
62
  def publisher
84
63
  return mocked_publisher if mocked_publisher
85
64
  @publisher ||= begin
86
- V1::PublisherClient.new(
87
- credentials: channel,
88
- timeout: timeout,
89
- client_config: client_config,
90
- lib_name: "gccl",
91
- lib_version: Google::Cloud::PubSub::VERSION
92
- )
65
+ V1::Publisher::Client.new do |config|
66
+ config.credentials = credentials if credentials
67
+ config.timeout = timeout if timeout
68
+ config.endpoint = host if host
69
+ config.lib_name = "gccl"
70
+ config.lib_version = Google::Cloud::PubSub::VERSION
71
+ config.metadata = { "google-cloud-resource-prefix": "projects/#{@project}" }
72
+ end
93
73
  end
94
74
  end
95
75
  attr_accessor :mocked_publisher
96
76
 
97
- def insecure?
98
- credentials == :this_channel_is_insecure
77
+ def iam
78
+ return mocked_iam if mocked_iam
79
+ @iam ||= begin
80
+ V1::IAMPolicy::Client.new do |config|
81
+ config.credentials = credentials if credentials
82
+ config.timeout = timeout if timeout
83
+ config.endpoint = host if host
84
+ config.lib_name = "gccl"
85
+ config.lib_version = Google::Cloud::PubSub::VERSION
86
+ config.metadata = { "google-cloud-resource-prefix" => "projects/#{@project}" }
87
+ end
88
+ end
99
89
  end
90
+ attr_accessor :mocked_iam
100
91
 
101
92
  ##
102
93
  # Gets the configuration of a topic.
@@ -105,30 +96,17 @@ module Google
105
96
  # If other attributes are added in the future,
106
97
  # they will be returned here.
107
98
  def get_topic topic_name, options = {}
108
- execute do
109
- publisher.get_topic topic_path(topic_name, options),
110
- options: default_options
111
- end
99
+ publisher.get_topic topic: topic_path(topic_name, options)
112
100
  end
113
101
 
114
102
  ##
115
103
  # Lists matching topics.
116
104
  def list_topics options = {}
117
- call_options = default_options
118
- if (token = options[:token])
119
- call_options = Google::Gax::CallOptions.new(
120
- kwargs: default_headers,
121
- page_token: token
122
- )
123
- end
105
+ paged_enum = publisher.list_topics project: project_path(options),
106
+ page_size: options[:max],
107
+ page_token: options[:token]
124
108
 
125
- execute do
126
- paged_enum = publisher.list_topics project_path(options),
127
- page_size: options[:max],
128
- options: call_options
129
-
130
- paged_enum.page.response
131
- end
109
+ paged_enum.response
132
110
  end
133
111
 
134
112
  ##
@@ -140,21 +118,16 @@ module Google
140
118
  }
141
119
  end
142
120
 
143
- execute do
144
- publisher.create_topic \
145
- topic_path(topic_name, options),
146
- labels: labels,
147
- kms_key_name: kms_key_name,
148
- message_storage_policy: message_storage_policy,
149
- options: default_options
150
- end
121
+ publisher.create_topic \
122
+ name: topic_path(topic_name, options),
123
+ labels: labels,
124
+ kms_key_name: kms_key_name,
125
+ message_storage_policy: message_storage_policy
151
126
  end
152
127
 
153
128
  def update_topic topic_obj, *fields
154
129
  mask = Google::Protobuf::FieldMask.new paths: fields.map(&:to_s)
155
- execute do
156
- publisher.update_topic topic_obj, mask, options: default_options
157
- end
130
+ publisher.update_topic topic: topic_obj, update_mask: mask
158
131
  end
159
132
 
160
133
  ##
@@ -163,10 +136,7 @@ module Google
163
136
  # exist. After a topic is deleted, a new topic may be created with the
164
137
  # same name.
165
138
  def delete_topic topic_name
166
- execute do
167
- publisher.delete_topic topic_path(topic_name),
168
- options: default_options
169
- end
139
+ publisher.delete_topic topic: topic_path(topic_name)
170
140
  end
171
141
 
172
142
  ##
@@ -175,101 +145,64 @@ module Google
175
145
  # The messages parameter is an array of arrays.
176
146
  # The first element is the data, second is attributes hash.
177
147
  def publish topic, messages
178
- execute do
179
- publisher.publish topic_path(topic), messages,
180
- options: default_options
181
- end
148
+ publisher.publish topic: topic_path(topic), messages: messages
182
149
  end
183
150
 
184
151
  ##
185
152
  # Gets the details of a subscription.
186
153
  def get_subscription subscription_name, options = {}
187
- subscription = subscription_path subscription_name, options
188
- execute do
189
- subscriber.get_subscription subscription, options: default_options
190
- end
154
+ subscriber.get_subscription subscription: subscription_path(subscription_name, options)
191
155
  end
192
156
 
193
157
  ##
194
158
  # Lists matching subscriptions by project and topic.
195
159
  def list_topics_subscriptions topic, options = {}
196
- call_options = default_options
197
- if (token = options[:token])
198
- call_options = Google::Gax::CallOptions.new(
199
- kwargs: default_headers,
200
- page_token: token
201
- )
202
- end
203
-
204
- execute do
205
- paged_enum = publisher.list_topic_subscriptions \
206
- topic_path(topic, options),
207
- page_size: options[:max],
208
- options: call_options
209
-
210
- paged_enum.page.response
211
- end
160
+ publisher.list_topic_subscriptions topic: topic_path(topic, options),
161
+ page_size: options[:max],
162
+ page_token: options[:token]
212
163
  end
213
164
 
214
165
  ##
215
166
  # Lists matching subscriptions by project.
216
167
  def list_subscriptions options = {}
217
- call_options = default_options
218
- if (token = options[:token])
219
- call_options = Google::Gax::CallOptions.new(
220
- kwargs: default_headers,
221
- page_token: token
222
- )
223
- end
224
-
225
- execute do
226
- paged_enum = subscriber.list_subscriptions project_path(options),
227
- page_size: options[:max],
228
- options: call_options
168
+ paged_enum = subscriber.list_subscriptions project: project_path(options),
169
+ page_size: options[:max],
170
+ page_token: options[:token]
229
171
 
230
- paged_enum.page.response
231
- end
172
+ paged_enum.response
232
173
  end
233
174
 
234
175
  ##
235
176
  # Creates a subscription on a given topic for a given subscriber.
236
177
  def create_subscription topic, subscription_name, options = {}
237
- name = subscription_path subscription_name, options
238
- topic = topic_path topic
239
178
  push_config = if options[:endpoint]
240
179
  Google::Cloud::PubSub::V1::PushConfig.new \
241
180
  push_endpoint: options[:endpoint],
242
181
  attributes: (options[:attributes] || {}).to_h
243
182
  end
244
- execute do
245
- subscriber.create_subscription \
246
- name, topic,
247
- push_config: push_config,
248
- ack_deadline_seconds: options[:deadline],
249
- retain_acked_messages: options[:retain_acked],
250
- message_retention_duration: Convert.number_to_duration(options[:retention]),
251
- labels: options[:labels],
252
- enable_message_ordering: options[:message_ordering],
253
- filter: options[:filter],
254
- dead_letter_policy: dead_letter_policy(options),
255
- retry_policy: options[:retry_policy],
256
- options: default_options
257
- end
183
+ subscriber.create_subscription \
184
+ name: subscription_path(subscription_name, options),
185
+ topic: topic_path(topic),
186
+ push_config: push_config,
187
+ ack_deadline_seconds: options[:deadline],
188
+ retain_acked_messages: options[:retain_acked],
189
+ message_retention_duration: Convert.number_to_duration(options[:retention]),
190
+ labels: options[:labels],
191
+ enable_message_ordering: options[:message_ordering],
192
+ filter: options[:filter],
193
+ dead_letter_policy: dead_letter_policy(options),
194
+ retry_policy: options[:retry_policy]
258
195
  end
259
196
 
260
197
  def update_subscription subscription_obj, *fields
261
198
  mask = Google::Protobuf::FieldMask.new paths: fields.map(&:to_s)
262
- execute do
263
- subscriber.update_subscription subscription_obj, mask, options: default_options
264
- end
199
+ subscriber.update_subscription subscription: subscription_obj, update_mask: mask
265
200
  end
266
201
 
267
202
  ##
268
203
  # Deletes an existing subscription. All pending messages in the subscription are immediately dropped.
269
204
  def delete_subscription subscription
270
- execute do
271
- subscriber.delete_subscription subscription_path(subscription), options: default_options
272
- end
205
+ subscriber.delete_subscription subscription: subscription_path(subscription)
273
206
  end
274
207
 
275
208
  ##
@@ -277,45 +210,33 @@ module Google
277
210
  # `Pull` and `StreamingPull` requests will raise `FAILED_PRECONDITION`. If the subscription is a push
278
211
  # subscription, pushes to the endpoint will stop.
279
212
  def detach_subscription subscription
280
- execute do
281
- publisher.detach_subscription subscription_path(subscription), options: default_options
282
- end
213
+ publisher.detach_subscription subscription: subscription_path(subscription)
283
214
  end
284
215
 
285
216
  ##
286
217
  # Pulls a single message from the server.
287
218
  def pull subscription, options = {}
288
- subscription = subscription_path subscription, options
289
219
  max_messages = options.fetch(:max, 100).to_i
290
220
  return_immediately = !(!options.fetch(:immediate, true))
291
221
 
292
- execute do
293
- subscriber.pull subscription,
294
- max_messages,
295
- return_immediately: return_immediately,
296
- options: default_options
297
- end
222
+ subscriber.pull subscription: subscription_path(subscription, options),
223
+ max_messages: max_messages,
224
+ return_immediately: return_immediately
298
225
  end
299
226
 
300
227
  def streaming_pull request_enum
301
- execute do
302
- subscriber.streaming_pull request_enum, options: default_options
303
- end
228
+ subscriber.streaming_pull request_enum
304
229
  end
305
230
 
306
231
  ##
307
232
  # Acknowledges receipt of a message.
308
233
  def acknowledge subscription, *ack_ids
309
- execute do
310
- subscriber.acknowledge subscription_path(subscription), ack_ids,
311
- options: default_options
312
- end
234
+ subscriber.acknowledge subscription: subscription_path(subscription), ack_ids: ack_ids
313
235
  end
314
236
 
315
237
  ##
316
238
  # Modifies the PushConfig for a specified subscription.
317
239
  def modify_push_config subscription, endpoint, attributes
318
- subscription = subscription_path subscription
319
240
  # Convert attributes to strings to match the protobuf definition
320
241
  attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
321
242
  push_config = Google::Cloud::PubSub::V1::PushConfig.new(
@@ -323,138 +244,83 @@ module Google
323
244
  attributes: attributes
324
245
  )
325
246
 
326
- execute do
327
- subscriber.modify_push_config subscription, push_config,
328
- options: default_options
329
- end
247
+ subscriber.modify_push_config subscription: subscription_path(subscription),
248
+ push_config: push_config
330
249
  end
331
250
 
332
251
  ##
333
252
  # Modifies the ack deadline for a specific message.
334
253
  def modify_ack_deadline subscription, ids, deadline
335
- execute do
336
- subscriber.modify_ack_deadline subscription_path(subscription),
337
- Array(ids),
338
- deadline, options: default_options
339
- end
254
+ subscriber.modify_ack_deadline subscription: subscription_path(subscription),
255
+ ack_ids: Array(ids),
256
+ ack_deadline_seconds: deadline
340
257
  end
341
258
 
342
259
  ##
343
260
  # Lists snapshots by project.
344
261
  def list_snapshots options = {}
345
- call_options = default_options
346
- if (token = options[:token])
347
- call_options = Google::Gax::CallOptions.new(
348
- kwargs: default_headers,
349
- page_token: token
350
- )
351
- end
262
+ paged_enum = subscriber.list_snapshots project: project_path(options),
263
+ page_size: options[:max],
264
+ page_token: options[:token]
352
265
 
353
- execute do
354
- paged_enum = subscriber.list_snapshots project_path(options),
355
- page_size: options[:max],
356
- options: call_options
357
-
358
- paged_enum.page.response
359
- end
266
+ paged_enum.response
360
267
  end
361
268
 
362
269
  ##
363
270
  # Creates a snapshot on a given subscription.
364
271
  def create_snapshot subscription, snapshot_name, labels: nil
365
- name = snapshot_path snapshot_name
366
- execute do
367
- subscriber.create_snapshot name,
368
- subscription_path(subscription),
369
- labels: labels,
370
- options: default_options
371
- end
272
+ subscriber.create_snapshot name: snapshot_path(snapshot_name),
273
+ subscription: subscription_path(subscription),
274
+ labels: labels
372
275
  end
373
276
 
374
277
  def update_snapshot snapshot_obj, *fields
375
278
  mask = Google::Protobuf::FieldMask.new paths: fields.map(&:to_s)
376
- execute do
377
- subscriber.update_snapshot snapshot_obj, mask, options: default_options
378
- end
279
+ subscriber.update_snapshot snapshot: snapshot_obj, update_mask: mask
379
280
  end
380
281
 
381
282
  ##
382
283
  # Deletes an existing snapshot.
383
284
  # All pending messages in the snapshot are immediately dropped.
384
285
  def delete_snapshot snapshot
385
- execute do
386
- subscriber.delete_snapshot snapshot_path(snapshot),
387
- options: default_options
388
- end
286
+ subscriber.delete_snapshot snapshot: snapshot_path(snapshot)
389
287
  end
390
288
 
391
289
  ##
392
290
  # Adjusts the given subscription to a time or snapshot.
393
291
  def seek subscription, time_or_snapshot
394
- subscription = subscription_path subscription
395
- execute do
396
- if a_time? time_or_snapshot
397
- time = Convert.time_to_timestamp time_or_snapshot
398
- subscriber.seek subscription, time: time, options: default_options
399
- else
400
- time_or_snapshot = time_or_snapshot.name if time_or_snapshot.is_a? Snapshot
401
- subscriber.seek subscription,
402
- snapshot: snapshot_path(time_or_snapshot),
403
- options: default_options
404
- end
292
+ if a_time? time_or_snapshot
293
+ time = Convert.time_to_timestamp time_or_snapshot
294
+ subscriber.seek subscription: subscription, time: time
295
+ else
296
+ time_or_snapshot = time_or_snapshot.name if time_or_snapshot.is_a? Snapshot
297
+ subscriber.seek subscription: subscription_path(subscription),
298
+ snapshot: snapshot_path(time_or_snapshot)
405
299
  end
406
300
  end
407
301
 
408
302
  def get_topic_policy topic_name, options = {}
409
- execute do
410
- publisher.get_iam_policy topic_path(topic_name, options),
411
- options: default_options
412
- end
303
+ iam.get_iam_policy resource: topic_path(topic_name, options)
413
304
  end
414
305
 
415
306
  def set_topic_policy topic_name, new_policy, options = {}
416
- resource = topic_path topic_name, options
417
-
418
- execute do
419
- publisher.set_iam_policy resource, new_policy,
420
- options: default_options
421
- end
307
+ iam.set_iam_policy resource: topic_path(topic_name, options), policy: new_policy
422
308
  end
423
309
 
424
310
  def test_topic_permissions topic_name, permissions, options = {}
425
- resource = topic_path topic_name, options
426
-
427
- execute do
428
- publisher.test_iam_permissions resource, permissions,
429
- options: default_options
430
- end
311
+ iam.test_iam_permissions resource: topic_path(topic_name, options), permissions: permissions
431
312
  end
432
313
 
433
314
  def get_subscription_policy subscription_name, options = {}
434
- resource = subscription_path subscription_name, options
435
-
436
- execute do
437
- subscriber.get_iam_policy resource, options: default_options
438
- end
315
+ iam.get_iam_policy resource: subscription_path(subscription_name, options)
439
316
  end
440
317
 
441
318
  def set_subscription_policy subscription_name, new_policy, options = {}
442
- resource = subscription_path subscription_name, options
443
-
444
- execute do
445
- subscriber.set_iam_policy resource, new_policy,
446
- options: default_options
447
- end
319
+ iam.set_iam_policy resource: subscription_path(subscription_name, options), policy: new_policy
448
320
  end
449
321
 
450
- def test_subscription_permissions subscription_name,
451
- permissions, options = {}
452
- resource = subscription_path subscription_name, options
453
-
454
- execute do
455
- subscriber.test_iam_permissions resource, permissions,
456
- options: default_options
457
- end
322
+ def test_subscription_permissions subscription_name, permissions, options = {}
323
+ iam.test_iam_permissions resource: subscription_path(subscription_name, options), permissions: permissions
458
324
  end
459
325
 
460
326
  def project_path options = {}
@@ -498,21 +364,6 @@ module Google
498
364
  end
499
365
  policy
500
366
  end
501
-
502
- def default_headers
503
- { "google-cloud-resource-prefix" => "projects/#{@project}" }
504
- end
505
-
506
- def default_options
507
- Google::Gax::CallOptions.new kwargs: default_headers
508
- end
509
-
510
- def execute
511
- yield
512
- rescue Google::Gax::GaxError => e
513
- # GaxError wraps BadStatus, but exposes it as #cause
514
- raise Google::Cloud::Error.from_error(e.cause)
515
- end
516
367
  end
517
368
  end
518
369