google-cloud-pubsub 0.20.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +18 -0
  3. data/AUTHENTICATION.md +178 -0
  4. data/CHANGELOG.md +659 -0
  5. data/CODE_OF_CONDUCT.md +40 -0
  6. data/CONTRIBUTING.md +187 -0
  7. data/EMULATOR.md +37 -0
  8. data/LICENSE +201 -0
  9. data/LOGGING.md +32 -0
  10. data/OVERVIEW.md +528 -0
  11. data/TROUBLESHOOTING.md +31 -0
  12. data/lib/google/cloud/pubsub/async_publisher/batch.rb +310 -0
  13. data/lib/google/cloud/pubsub/async_publisher.rb +402 -0
  14. data/lib/google/cloud/pubsub/batch_publisher.rb +100 -0
  15. data/lib/google/cloud/pubsub/convert.rb +91 -0
  16. data/lib/google/cloud/pubsub/credentials.rb +26 -10
  17. data/lib/google/cloud/pubsub/errors.rb +85 -0
  18. data/lib/google/cloud/pubsub/message.rb +82 -20
  19. data/lib/google/cloud/pubsub/policy.rb +40 -61
  20. data/lib/google/cloud/pubsub/project.rb +405 -265
  21. data/lib/google/cloud/pubsub/publish_result.rb +103 -0
  22. data/lib/google/cloud/pubsub/received_message.rb +165 -30
  23. data/lib/google/cloud/pubsub/retry_policy.rb +88 -0
  24. data/lib/google/cloud/pubsub/schema/list.rb +180 -0
  25. data/lib/google/cloud/pubsub/schema.rb +310 -0
  26. data/lib/google/cloud/pubsub/service.rb +304 -162
  27. data/lib/google/cloud/pubsub/snapshot/list.rb +178 -0
  28. data/lib/google/cloud/pubsub/snapshot.rb +205 -0
  29. data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +54 -0
  30. data/lib/google/cloud/pubsub/subscriber/inventory.rb +173 -0
  31. data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
  32. data/lib/google/cloud/pubsub/subscriber/stream.rb +400 -0
  33. data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +230 -0
  34. data/lib/google/cloud/pubsub/subscriber.rb +417 -0
  35. data/lib/google/cloud/pubsub/subscription/list.rb +38 -43
  36. data/lib/google/cloud/pubsub/subscription/push_config.rb +268 -0
  37. data/lib/google/cloud/pubsub/subscription.rb +1040 -210
  38. data/lib/google/cloud/pubsub/topic/list.rb +32 -37
  39. data/lib/google/cloud/pubsub/topic.rb +726 -177
  40. data/lib/google/cloud/pubsub/version.rb +6 -4
  41. data/lib/google/cloud/pubsub.rb +138 -413
  42. data/lib/google-cloud-pubsub.rb +60 -42
  43. metadata +88 -39
  44. data/lib/google/cloud/pubsub/topic/publisher.rb +0 -87
  45. data/lib/google/iam/v1/iam_policy.rb +0 -33
  46. data/lib/google/iam/v1/iam_policy_services.rb +0 -30
  47. data/lib/google/iam/v1/policy.rb +0 -25
  48. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -129
  49. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -117
@@ -1,10 +1,10 @@
1
- # Copyright 2016 Google Inc. All rights reserved.
1
+ # Copyright 2016 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
- # http://www.apache.org/licenses/LICENSE-2.0
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,
@@ -12,14 +12,17 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+
15
16
  ##
16
- # This file is here to be autorequired by bundler, so that the .bigquery and
17
- # #bigquery methods can be available, but the library and all dependencies won't
18
- # be loaded until required and used.
17
+ # This file is here to be autorequired by bundler, so that the
18
+ # Google::Cloud.pubsub and Google::Cloud#pubsub methods can be available, but
19
+ # the library and all dependencies won't be loaded until required and used.
19
20
 
20
21
 
21
22
  gem "google-cloud-core"
22
- require "google/cloud"
23
+ require "google/cloud" unless defined? Google::Cloud.new
24
+ require "google/cloud/config"
25
+ require "googleauth"
23
26
 
24
27
  module Google
25
28
  module Cloud
@@ -27,8 +30,8 @@ module Google
27
30
  # Creates a new object for connecting to the Pub/Sub service.
28
31
  # Each call creates a new connection.
29
32
  #
30
- # For more information on connecting to Google Cloud see the [Authentication
31
- # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
33
+ # For more information on connecting to Google Cloud see the
34
+ # {file:AUTHENTICATION.md Authentication Guide}.
32
35
  #
33
36
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
34
37
  # set of resources and operations that the connection can access. See
@@ -38,11 +41,9 @@ module Google
38
41
  # The default scope is:
39
42
  #
40
43
  # * `https://www.googleapis.com/auth/pubsub`
41
- # @param [Integer] retries Number of times to retry requests on server
42
- # error. The default value is `3`. Optional.
43
44
  # @param [Integer] timeout Default timeout to use in requests. Optional.
44
45
  #
45
- # @return [Google::Cloud::Pubsub::Project]
46
+ # @return [Google::Cloud::PubSub::Project]
46
47
  #
47
48
  # @example
48
49
  # require "google/cloud"
@@ -59,23 +60,25 @@ module Google
59
60
  # platform_scope = "https://www.googleapis.com/auth/cloud-platform"
60
61
  # pubsub = gcloud.pubsub scope: platform_scope
61
62
  #
62
- def pubsub scope: nil, retries: nil, timeout: nil
63
- Google::Cloud.pubsub @project, @keyfile, scope: scope,
64
- retries: (retries || @retries),
65
- timeout: (timeout || @timeout)
63
+ def pubsub scope: nil, timeout: nil
64
+ timeout ||= @timeout
65
+ Google::Cloud.pubsub @project, @keyfile, scope: scope, timeout: timeout
66
66
  end
67
67
 
68
68
  ##
69
69
  # Creates a new object for connecting to the Pub/Sub service.
70
70
  # Each call creates a new connection.
71
71
  #
72
- # For more information on connecting to Google Cloud see the [Authentication
73
- # Guide](https://googlecloudplatform.github.io/google-cloud-ruby/#/docs/guides/authentication).
72
+ # For more information on connecting to Google Cloud see the
73
+ # {file:AUTHENTICATION.md Authentication Guide}.
74
74
  #
75
- # @param [String] project Project identifier for the Pub/Sub service you are
76
- # connecting to.
77
- # @param [String, Hash] keyfile Keyfile downloaded from Google Cloud. If
78
- # file path the file must be readable.
75
+ # @param [String] project_id Project identifier for the Pub/Sub service you
76
+ # are connecting to. If not present, the default project for the
77
+ # credentials is used.
78
+ # @param [String, Hash, Google::Auth::Credentials] credentials The path to
79
+ # the keyfile as a String, the contents of the keyfile as a Hash, or a
80
+ # Google::Auth::Credentials object.
81
+ # (See {Google::Cloud::PubSub::Credentials})
79
82
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling the
80
83
  # set of resources and operations that the connection can access. See
81
84
  # [Using OAuth 2.0 to Access Google
@@ -84,39 +87,54 @@ module Google
84
87
  # The default scope is:
85
88
  #
86
89
  # * `https://www.googleapis.com/auth/pubsub`
87
- # @param [Integer] retries Number of times to retry requests on server
88
- # error. The default value is `3`. Optional.
89
90
  # @param [Integer] timeout Default timeout to use in requests. Optional.
90
91
  #
91
- # @return [Google::Cloud::Pubsub::Project]
92
+ # @return [Google::Cloud::PubSub::Project]
92
93
  #
93
94
  # @example
94
- # require "google/cloud/pubsub"
95
+ # require "google/cloud"
95
96
  #
96
97
  # pubsub = Google::Cloud.pubsub
97
98
  #
98
99
  # topic = pubsub.topic "my-topic"
99
100
  # topic.publish "task completed"
100
101
  #
101
- def self.pubsub project = nil, keyfile = nil, scope: nil, retries: nil,
102
+ def self.pubsub project_id = nil,
103
+ credentials = nil,
104
+ scope: nil,
102
105
  timeout: nil
103
106
  require "google/cloud/pubsub"
104
- project ||= Google::Cloud::Pubsub::Project.default_project
105
- if ENV["PUBSUB_EMULATOR_HOST"]
106
- ps = Google::Cloud::Pubsub::Project.new(
107
- project, :this_channel_is_insecure)
108
- ps.service.host = ENV["PUBSUB_EMULATOR_HOST"]
109
- return ps
110
- end
111
- if keyfile.nil?
112
- credentials = Google::Cloud::Pubsub::Credentials.default scope: scope
113
- else
114
- credentials = Google::Cloud::Pubsub::Credentials.new(
115
- keyfile, scope: scope)
116
- end
117
- Google::Cloud::Pubsub::Project.new(
118
- Google::Cloud::Pubsub::Service.new(
119
- project, credentials, retries: retries, timeout: timeout))
107
+ Google::Cloud::PubSub.new project_id: project_id, credentials: credentials, scope: scope, timeout: timeout
120
108
  end
121
109
  end
122
110
  end
111
+
112
+ # Set the default pubsub configuration
113
+ Google::Cloud.configure.add_config! :pubsub do |config|
114
+ default_project = Google::Cloud::Config.deferred do
115
+ ENV["PUBSUB_PROJECT"]
116
+ end
117
+ default_creds = Google::Cloud::Config.deferred do
118
+ Google::Cloud::Config.credentials_from_env(
119
+ "PUBSUB_CREDENTIALS", "PUBSUB_CREDENTIALS_JSON", "PUBSUB_KEYFILE", "PUBSUB_KEYFILE_JSON"
120
+ )
121
+ end
122
+ default_emulator = Google::Cloud::Config.deferred do
123
+ ENV["PUBSUB_EMULATOR_HOST"]
124
+ end
125
+ default_scopes = [
126
+ "https://www.googleapis.com/auth/cloud-platform",
127
+ "https://www.googleapis.com/auth/pubsub"
128
+ ]
129
+
130
+ config.add_field! :project_id, default_project, match: String, allow_nil: true
131
+ config.add_alias! :project, :project_id
132
+ config.add_field! :credentials, default_creds, match: [String, Hash, Google::Auth::Credentials], allow_nil: true
133
+ config.add_alias! :keyfile, :credentials
134
+ config.add_field! :scope, default_scopes, match: [String, Array]
135
+ config.add_field! :quota_project, nil, match: String
136
+ config.add_field! :timeout, nil, match: Integer
137
+ config.add_field! :emulator_host, default_emulator, match: String, allow_nil: true
138
+ config.add_field! :on_error, nil, match: Proc
139
+ config.add_field! :endpoint, "pubsub.googleapis.com", match: String
140
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 2.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,78 +9,106 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-08-27 00:00:00.000000000 Z
12
+ date: 2021-04-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: google-cloud-core
15
+ name: concurrent-ruby
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.20.0
20
+ version: '1.1'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.20.0
27
+ version: '1.1'
28
28
  - !ruby/object:Gem::Dependency
29
- name: grpc
29
+ name: google-cloud-core
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '1.0'
34
+ version: '1.5'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.0'
41
+ version: '1.5'
42
42
  - !ruby/object:Gem::Dependency
43
- name: google-protobuf
43
+ name: google-cloud-pubsub-v1
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '3.0'
48
+ version: '0.0'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '3.0'
55
+ version: '0.0'
56
56
  - !ruby/object:Gem::Dependency
57
- name: googleapis-common-protos
57
+ name: autotest-suffix
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: '1.2'
63
- type: :runtime
62
+ version: '1.1'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '1.1'
70
+ - !ruby/object:Gem::Dependency
71
+ name: avro
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1.10'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1.10'
84
+ - !ruby/object:Gem::Dependency
85
+ name: google-style
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 1.25.1
91
+ type: :development
64
92
  prerelease: false
65
93
  version_requirements: !ruby/object:Gem::Requirement
66
94
  requirements:
67
95
  - - "~>"
68
96
  - !ruby/object:Gem::Version
69
- version: '1.2'
97
+ version: 1.25.1
70
98
  - !ruby/object:Gem::Dependency
71
99
  name: minitest
72
100
  requirement: !ruby/object:Gem::Requirement
73
101
  requirements:
74
102
  - - "~>"
75
103
  - !ruby/object:Gem::Version
76
- version: '5.9'
104
+ version: '5.14'
77
105
  type: :development
78
106
  prerelease: false
79
107
  version_requirements: !ruby/object:Gem::Requirement
80
108
  requirements:
81
109
  - - "~>"
82
110
  - !ruby/object:Gem::Version
83
- version: '5.9'
111
+ version: '5.14'
84
112
  - !ruby/object:Gem::Dependency
85
113
  name: minitest-autotest
86
114
  requirement: !ruby/object:Gem::Requirement
@@ -124,35 +152,35 @@ dependencies:
124
152
  - !ruby/object:Gem::Version
125
153
  version: '5.2'
126
154
  - !ruby/object:Gem::Dependency
127
- name: autotest-suffix
155
+ name: redcarpet
128
156
  requirement: !ruby/object:Gem::Requirement
129
157
  requirements:
130
158
  - - "~>"
131
159
  - !ruby/object:Gem::Version
132
- version: '1.1'
160
+ version: '3.0'
133
161
  type: :development
134
162
  prerelease: false
135
163
  version_requirements: !ruby/object:Gem::Requirement
136
164
  requirements:
137
165
  - - "~>"
138
166
  - !ruby/object:Gem::Version
139
- version: '1.1'
167
+ version: '3.0'
140
168
  - !ruby/object:Gem::Dependency
141
- name: rubocop
169
+ name: simplecov
142
170
  requirement: !ruby/object:Gem::Requirement
143
171
  requirements:
144
- - - "<="
172
+ - - "~>"
145
173
  - !ruby/object:Gem::Version
146
- version: 0.35.1
174
+ version: '0.9'
147
175
  type: :development
148
176
  prerelease: false
149
177
  version_requirements: !ruby/object:Gem::Requirement
150
178
  requirements:
151
- - - "<="
179
+ - - "~>"
152
180
  - !ruby/object:Gem::Version
153
- version: 0.35.1
181
+ version: '0.9'
154
182
  - !ruby/object:Gem::Dependency
155
- name: simplecov
183
+ name: yard
156
184
  requirement: !ruby/object:Gem::Requirement
157
185
  requirements:
158
186
  - - "~>"
@@ -166,19 +194,19 @@ dependencies:
166
194
  - !ruby/object:Gem::Version
167
195
  version: '0.9'
168
196
  - !ruby/object:Gem::Dependency
169
- name: yard
197
+ name: yard-doctest
170
198
  requirement: !ruby/object:Gem::Requirement
171
199
  requirements:
172
200
  - - "~>"
173
201
  - !ruby/object:Gem::Version
174
- version: '0.9'
202
+ version: 0.1.13
175
203
  type: :development
176
204
  prerelease: false
177
205
  version_requirements: !ruby/object:Gem::Requirement
178
206
  requirements:
179
207
  - - "~>"
180
208
  - !ruby/object:Gem::Version
181
- version: '0.9'
209
+ version: 0.1.13
182
210
  description: google-cloud-pubsub is the official library for Google Cloud Pub/Sub.
183
211
  email:
184
212
  - mike@blowmage.com
@@ -187,26 +215,48 @@ executables: []
187
215
  extensions: []
188
216
  extra_rdoc_files: []
189
217
  files:
218
+ - ".yardopts"
219
+ - AUTHENTICATION.md
220
+ - CHANGELOG.md
221
+ - CODE_OF_CONDUCT.md
222
+ - CONTRIBUTING.md
223
+ - EMULATOR.md
224
+ - LICENSE
225
+ - LOGGING.md
226
+ - OVERVIEW.md
227
+ - TROUBLESHOOTING.md
190
228
  - lib/google-cloud-pubsub.rb
191
229
  - lib/google/cloud/pubsub.rb
230
+ - lib/google/cloud/pubsub/async_publisher.rb
231
+ - lib/google/cloud/pubsub/async_publisher/batch.rb
232
+ - lib/google/cloud/pubsub/batch_publisher.rb
233
+ - lib/google/cloud/pubsub/convert.rb
192
234
  - lib/google/cloud/pubsub/credentials.rb
235
+ - lib/google/cloud/pubsub/errors.rb
193
236
  - lib/google/cloud/pubsub/message.rb
194
237
  - lib/google/cloud/pubsub/policy.rb
195
238
  - lib/google/cloud/pubsub/project.rb
239
+ - lib/google/cloud/pubsub/publish_result.rb
196
240
  - lib/google/cloud/pubsub/received_message.rb
241
+ - lib/google/cloud/pubsub/retry_policy.rb
242
+ - lib/google/cloud/pubsub/schema.rb
243
+ - lib/google/cloud/pubsub/schema/list.rb
197
244
  - lib/google/cloud/pubsub/service.rb
245
+ - lib/google/cloud/pubsub/snapshot.rb
246
+ - lib/google/cloud/pubsub/snapshot/list.rb
247
+ - lib/google/cloud/pubsub/subscriber.rb
248
+ - lib/google/cloud/pubsub/subscriber/enumerator_queue.rb
249
+ - lib/google/cloud/pubsub/subscriber/inventory.rb
250
+ - lib/google/cloud/pubsub/subscriber/sequencer.rb
251
+ - lib/google/cloud/pubsub/subscriber/stream.rb
252
+ - lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb
198
253
  - lib/google/cloud/pubsub/subscription.rb
199
254
  - lib/google/cloud/pubsub/subscription/list.rb
255
+ - lib/google/cloud/pubsub/subscription/push_config.rb
200
256
  - lib/google/cloud/pubsub/topic.rb
201
257
  - lib/google/cloud/pubsub/topic/list.rb
202
- - lib/google/cloud/pubsub/topic/publisher.rb
203
258
  - lib/google/cloud/pubsub/version.rb
204
- - lib/google/iam/v1/iam_policy.rb
205
- - lib/google/iam/v1/iam_policy_services.rb
206
- - lib/google/iam/v1/policy.rb
207
- - lib/google/pubsub/v1/pubsub_pb.rb
208
- - lib/google/pubsub/v1/pubsub_services_pb.rb
209
- homepage: http://googlecloudplatform.github.io/google-cloud-ruby/
259
+ homepage: https://github.com/googleapis/google-cloud-ruby/tree/master/google-cloud-pubsub
210
260
  licenses:
211
261
  - Apache-2.0
212
262
  metadata: {}
@@ -218,15 +268,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
218
268
  requirements:
219
269
  - - ">="
220
270
  - !ruby/object:Gem::Version
221
- version: 2.0.0
271
+ version: '2.5'
222
272
  required_rubygems_version: !ruby/object:Gem::Requirement
223
273
  requirements:
224
274
  - - ">="
225
275
  - !ruby/object:Gem::Version
226
276
  version: '0'
227
277
  requirements: []
228
- rubyforge_project:
229
- rubygems_version: 2.6.4
278
+ rubygems_version: 3.2.16
230
279
  signing_key:
231
280
  specification_version: 4
232
281
  summary: API Client library for Google Cloud Pub/Sub
@@ -1,87 +0,0 @@
1
- # Copyright 2015 Google Inc. All rights reserved.
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
- # http://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
- module Google
17
- module Cloud
18
- module Pubsub
19
- class Topic
20
- ##
21
- # Topic Publisher object used to publish multiple messages at once.
22
- #
23
- # @example
24
- # require "google/cloud"
25
- #
26
- # gcloud = Google::Cloud.new
27
- # pubsub = gcloud.pubsub
28
- #
29
- # topic = pubsub.topic "my-topic"
30
- # msgs = topic.publish do |t|
31
- # t.publish "new-message-1", foo: :bar
32
- # t.publish "new-message-2", foo: :baz
33
- # t.publish "new-message-3", foo: :bif
34
- # end
35
- class Publisher
36
- ##
37
- # @private The messages to publish
38
- attr_reader :messages
39
-
40
- ##
41
- # @private Create a new instance of the object.
42
- def initialize data = nil, attributes = {}
43
- @messages = []
44
- @mode = :batch
45
- return if data.nil?
46
- @mode = :single
47
- publish data, attributes
48
- end
49
-
50
- ##
51
- # Add multiple messages to the topic.
52
- # All messages added will be published at once.
53
- # See {Google::Cloud::Pubsub::Topic#publish}
54
- def publish data, attributes = {}
55
- # Convert IO-ish objects to strings
56
- if data.respond_to?(:read) && data.respond_to?(:rewind)
57
- data.rewind
58
- data = data.read
59
- end
60
- # Convert data to encoded byte array to match the protobuf defn
61
- data = String(data).force_encoding("ASCII-8BIT")
62
- # Convert attributes to strings to match the protobuf definition
63
- attributes = Hash[attributes.map { |k, v| [String(k), String(v)] }]
64
- @messages << [data, attributes]
65
- end
66
-
67
- ##
68
- # @private Create Message objects with message ids.
69
- def to_gcloud_messages message_ids
70
- msgs = @messages.zip(Array(message_ids)).map do |arr, id|
71
- Message.from_grpc(
72
- Google::Pubsub::V1::PubsubMessage.new(
73
- data: arr[0], attributes: arr[1], message_id: id))
74
- end
75
- # Return just one Message if a single publish,
76
- # otherwise return the array of Messages.
77
- if @mode == :single && msgs.count <= 1
78
- msgs.first
79
- else
80
- msgs
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
87
- end