cloudenvoy 0.4.1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/CHANGELOG.md +7 -0
- data/README.md +4 -4
- data/app/controllers/cloudenvoy/subscriber_controller.rb +5 -2
- data/examples/rails/Gemfile.lock +125 -106
- data/examples/sinatra/Gemfile +15 -0
- data/examples/sinatra/Gemfile.lock +127 -0
- data/examples/sinatra/Procfile +1 -0
- data/examples/sinatra/README.md +41 -0
- data/examples/sinatra/app/publishers/hello_publisher.rb +34 -0
- data/examples/sinatra/app/subscribers/hello_subscriber.rb +16 -0
- data/examples/sinatra/app.rb +40 -0
- data/examples/sinatra/bin/console +8 -0
- data/examples/sinatra/config/initializers/cloudenvoy.rb +30 -0
- data/gemfiles/rails_5.2.gemfile.lock +86 -73
- data/gemfiles/rails_6.0.gemfile.lock +87 -74
- data/gemfiles/semantic_logger_3.4.gemfile.lock +144 -130
- data/gemfiles/semantic_logger_4.6.gemfile.lock +144 -130
- data/gemfiles/semantic_logger_4.7.0.gemfile.lock +144 -130
- data/gemfiles/semantic_logger_4.7.2.gemfile.lock +144 -130
- data/lib/cloudenvoy/message.rb +2 -2
- data/lib/cloudenvoy/subscriber.rb +1 -1
- data/lib/cloudenvoy/version.rb +1 -1
- data/lib/generators/cloudenvoy/publisher_generator.rb +46 -0
- data/lib/generators/cloudenvoy/subscriber_generator.rb +46 -0
- data/lib/generators/cloudenvoy/templates/publisher.rb.erb +11 -0
- data/lib/generators/cloudenvoy/templates/publisher_spec.rb.erb +6 -0
- data/lib/generators/cloudenvoy/templates/subscriber.rb.erb +11 -0
- data/lib/generators/cloudenvoy/templates/subscriber_spec.rb.erb +6 -0
- metadata +20 -7
- data/Gemfile.lock +0 -267
- data/app/controllers/cloudenvoy/application_controller.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41639ae4ee8dd10d46e88233f3a4ceb028968e01f5b173fd798cfffe19ae0b48
|
4
|
+
data.tar.gz: 311ca0ebb0dd52abc523ffe351b5916bed9794ebb2ce2246bc8d517220f3b539
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a7a8cf4f967e6a63e03878ab8656e20598cdfba01de979b4daeb82b500bbc5a92eb3a424fd6c7893f60e69e14028bd25d78d6780c2485f1362d1551de30ef6d9
|
7
|
+
data.tar.gz: f25628e0693c6fa7d1cfaedcff7a0fe3085af7a30bb8186dfa9e7af919c08300bb755ae6e75ffaaa545623a63e8a76f8b0fda8d9968eef05ced0a3fa23f96cb1
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.4.2](https://github.com/keypup-io/cloudenvoy/tree/v0.4.2) (2021-10-25)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/keypup-io/cloudenvoy/compare/v0.4.1...v0.4.2)
|
6
|
+
|
7
|
+
**Bug fix:**
|
8
|
+
- Message processing: fix subscription parsing for topic names with dots.
|
9
|
+
|
3
10
|
## [v0.4.1](https://github.com/keypup-io/cloudenvoy/tree/v0.4.1) (2020-10-06)
|
4
11
|
|
5
12
|
[Full Changelog](https://github.com/keypup-io/cloudenvoy/compare/v0.4.0...v0.4.1)
|
data/README.md
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
 [](https://badge.fury.io/rb/cloudenvoy)
|
2
2
|
|
3
|
-
**Note**: this gem is currently in alpha stage and has not been tested in production yet.
|
4
|
-
|
5
3
|
# Cloudenvoy
|
6
4
|
|
7
5
|
Cross-application messaging framework for GCP Pub/Sub.
|
@@ -12,6 +10,8 @@ Pub/Sub solves that event distribution problem by allowing developers to define
|
|
12
10
|
|
13
11
|
Cloudenvoy works with the local pub/sub emulator as well, meaning that you can work offline without access to GCP.
|
14
12
|
|
13
|
+
**Maturity**: The gem is relatively young but is production-friendly. We at Keypup have already processed hundreds of thousands of pub/sub messages through Cloudenvoy. If you spot any bug, feel free to report it! we're aiming at a `v1.0.0` around Q1 2022.
|
14
|
+
|
15
15
|
## Summary
|
16
16
|
|
17
17
|
1. [Installation](#installation)
|
@@ -80,7 +80,7 @@ Cloudenvoy.configure do |config|
|
|
80
80
|
end
|
81
81
|
```
|
82
82
|
|
83
|
-
Define a publisher:
|
83
|
+
Define a publisher or use generator: `rails generate cloudenvoy:publisher Dummy`
|
84
84
|
```ruby
|
85
85
|
# app/publishers/dummy_publisher.rb
|
86
86
|
|
@@ -100,7 +100,7 @@ class DummyPublisher
|
|
100
100
|
end
|
101
101
|
```
|
102
102
|
|
103
|
-
Define a subscriber:
|
103
|
+
Define a subscriber or use generator: `rails generate cloudenvoy:subscriber Dummy`
|
104
104
|
```ruby
|
105
105
|
# app/subscribers/dummy_subscriber.rb
|
106
106
|
|
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
module Cloudenvoy
|
4
4
|
# Handle execution of Cloudenvoy subscribers
|
5
|
-
class SubscriberController <
|
5
|
+
class SubscriberController < ActionController::Base
|
6
|
+
# No need for CSRF verification on API endpoints
|
7
|
+
skip_before_action :verify_authenticity_token
|
8
|
+
|
6
9
|
# Authenticate all requests.
|
7
10
|
before_action :authenticate!
|
8
11
|
|
@@ -40,7 +43,7 @@ module Cloudenvoy
|
|
40
43
|
# Get raw body
|
41
44
|
content = request.body.read
|
42
45
|
|
43
|
-
# Return content parsed as JSON
|
46
|
+
# Return content parsed as JSON
|
44
47
|
JSON.parse(content).except('token')
|
45
48
|
end
|
46
49
|
end
|
data/examples/rails/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
cloudenvoy (0.
|
4
|
+
cloudenvoy (0.4.1)
|
5
5
|
activesupport
|
6
6
|
google-cloud-pubsub (~> 2.0)
|
7
7
|
jwt
|
@@ -10,187 +10,206 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
actioncable (6.0.
|
14
|
-
actionpack (= 6.0.
|
13
|
+
actioncable (6.0.4.1)
|
14
|
+
actionpack (= 6.0.4.1)
|
15
15
|
nio4r (~> 2.0)
|
16
16
|
websocket-driver (>= 0.6.1)
|
17
|
-
actionmailbox (6.0.
|
18
|
-
actionpack (= 6.0.
|
19
|
-
activejob (= 6.0.
|
20
|
-
activerecord (= 6.0.
|
21
|
-
activestorage (= 6.0.
|
22
|
-
activesupport (= 6.0.
|
17
|
+
actionmailbox (6.0.4.1)
|
18
|
+
actionpack (= 6.0.4.1)
|
19
|
+
activejob (= 6.0.4.1)
|
20
|
+
activerecord (= 6.0.4.1)
|
21
|
+
activestorage (= 6.0.4.1)
|
22
|
+
activesupport (= 6.0.4.1)
|
23
23
|
mail (>= 2.7.1)
|
24
|
-
actionmailer (6.0.
|
25
|
-
actionpack (= 6.0.
|
26
|
-
actionview (= 6.0.
|
27
|
-
activejob (= 6.0.
|
24
|
+
actionmailer (6.0.4.1)
|
25
|
+
actionpack (= 6.0.4.1)
|
26
|
+
actionview (= 6.0.4.1)
|
27
|
+
activejob (= 6.0.4.1)
|
28
28
|
mail (~> 2.5, >= 2.5.4)
|
29
29
|
rails-dom-testing (~> 2.0)
|
30
|
-
actionpack (6.0.
|
31
|
-
actionview (= 6.0.
|
32
|
-
activesupport (= 6.0.
|
30
|
+
actionpack (6.0.4.1)
|
31
|
+
actionview (= 6.0.4.1)
|
32
|
+
activesupport (= 6.0.4.1)
|
33
33
|
rack (~> 2.0, >= 2.0.8)
|
34
34
|
rack-test (>= 0.6.3)
|
35
35
|
rails-dom-testing (~> 2.0)
|
36
36
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
37
|
-
actiontext (6.0.
|
38
|
-
actionpack (= 6.0.
|
39
|
-
activerecord (= 6.0.
|
40
|
-
activestorage (= 6.0.
|
41
|
-
activesupport (= 6.0.
|
37
|
+
actiontext (6.0.4.1)
|
38
|
+
actionpack (= 6.0.4.1)
|
39
|
+
activerecord (= 6.0.4.1)
|
40
|
+
activestorage (= 6.0.4.1)
|
41
|
+
activesupport (= 6.0.4.1)
|
42
42
|
nokogiri (>= 1.8.5)
|
43
|
-
actionview (6.0.
|
44
|
-
activesupport (= 6.0.
|
43
|
+
actionview (6.0.4.1)
|
44
|
+
activesupport (= 6.0.4.1)
|
45
45
|
builder (~> 3.1)
|
46
46
|
erubi (~> 1.4)
|
47
47
|
rails-dom-testing (~> 2.0)
|
48
48
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
49
|
-
activejob (6.0.
|
50
|
-
activesupport (= 6.0.
|
49
|
+
activejob (6.0.4.1)
|
50
|
+
activesupport (= 6.0.4.1)
|
51
51
|
globalid (>= 0.3.6)
|
52
|
-
activemodel (6.0.
|
53
|
-
activesupport (= 6.0.
|
54
|
-
activerecord (6.0.
|
55
|
-
activemodel (= 6.0.
|
56
|
-
activesupport (= 6.0.
|
57
|
-
activestorage (6.0.
|
58
|
-
actionpack (= 6.0.
|
59
|
-
activejob (= 6.0.
|
60
|
-
activerecord (= 6.0.
|
61
|
-
marcel (~> 0.
|
62
|
-
activesupport (6.0.
|
52
|
+
activemodel (6.0.4.1)
|
53
|
+
activesupport (= 6.0.4.1)
|
54
|
+
activerecord (6.0.4.1)
|
55
|
+
activemodel (= 6.0.4.1)
|
56
|
+
activesupport (= 6.0.4.1)
|
57
|
+
activestorage (6.0.4.1)
|
58
|
+
actionpack (= 6.0.4.1)
|
59
|
+
activejob (= 6.0.4.1)
|
60
|
+
activerecord (= 6.0.4.1)
|
61
|
+
marcel (~> 1.0.0)
|
62
|
+
activesupport (6.0.4.1)
|
63
63
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
64
64
|
i18n (>= 0.7, < 2)
|
65
65
|
minitest (~> 5.1)
|
66
66
|
tzinfo (~> 1.1)
|
67
67
|
zeitwerk (~> 2.2, >= 2.2.2)
|
68
|
-
addressable (2.
|
68
|
+
addressable (2.8.0)
|
69
69
|
public_suffix (>= 2.0.2, < 5.0)
|
70
70
|
builder (3.2.4)
|
71
|
-
concurrent-ruby (1.1.
|
71
|
+
concurrent-ruby (1.1.9)
|
72
72
|
crass (1.0.6)
|
73
|
-
erubi (1.
|
74
|
-
faraday (1.0
|
73
|
+
erubi (1.10.0)
|
74
|
+
faraday (1.8.0)
|
75
|
+
faraday-em_http (~> 1.0)
|
76
|
+
faraday-em_synchrony (~> 1.0)
|
77
|
+
faraday-excon (~> 1.1)
|
78
|
+
faraday-httpclient (~> 1.0.1)
|
79
|
+
faraday-net_http (~> 1.0)
|
80
|
+
faraday-net_http_persistent (~> 1.1)
|
81
|
+
faraday-patron (~> 1.0)
|
82
|
+
faraday-rack (~> 1.0)
|
75
83
|
multipart-post (>= 1.2, < 3)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
84
|
+
ruby2_keywords (>= 0.0.4)
|
85
|
+
faraday-em_http (1.0.0)
|
86
|
+
faraday-em_synchrony (1.0.0)
|
87
|
+
faraday-excon (1.1.0)
|
88
|
+
faraday-httpclient (1.0.1)
|
89
|
+
faraday-net_http (1.0.1)
|
90
|
+
faraday-net_http_persistent (1.2.0)
|
91
|
+
faraday-patron (1.0.0)
|
92
|
+
faraday-rack (1.0.0)
|
93
|
+
gapic-common (0.7.0)
|
94
|
+
faraday (~> 1.3)
|
95
|
+
google-protobuf (~> 3.14)
|
96
|
+
googleapis-common-protos (>= 1.3.11, < 2.a)
|
97
|
+
googleapis-common-protos-types (>= 1.0.6, < 2.a)
|
98
|
+
googleauth (>= 0.17.0, < 2.a)
|
99
|
+
grpc (~> 1.36)
|
100
|
+
globalid (0.5.2)
|
101
|
+
activesupport (>= 5.0)
|
102
|
+
google-cloud-core (1.6.0)
|
85
103
|
google-cloud-env (~> 1.0)
|
86
104
|
google-cloud-errors (~> 1.0)
|
87
|
-
google-cloud-env (1.
|
105
|
+
google-cloud-env (1.5.0)
|
88
106
|
faraday (>= 0.17.3, < 2.0)
|
89
|
-
google-cloud-errors (1.0
|
90
|
-
google-cloud-pubsub (2.
|
107
|
+
google-cloud-errors (1.2.0)
|
108
|
+
google-cloud-pubsub (2.8.1)
|
91
109
|
concurrent-ruby (~> 1.1)
|
92
110
|
google-cloud-core (~> 1.5)
|
93
111
|
google-cloud-pubsub-v1 (~> 0.0)
|
94
|
-
google-cloud-pubsub-v1 (0.
|
95
|
-
gapic-common (
|
112
|
+
google-cloud-pubsub-v1 (0.6.0)
|
113
|
+
gapic-common (>= 0.7, < 2.a)
|
96
114
|
google-cloud-errors (~> 1.0)
|
97
|
-
grpc-google-iam-v1 (>= 0.6.10, < 2.
|
98
|
-
google-protobuf (3.
|
99
|
-
googleapis-common-protos (1.3.
|
100
|
-
google-protobuf (~> 3.
|
101
|
-
googleapis-common-protos-types (
|
115
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.a)
|
116
|
+
google-protobuf (3.18.0)
|
117
|
+
googleapis-common-protos (1.3.12)
|
118
|
+
google-protobuf (~> 3.14)
|
119
|
+
googleapis-common-protos-types (~> 1.2)
|
102
120
|
grpc (~> 1.27)
|
103
|
-
googleapis-common-protos-types (1.0
|
104
|
-
google-protobuf (~> 3.
|
105
|
-
googleauth (0.
|
121
|
+
googleapis-common-protos-types (1.2.0)
|
122
|
+
google-protobuf (~> 3.14)
|
123
|
+
googleauth (1.0.0)
|
106
124
|
faraday (>= 0.17.3, < 2.0)
|
107
125
|
jwt (>= 1.4, < 3.0)
|
108
126
|
memoist (~> 0.16)
|
109
127
|
multi_json (~> 1.11)
|
110
128
|
os (>= 0.9, < 2.0)
|
111
|
-
signet (
|
112
|
-
grpc (1.
|
113
|
-
google-protobuf (~> 3.
|
129
|
+
signet (>= 0.16, < 2.a)
|
130
|
+
grpc (1.40.0)
|
131
|
+
google-protobuf (~> 3.15)
|
114
132
|
googleapis-common-protos-types (~> 1.0)
|
115
|
-
grpc-google-iam-v1 (0.
|
116
|
-
google-protobuf (~> 3.
|
117
|
-
googleapis-common-protos (>= 1.3.
|
133
|
+
grpc-google-iam-v1 (1.0.0)
|
134
|
+
google-protobuf (~> 3.14)
|
135
|
+
googleapis-common-protos (>= 1.3.12, < 2.0)
|
118
136
|
grpc (~> 1.27)
|
119
|
-
i18n (1.8.
|
137
|
+
i18n (1.8.10)
|
120
138
|
concurrent-ruby (~> 1.0)
|
121
|
-
jwt (2.2.
|
122
|
-
loofah (2.
|
139
|
+
jwt (2.2.3)
|
140
|
+
loofah (2.12.0)
|
123
141
|
crass (~> 1.0.2)
|
124
142
|
nokogiri (>= 1.5.9)
|
125
143
|
mail (2.7.1)
|
126
144
|
mini_mime (>= 0.1.1)
|
127
|
-
marcel (0.
|
128
|
-
mimemagic (~> 0.3.2)
|
145
|
+
marcel (1.0.2)
|
129
146
|
memoist (0.16.2)
|
130
147
|
method_source (1.0.0)
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
minitest (5.14.2)
|
148
|
+
mini_mime (1.1.1)
|
149
|
+
mini_portile2 (2.6.1)
|
150
|
+
minitest (5.14.4)
|
135
151
|
multi_json (1.15.0)
|
136
152
|
multipart-post (2.1.1)
|
137
|
-
nio4r (2.5.
|
138
|
-
nokogiri (1.
|
139
|
-
mini_portile2 (~> 2.
|
153
|
+
nio4r (2.5.8)
|
154
|
+
nokogiri (1.12.5)
|
155
|
+
mini_portile2 (~> 2.6.1)
|
156
|
+
racc (~> 1.4)
|
140
157
|
os (1.1.1)
|
141
158
|
public_suffix (4.0.6)
|
159
|
+
racc (1.5.2)
|
142
160
|
rack (2.2.3)
|
143
161
|
rack-test (1.1.0)
|
144
162
|
rack (>= 1.0, < 3)
|
145
|
-
rails (6.0.
|
146
|
-
actioncable (= 6.0.
|
147
|
-
actionmailbox (= 6.0.
|
148
|
-
actionmailer (= 6.0.
|
149
|
-
actionpack (= 6.0.
|
150
|
-
actiontext (= 6.0.
|
151
|
-
actionview (= 6.0.
|
152
|
-
activejob (= 6.0.
|
153
|
-
activemodel (= 6.0.
|
154
|
-
activerecord (= 6.0.
|
155
|
-
activestorage (= 6.0.
|
156
|
-
activesupport (= 6.0.
|
163
|
+
rails (6.0.4.1)
|
164
|
+
actioncable (= 6.0.4.1)
|
165
|
+
actionmailbox (= 6.0.4.1)
|
166
|
+
actionmailer (= 6.0.4.1)
|
167
|
+
actionpack (= 6.0.4.1)
|
168
|
+
actiontext (= 6.0.4.1)
|
169
|
+
actionview (= 6.0.4.1)
|
170
|
+
activejob (= 6.0.4.1)
|
171
|
+
activemodel (= 6.0.4.1)
|
172
|
+
activerecord (= 6.0.4.1)
|
173
|
+
activestorage (= 6.0.4.1)
|
174
|
+
activesupport (= 6.0.4.1)
|
157
175
|
bundler (>= 1.3.0)
|
158
|
-
railties (= 6.0.
|
176
|
+
railties (= 6.0.4.1)
|
159
177
|
sprockets-rails (>= 2.0.0)
|
160
178
|
rails-dom-testing (2.0.3)
|
161
179
|
activesupport (>= 4.2.0)
|
162
180
|
nokogiri (>= 1.6)
|
163
|
-
rails-html-sanitizer (1.
|
181
|
+
rails-html-sanitizer (1.4.2)
|
164
182
|
loofah (~> 2.3)
|
165
|
-
railties (6.0.
|
166
|
-
actionpack (= 6.0.
|
167
|
-
activesupport (= 6.0.
|
183
|
+
railties (6.0.4.1)
|
184
|
+
actionpack (= 6.0.4.1)
|
185
|
+
activesupport (= 6.0.4.1)
|
168
186
|
method_source
|
169
187
|
rake (>= 0.8.7)
|
170
188
|
thor (>= 0.20.3, < 2.0)
|
171
|
-
rake (13.0.
|
189
|
+
rake (13.0.6)
|
172
190
|
retriable (3.1.2)
|
173
|
-
|
174
|
-
|
191
|
+
ruby2_keywords (0.0.5)
|
192
|
+
signet (0.16.0)
|
193
|
+
addressable (~> 2.8)
|
175
194
|
faraday (>= 0.17.3, < 2.0)
|
176
195
|
jwt (>= 1.5, < 3.0)
|
177
196
|
multi_json (~> 1.10)
|
178
197
|
sprockets (4.0.2)
|
179
198
|
concurrent-ruby (~> 1.0)
|
180
199
|
rack (> 1, < 3)
|
181
|
-
sprockets-rails (3.2.
|
200
|
+
sprockets-rails (3.2.2)
|
182
201
|
actionpack (>= 4.0)
|
183
202
|
activesupport (>= 4.0)
|
184
203
|
sprockets (>= 3.0.0)
|
185
204
|
sqlite3 (1.4.2)
|
186
|
-
thor (1.0
|
205
|
+
thor (1.1.0)
|
187
206
|
thread_safe (0.3.6)
|
188
|
-
tzinfo (1.2.
|
207
|
+
tzinfo (1.2.9)
|
189
208
|
thread_safe (~> 0.1)
|
190
|
-
websocket-driver (0.7.
|
209
|
+
websocket-driver (0.7.5)
|
191
210
|
websocket-extensions (>= 0.1.0)
|
192
211
|
websocket-extensions (0.1.5)
|
193
|
-
zeitwerk (2.4.
|
212
|
+
zeitwerk (2.4.2)
|
194
213
|
|
195
214
|
PLATFORMS
|
196
215
|
ruby
|
@@ -204,4 +223,4 @@ RUBY VERSION
|
|
204
223
|
ruby 2.5.5p157
|
205
224
|
|
206
225
|
BUNDLED WITH
|
207
|
-
2.
|
226
|
+
2.2.26
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
5
|
+
|
6
|
+
ruby '2.5.5'
|
7
|
+
|
8
|
+
# Web framework
|
9
|
+
gem 'sinatra'
|
10
|
+
|
11
|
+
# Support rake tasks
|
12
|
+
gem 'rake'
|
13
|
+
|
14
|
+
# Pub/sub via cloudenvoy
|
15
|
+
gem 'cloudenvoy', path: '../../'
|
@@ -0,0 +1,127 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../..
|
3
|
+
specs:
|
4
|
+
cloudenvoy (0.4.1)
|
5
|
+
activesupport
|
6
|
+
google-cloud-pubsub (~> 2.0)
|
7
|
+
jwt
|
8
|
+
retriable
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: https://rubygems.org/
|
12
|
+
specs:
|
13
|
+
activesupport (6.1.4.1)
|
14
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
15
|
+
i18n (>= 1.6, < 2)
|
16
|
+
minitest (>= 5.1)
|
17
|
+
tzinfo (~> 2.0)
|
18
|
+
zeitwerk (~> 2.3)
|
19
|
+
addressable (2.8.0)
|
20
|
+
public_suffix (>= 2.0.2, < 5.0)
|
21
|
+
concurrent-ruby (1.1.9)
|
22
|
+
faraday (1.8.0)
|
23
|
+
faraday-em_http (~> 1.0)
|
24
|
+
faraday-em_synchrony (~> 1.0)
|
25
|
+
faraday-excon (~> 1.1)
|
26
|
+
faraday-httpclient (~> 1.0.1)
|
27
|
+
faraday-net_http (~> 1.0)
|
28
|
+
faraday-net_http_persistent (~> 1.1)
|
29
|
+
faraday-patron (~> 1.0)
|
30
|
+
faraday-rack (~> 1.0)
|
31
|
+
multipart-post (>= 1.2, < 3)
|
32
|
+
ruby2_keywords (>= 0.0.4)
|
33
|
+
faraday-em_http (1.0.0)
|
34
|
+
faraday-em_synchrony (1.0.0)
|
35
|
+
faraday-excon (1.1.0)
|
36
|
+
faraday-httpclient (1.0.1)
|
37
|
+
faraday-net_http (1.0.1)
|
38
|
+
faraday-net_http_persistent (1.2.0)
|
39
|
+
faraday-patron (1.0.0)
|
40
|
+
faraday-rack (1.0.0)
|
41
|
+
gapic-common (0.7.0)
|
42
|
+
faraday (~> 1.3)
|
43
|
+
google-protobuf (~> 3.14)
|
44
|
+
googleapis-common-protos (>= 1.3.11, < 2.a)
|
45
|
+
googleapis-common-protos-types (>= 1.0.6, < 2.a)
|
46
|
+
googleauth (>= 0.17.0, < 2.a)
|
47
|
+
grpc (~> 1.36)
|
48
|
+
google-cloud-core (1.6.0)
|
49
|
+
google-cloud-env (~> 1.0)
|
50
|
+
google-cloud-errors (~> 1.0)
|
51
|
+
google-cloud-env (1.5.0)
|
52
|
+
faraday (>= 0.17.3, < 2.0)
|
53
|
+
google-cloud-errors (1.2.0)
|
54
|
+
google-cloud-pubsub (2.8.1)
|
55
|
+
concurrent-ruby (~> 1.1)
|
56
|
+
google-cloud-core (~> 1.5)
|
57
|
+
google-cloud-pubsub-v1 (~> 0.0)
|
58
|
+
google-cloud-pubsub-v1 (0.6.0)
|
59
|
+
gapic-common (>= 0.7, < 2.a)
|
60
|
+
google-cloud-errors (~> 1.0)
|
61
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.a)
|
62
|
+
google-protobuf (3.18.0-universal-darwin)
|
63
|
+
googleapis-common-protos (1.3.12)
|
64
|
+
google-protobuf (~> 3.14)
|
65
|
+
googleapis-common-protos-types (~> 1.2)
|
66
|
+
grpc (~> 1.27)
|
67
|
+
googleapis-common-protos-types (1.2.0)
|
68
|
+
google-protobuf (~> 3.14)
|
69
|
+
googleauth (1.0.0)
|
70
|
+
faraday (>= 0.17.3, < 2.0)
|
71
|
+
jwt (>= 1.4, < 3.0)
|
72
|
+
memoist (~> 0.16)
|
73
|
+
multi_json (~> 1.11)
|
74
|
+
os (>= 0.9, < 2.0)
|
75
|
+
signet (>= 0.16, < 2.a)
|
76
|
+
grpc (1.40.0-universal-darwin)
|
77
|
+
google-protobuf (~> 3.15)
|
78
|
+
googleapis-common-protos-types (~> 1.0)
|
79
|
+
grpc-google-iam-v1 (1.0.0)
|
80
|
+
google-protobuf (~> 3.14)
|
81
|
+
googleapis-common-protos (>= 1.3.12, < 2.0)
|
82
|
+
grpc (~> 1.27)
|
83
|
+
i18n (1.8.10)
|
84
|
+
concurrent-ruby (~> 1.0)
|
85
|
+
jwt (2.2.3)
|
86
|
+
memoist (0.16.2)
|
87
|
+
minitest (5.14.4)
|
88
|
+
multi_json (1.15.0)
|
89
|
+
multipart-post (2.1.1)
|
90
|
+
mustermann (1.1.1)
|
91
|
+
ruby2_keywords (~> 0.0.1)
|
92
|
+
os (1.1.1)
|
93
|
+
public_suffix (4.0.6)
|
94
|
+
rack (2.2.3)
|
95
|
+
rack-protection (2.1.0)
|
96
|
+
rack
|
97
|
+
rake (13.0.6)
|
98
|
+
retriable (3.1.2)
|
99
|
+
ruby2_keywords (0.0.5)
|
100
|
+
signet (0.16.0)
|
101
|
+
addressable (~> 2.8)
|
102
|
+
faraday (>= 0.17.3, < 2.0)
|
103
|
+
jwt (>= 1.5, < 3.0)
|
104
|
+
multi_json (~> 1.10)
|
105
|
+
sinatra (2.1.0)
|
106
|
+
mustermann (~> 1.0)
|
107
|
+
rack (~> 2.2)
|
108
|
+
rack-protection (= 2.1.0)
|
109
|
+
tilt (~> 2.0)
|
110
|
+
tilt (2.0.10)
|
111
|
+
tzinfo (2.0.4)
|
112
|
+
concurrent-ruby (~> 1.0)
|
113
|
+
zeitwerk (2.4.2)
|
114
|
+
|
115
|
+
PLATFORMS
|
116
|
+
x86_64-darwin-17
|
117
|
+
|
118
|
+
DEPENDENCIES
|
119
|
+
cloudenvoy!
|
120
|
+
rake
|
121
|
+
sinatra
|
122
|
+
|
123
|
+
RUBY VERSION
|
124
|
+
ruby 2.5.5p157
|
125
|
+
|
126
|
+
BUNDLED WITH
|
127
|
+
2.2.26
|
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec ruby app.rb -p 3000
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# Example usage with Rails
|
2
|
+
|
3
|
+
## Run using the local gcloud Pub/Sub emulator
|
4
|
+
|
5
|
+
1. Install dependencies: `bundle install`
|
6
|
+
2. Intall the Pub/Sub emulator: `gcloud components install pubsub-emulator && gcloud components update`
|
7
|
+
3. Run the Pub/Sub emulator: `gcloud beta emulators pubsub start`
|
8
|
+
4. Launch the server: `foreman start`
|
9
|
+
5. Open a Rails console: `./bin/console`
|
10
|
+
6. Create the topics and subscriptions (one time setup - no need to redo it until you restart the pubsub emulator)
|
11
|
+
```ruby
|
12
|
+
Cloudenvoy.setup_publishers
|
13
|
+
Cloudenvoy.setup_subscribers
|
14
|
+
```
|
15
|
+
7. Publish messages:
|
16
|
+
```ruby
|
17
|
+
HelloPublisher.publish('Some message')
|
18
|
+
```
|
19
|
+
8. Tail the logs to see how message get processed by `HelloSubscriber`
|
20
|
+
|
21
|
+
## Run using GCP Pub/Sub
|
22
|
+
|
23
|
+
1. Ensure that your [Google Cloud SDK](https://cloud.google.com/sdk/docs/quickstarts) is setup.
|
24
|
+
2. Install dependencies: `bundle install`
|
25
|
+
3. Start an [ngrok](https://ngrok.com) tunnel: `ngrok http 3000`
|
26
|
+
4. Edit the [initializer](./config/initializers/cloudenvoy.rb)
|
27
|
+
* Add the configuration of your GCP Pub/Sub
|
28
|
+
* Set `config.processor_host` to the ngrok http or https url
|
29
|
+
* Set `config.mode` to `:production`
|
30
|
+
5. Launch the server: `foreman start`
|
31
|
+
6. Open a Rails console: `./bin/console`
|
32
|
+
7. Create the topics and subscriptions (one time setup)
|
33
|
+
```ruby
|
34
|
+
Cloudenvoy.setup_publishers
|
35
|
+
Cloudenvoy.setup_subscribers
|
36
|
+
```
|
37
|
+
8. Publish messages
|
38
|
+
```ruby
|
39
|
+
HelloPublisher.publish('Some message')
|
40
|
+
```
|
41
|
+
9. Tail the logs to see how message get processed by `HelloSubscriber`
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class HelloPublisher
|
4
|
+
include Cloudenvoy::Publisher
|
5
|
+
|
6
|
+
cloudenvoy_options topic: 'hello-msgs'
|
7
|
+
|
8
|
+
#
|
9
|
+
# Set message metadata (attributes)
|
10
|
+
#
|
11
|
+
# @param [String] msg The message to publish
|
12
|
+
#
|
13
|
+
# @return [Hash] The message metadata
|
14
|
+
#
|
15
|
+
def metadata(msg)
|
16
|
+
{
|
17
|
+
kind: msg.start_with?('Hello') ? 'hello' : 'regular'
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# Format the payload.
|
23
|
+
#
|
24
|
+
# @param [String] msg The message to publish
|
25
|
+
#
|
26
|
+
# @return [Hash] The formatted message
|
27
|
+
#
|
28
|
+
def payload(msg)
|
29
|
+
{
|
30
|
+
type: 'message',
|
31
|
+
content: msg
|
32
|
+
}
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class HelloSubscriber
|
4
|
+
include Cloudenvoy::Subscriber
|
5
|
+
|
6
|
+
cloudenvoy_options topic: 'hello-msgs'
|
7
|
+
|
8
|
+
#
|
9
|
+
# Process a pub/sub message
|
10
|
+
#
|
11
|
+
# @param [Cloudenvoy::Message] message The message to process.
|
12
|
+
#
|
13
|
+
def process(message)
|
14
|
+
logger.info("Received message #{message.payload.dig('content')}")
|
15
|
+
end
|
16
|
+
end
|