google-cloud-pubsub 1.10.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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