cloudenvoy 0.1.0.dev → 0.1.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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +37 -0
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +1 -0
  5. data/Appraisals +9 -0
  6. data/CHANGELOG.md +4 -0
  7. data/Gemfile.lock +212 -1
  8. data/README.md +569 -7
  9. data/app/controllers/cloudenvoy/application_controller.rb +8 -0
  10. data/app/controllers/cloudenvoy/subscriber_controller.rb +59 -0
  11. data/cloudenvoy.gemspec +14 -2
  12. data/config/routes.rb +5 -0
  13. data/examples/rails/.ruby-version +1 -0
  14. data/examples/rails/Gemfile +15 -0
  15. data/examples/rails/Gemfile.lock +207 -0
  16. data/examples/rails/Procfile +1 -0
  17. data/examples/rails/README.md +31 -0
  18. data/examples/rails/Rakefile +8 -0
  19. data/examples/rails/app/assets/config/manifest.js +2 -0
  20. data/examples/rails/app/assets/images/.keep +0 -0
  21. data/examples/rails/app/assets/stylesheets/application.css +15 -0
  22. data/examples/rails/app/channels/application_cable/channel.rb +6 -0
  23. data/examples/rails/app/channels/application_cable/connection.rb +6 -0
  24. data/examples/rails/app/controllers/application_controller.rb +4 -0
  25. data/examples/rails/app/controllers/concerns/.keep +0 -0
  26. data/examples/rails/app/helpers/application_helper.rb +4 -0
  27. data/examples/rails/app/javascript/packs/application.js +15 -0
  28. data/examples/rails/app/jobs/application_job.rb +9 -0
  29. data/examples/rails/app/mailers/application_mailer.rb +6 -0
  30. data/examples/rails/app/models/application_record.rb +5 -0
  31. data/examples/rails/app/models/concerns/.keep +0 -0
  32. data/examples/rails/app/publishers/hello_publisher.rb +34 -0
  33. data/examples/rails/app/subscribers/hello_subscriber.rb +16 -0
  34. data/examples/rails/app/views/layouts/application.html.erb +14 -0
  35. data/examples/rails/app/views/layouts/mailer.html.erb +13 -0
  36. data/examples/rails/app/views/layouts/mailer.text.erb +1 -0
  37. data/examples/rails/bin/rails +6 -0
  38. data/examples/rails/bin/rake +6 -0
  39. data/examples/rails/bin/setup +35 -0
  40. data/examples/rails/config.ru +7 -0
  41. data/examples/rails/config/application.rb +19 -0
  42. data/examples/rails/config/boot.rb +7 -0
  43. data/examples/rails/config/cable.yml +10 -0
  44. data/examples/rails/config/credentials.yml.enc +1 -0
  45. data/examples/rails/config/database.yml +25 -0
  46. data/examples/rails/config/environment.rb +7 -0
  47. data/examples/rails/config/environments/development.rb +65 -0
  48. data/examples/rails/config/environments/production.rb +114 -0
  49. data/examples/rails/config/environments/test.rb +50 -0
  50. data/examples/rails/config/initializers/application_controller_renderer.rb +9 -0
  51. data/examples/rails/config/initializers/assets.rb +14 -0
  52. data/examples/rails/config/initializers/backtrace_silencers.rb +8 -0
  53. data/examples/rails/config/initializers/cloudenvoy.rb +22 -0
  54. data/examples/rails/config/initializers/content_security_policy.rb +29 -0
  55. data/examples/rails/config/initializers/cookies_serializer.rb +7 -0
  56. data/examples/rails/config/initializers/filter_parameter_logging.rb +6 -0
  57. data/examples/rails/config/initializers/inflections.rb +17 -0
  58. data/examples/rails/config/initializers/mime_types.rb +5 -0
  59. data/examples/rails/config/initializers/wrap_parameters.rb +16 -0
  60. data/examples/rails/config/locales/en.yml +33 -0
  61. data/examples/rails/config/master.key +1 -0
  62. data/examples/rails/config/puma.rb +37 -0
  63. data/examples/rails/config/routes.rb +4 -0
  64. data/examples/rails/config/spring.rb +8 -0
  65. data/examples/rails/config/storage.yml +34 -0
  66. data/examples/rails/db/development.sqlite3 +0 -0
  67. data/examples/rails/db/test.sqlite3 +0 -0
  68. data/examples/rails/lib/assets/.keep +0 -0
  69. data/examples/rails/log/.keep +0 -0
  70. data/examples/rails/public/404.html +67 -0
  71. data/examples/rails/public/422.html +67 -0
  72. data/examples/rails/public/500.html +66 -0
  73. data/examples/rails/public/apple-touch-icon-precomposed.png +0 -0
  74. data/examples/rails/public/apple-touch-icon.png +0 -0
  75. data/examples/rails/public/favicon.ico +0 -0
  76. data/examples/rails/storage/.keep +0 -0
  77. data/gemfiles/rails_5.2.gemfile +7 -0
  78. data/gemfiles/rails_5.2.gemfile.lock +248 -0
  79. data/gemfiles/rails_6.0.gemfile +7 -0
  80. data/gemfiles/rails_6.0.gemfile.lock +264 -0
  81. data/lib/cloudenvoy.rb +96 -2
  82. data/lib/cloudenvoy/authentication_error.rb +6 -0
  83. data/lib/cloudenvoy/authenticator.rb +57 -0
  84. data/lib/cloudenvoy/backend/google_pub_sub.rb +110 -0
  85. data/lib/cloudenvoy/backend/memory_pub_sub.rb +88 -0
  86. data/lib/cloudenvoy/config.rb +165 -0
  87. data/lib/cloudenvoy/engine.rb +20 -0
  88. data/lib/cloudenvoy/invalid_subscriber_error.rb +6 -0
  89. data/lib/cloudenvoy/logger_wrapper.rb +167 -0
  90. data/lib/cloudenvoy/message.rb +96 -0
  91. data/lib/cloudenvoy/middleware/chain.rb +250 -0
  92. data/lib/cloudenvoy/pub_sub_client.rb +62 -0
  93. data/lib/cloudenvoy/publisher.rb +211 -0
  94. data/lib/cloudenvoy/publisher_logger.rb +32 -0
  95. data/lib/cloudenvoy/subscriber.rb +218 -0
  96. data/lib/cloudenvoy/subscriber_logger.rb +26 -0
  97. data/lib/cloudenvoy/subscription.rb +19 -0
  98. data/lib/cloudenvoy/testing.rb +106 -0
  99. data/lib/cloudenvoy/topic.rb +19 -0
  100. data/lib/cloudenvoy/version.rb +1 -1
  101. data/lib/tasks/cloudenvoy.rake +61 -0
  102. metadata +241 -6
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cloudenvoy
4
+ # Logger configuration for subscribers
5
+ class SubscriberLogger < LoggerWrapper
6
+ #
7
+ # The subscriber default context processor.
8
+ #
9
+ # @return [Proc] The context processor proc.
10
+ #
11
+ def self.default_context_processor
12
+ @default_context_processor ||= ->(loggable) { loggable.message.to_h.slice(:id, :metadata, :topic) }
13
+ end
14
+
15
+ #
16
+ # Format main log message.
17
+ #
18
+ # @param [String] msg The message to log.
19
+ #
20
+ # @return [String] The formatted log message
21
+ #
22
+ def formatted_message(msg)
23
+ "[Cloudenvoy][#{loggable.class}][#{loggable.message.id}] #{msg}"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cloudenvoy
4
+ # A wrapper class for pub/sub subscriptions. Used to wrap
5
+ # responses.
6
+ class Subscription
7
+ attr_accessor :name, :original
8
+
9
+ #
10
+ # Constructor
11
+ #
12
+ # @param [Hash] **kwargs Arguments
13
+ #
14
+ def initialize(**kwargs)
15
+ @name = kwargs&.dig(:name)
16
+ @original = kwargs&.dig(:original)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cloudenvoy/backend/memory_pub_sub'
4
+
5
+ module Cloudenvoy
6
+ # Enable/Disable test mode for Cloudenvoy
7
+ module Testing
8
+ module_function
9
+
10
+ #
11
+ # Set the test mode, either permanently or
12
+ # temporarily (via block).
13
+ #
14
+ # @param [Symbol] mode The test mode.
15
+ #
16
+ # @return [Symbol] The test mode.
17
+ #
18
+ def switch_test_mode(mode)
19
+ if block_given?
20
+ current_mode = @test_mode
21
+ begin
22
+ @test_mode = mode
23
+ yield
24
+ ensure
25
+ @test_mode = current_mode
26
+ end
27
+ else
28
+ @test_mode = mode
29
+ end
30
+ end
31
+
32
+ #
33
+ # Set cloudenvoy to real mode temporarily
34
+ #
35
+ # @param [Proc] &block The block to run in real mode
36
+ #
37
+ def enable!(&block)
38
+ switch_test_mode(:enabled, &block)
39
+ end
40
+
41
+ #
42
+ # Set cloudenvoy to fake mode temporarily
43
+ #
44
+ # @param [Proc] &block The block to run in fake mode
45
+ #
46
+ def fake!(&block)
47
+ switch_test_mode(:fake, &block)
48
+ end
49
+
50
+ #
51
+ # Return true if Cloudenvoy is enabled.
52
+ #
53
+ def enabled?
54
+ !@test_mode || @test_mode == :enabled
55
+ end
56
+
57
+ #
58
+ # Return true if Cloudenvoy is in fake mode.
59
+ #
60
+ # @return [Boolean] True if messages should be stored in memory.
61
+ #
62
+ def fake?
63
+ @test_mode == :fake
64
+ end
65
+
66
+ #
67
+ # Return true if tasks should be managed in memory.
68
+ #
69
+ # @return [Boolean] True if jobs are managed in memory.
70
+ #
71
+ def in_memory?
72
+ !enabled?
73
+ end
74
+
75
+ #
76
+ # Clear all messages across all topics.
77
+ #
78
+ # @param [String] name The topic to clear.
79
+ #
80
+ def clear_all
81
+ Cloudenvoy::Backend::MemoryPubSub.clear_all
82
+ end
83
+
84
+ #
85
+ # Clear all messages in a specific topic.
86
+ #
87
+ # @param [String] name The topic to clear.
88
+ #
89
+ # @return [Array] The cleared array.
90
+ #
91
+ def clear(topic)
92
+ Cloudenvoy::Backend::MemoryPubSub.clear(topic)
93
+ end
94
+
95
+ #
96
+ # Return the message queue for a specific topic.
97
+ #
98
+ # @param [String] name The topic to retrieve.
99
+ #
100
+ # @return [Array] The list of messages for the provided topic
101
+ #
102
+ def queue(topic)
103
+ Cloudenvoy::Backend::MemoryPubSub.queue(topic)
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Cloudenvoy
4
+ # A wrapper class for pub/sub topics. Used to wrap
5
+ # responses.
6
+ class Topic
7
+ attr_accessor :name, :original
8
+
9
+ #
10
+ # Constructor
11
+ #
12
+ # @param [Hash] **kwargs Arguments
13
+ #
14
+ def initialize(**kwargs)
15
+ @name = kwargs&.dig(:name)
16
+ @original = kwargs&.dig(:original)
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Cloudenvoy
4
- VERSION = '0.1.0.dev'
4
+ VERSION = '0.1.0'
5
5
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cloudenvoy'
4
+
5
+ ENV['GOOGLE_AUTH_SUPPRESS_CREDENTIALS_WARNINGS'] ||= 'true'
6
+
7
+ namespace :cloudenvoy do
8
+ desc 'Setup publishers and subscribers.'
9
+ task setup: :environment do
10
+ Rake::Task['cloudenvoy:setup_publishers'].invoke
11
+ Rake::Task['cloudenvoy:setup_subscribers'].invoke
12
+ end
13
+
14
+ desc 'Create required subscriptions for all subcribers.'
15
+ task setup_subscribers: :environment do
16
+ # Force registration of subscribers
17
+ Rails.application.eager_load!
18
+
19
+ # Setup subscriptions
20
+ list = Cloudenvoy.setup_subscribers.sort_by(&:name)
21
+
22
+ puts "\n"
23
+
24
+ # Notify user when no suscribers
25
+ if list.empty?
26
+ puts 'There are no subscribers defined in your application'
27
+ return
28
+ end
29
+
30
+ puts 'The following subscribers are configured:'
31
+ list.each do |e|
32
+ puts "- #{e.name}"
33
+ end
34
+
35
+ puts "\n"
36
+ end
37
+
38
+ desc 'Create required topics for all publishers.'
39
+ task setup_publishers: :environment do
40
+ # Force registration of publishers
41
+ Rails.application.eager_load!
42
+
43
+ # Setup topics
44
+ list = Cloudenvoy.setup_publishers.sort_by(&:name)
45
+
46
+ puts "\n"
47
+
48
+ # Notify user when no topics
49
+ if list.empty?
50
+ puts 'There are no publishers defined in your application'
51
+ return
52
+ end
53
+
54
+ puts 'The following topics are configured:'
55
+ list.each do |e|
56
+ puts "- #{e.name}"
57
+ end
58
+
59
+ puts "\n"
60
+ end
61
+ end
metadata CHANGED
@@ -1,15 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudenvoy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.dev
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Lachaume
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-04 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: google-cloud-pubsub
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jwt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: retriable
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: appraisal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
13
83
  - !ruby/object:Gem::Dependency
14
84
  name: rake
15
85
  requirement: !ruby/object:Gem::Requirement
@@ -66,27 +136,192 @@ dependencies:
66
136
  - - '='
67
137
  - !ruby/object:Gem::Version
68
138
  version: 1.37.0
69
- description: Cross-application messaging using GCP Pub/Sub (in development)
139
+ - !ruby/object:Gem::Dependency
140
+ name: timecop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: webmock
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rails
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rspec-rails
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: sqlite3
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ description: Cross-application messaging using GCP Pub/Sub (alpha)
70
210
  email:
71
211
  - arnaud.lachaume@keypup.io
72
212
  executables: []
73
213
  extensions: []
74
214
  extra_rdoc_files: []
75
215
  files:
216
+ - ".github/workflows/test.yml"
76
217
  - ".gitignore"
77
218
  - ".rspec"
78
219
  - ".rubocop.yml"
220
+ - Appraisals
221
+ - CHANGELOG.md
79
222
  - CODE_OF_CONDUCT.md
80
223
  - Gemfile
81
224
  - Gemfile.lock
82
225
  - LICENSE.txt
83
226
  - README.md
84
227
  - Rakefile
228
+ - app/controllers/cloudenvoy/application_controller.rb
229
+ - app/controllers/cloudenvoy/subscriber_controller.rb
85
230
  - bin/console
86
231
  - bin/setup
87
232
  - cloudenvoy.gemspec
233
+ - config/routes.rb
234
+ - examples/rails/.ruby-version
235
+ - examples/rails/Gemfile
236
+ - examples/rails/Gemfile.lock
237
+ - examples/rails/Procfile
238
+ - examples/rails/README.md
239
+ - examples/rails/Rakefile
240
+ - examples/rails/app/assets/config/manifest.js
241
+ - examples/rails/app/assets/images/.keep
242
+ - examples/rails/app/assets/stylesheets/application.css
243
+ - examples/rails/app/channels/application_cable/channel.rb
244
+ - examples/rails/app/channels/application_cable/connection.rb
245
+ - examples/rails/app/controllers/application_controller.rb
246
+ - examples/rails/app/controllers/concerns/.keep
247
+ - examples/rails/app/helpers/application_helper.rb
248
+ - examples/rails/app/javascript/packs/application.js
249
+ - examples/rails/app/jobs/application_job.rb
250
+ - examples/rails/app/mailers/application_mailer.rb
251
+ - examples/rails/app/models/application_record.rb
252
+ - examples/rails/app/models/concerns/.keep
253
+ - examples/rails/app/publishers/hello_publisher.rb
254
+ - examples/rails/app/subscribers/hello_subscriber.rb
255
+ - examples/rails/app/views/layouts/application.html.erb
256
+ - examples/rails/app/views/layouts/mailer.html.erb
257
+ - examples/rails/app/views/layouts/mailer.text.erb
258
+ - examples/rails/bin/rails
259
+ - examples/rails/bin/rake
260
+ - examples/rails/bin/setup
261
+ - examples/rails/config.ru
262
+ - examples/rails/config/application.rb
263
+ - examples/rails/config/boot.rb
264
+ - examples/rails/config/cable.yml
265
+ - examples/rails/config/credentials.yml.enc
266
+ - examples/rails/config/database.yml
267
+ - examples/rails/config/environment.rb
268
+ - examples/rails/config/environments/development.rb
269
+ - examples/rails/config/environments/production.rb
270
+ - examples/rails/config/environments/test.rb
271
+ - examples/rails/config/initializers/application_controller_renderer.rb
272
+ - examples/rails/config/initializers/assets.rb
273
+ - examples/rails/config/initializers/backtrace_silencers.rb
274
+ - examples/rails/config/initializers/cloudenvoy.rb
275
+ - examples/rails/config/initializers/content_security_policy.rb
276
+ - examples/rails/config/initializers/cookies_serializer.rb
277
+ - examples/rails/config/initializers/filter_parameter_logging.rb
278
+ - examples/rails/config/initializers/inflections.rb
279
+ - examples/rails/config/initializers/mime_types.rb
280
+ - examples/rails/config/initializers/wrap_parameters.rb
281
+ - examples/rails/config/locales/en.yml
282
+ - examples/rails/config/master.key
283
+ - examples/rails/config/puma.rb
284
+ - examples/rails/config/routes.rb
285
+ - examples/rails/config/spring.rb
286
+ - examples/rails/config/storage.yml
287
+ - examples/rails/db/development.sqlite3
288
+ - examples/rails/db/test.sqlite3
289
+ - examples/rails/lib/assets/.keep
290
+ - examples/rails/log/.keep
291
+ - examples/rails/public/404.html
292
+ - examples/rails/public/422.html
293
+ - examples/rails/public/500.html
294
+ - examples/rails/public/apple-touch-icon-precomposed.png
295
+ - examples/rails/public/apple-touch-icon.png
296
+ - examples/rails/public/favicon.ico
297
+ - examples/rails/storage/.keep
298
+ - examples/rails/tmp/.keep
299
+ - examples/rails/tmp/development_secret.txt
300
+ - gemfiles/rails_5.2.gemfile
301
+ - gemfiles/rails_5.2.gemfile.lock
302
+ - gemfiles/rails_6.0.gemfile
303
+ - gemfiles/rails_6.0.gemfile.lock
88
304
  - lib/cloudenvoy.rb
305
+ - lib/cloudenvoy/authentication_error.rb
306
+ - lib/cloudenvoy/authenticator.rb
307
+ - lib/cloudenvoy/backend/google_pub_sub.rb
308
+ - lib/cloudenvoy/backend/memory_pub_sub.rb
309
+ - lib/cloudenvoy/config.rb
310
+ - lib/cloudenvoy/engine.rb
311
+ - lib/cloudenvoy/invalid_subscriber_error.rb
312
+ - lib/cloudenvoy/logger_wrapper.rb
313
+ - lib/cloudenvoy/message.rb
314
+ - lib/cloudenvoy/middleware/chain.rb
315
+ - lib/cloudenvoy/pub_sub_client.rb
316
+ - lib/cloudenvoy/publisher.rb
317
+ - lib/cloudenvoy/publisher_logger.rb
318
+ - lib/cloudenvoy/subscriber.rb
319
+ - lib/cloudenvoy/subscriber_logger.rb
320
+ - lib/cloudenvoy/subscription.rb
321
+ - lib/cloudenvoy/testing.rb
322
+ - lib/cloudenvoy/topic.rb
89
323
  - lib/cloudenvoy/version.rb
324
+ - lib/tasks/cloudenvoy.rake
90
325
  homepage: https://github.com/keypup-io/cloudenvoy
91
326
  licenses:
92
327
  - MIT
@@ -105,12 +340,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
340
  version: 2.3.0
106
341
  required_rubygems_version: !ruby/object:Gem::Requirement
107
342
  requirements:
108
- - - ">"
343
+ - - ">="
109
344
  - !ruby/object:Gem::Version
110
- version: 1.3.1
345
+ version: '0'
111
346
  requirements: []
112
347
  rubygems_version: 3.0.0
113
348
  signing_key:
114
349
  specification_version: 4
115
- summary: Cross-application messaging using GCP Pub/Sub (in development)
350
+ summary: Cross-application messaging using GCP Pub/Sub (alpha)
116
351
  test_files: []