cloudenvoy 0.4.1 → 0.5.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.
- checksums.yaml +4 -4
- data/.github/workflows/lint_rubocop.yml +20 -0
- data/.github/workflows/{test.yml → test_ruby_2.5_2.6.yml} +8 -13
- data/.github/workflows/test_ruby_2.7.yml +36 -0
- data/.github/workflows/test_ruby_3.x.yml +35 -0
- data/.gitignore +3 -0
- data/.rubocop.yml +5 -0
- data/Appraisals +24 -4
- data/CHANGELOG.md +16 -0
- data/README.md +7 -4
- data/app/controllers/cloudenvoy/subscriber_controller.rb +5 -2
- data/cloudenvoy.gemspec +0 -4
- data/examples/rails/.ruby-version +1 -1
- data/examples/rails/Gemfile +4 -1
- data/examples/rails/Gemfile.lock +139 -113
- data/examples/rails/README.md +1 -1
- data/examples/sinatra/Gemfile +18 -0
- data/examples/sinatra/Gemfile.lock +139 -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/.bundle/config +2 -0
- data/gemfiles/rails_5.2.gemfile +1 -0
- data/gemfiles/rails_5.2.gemfile.lock +117 -92
- data/gemfiles/rails_6.0.gemfile +1 -0
- data/gemfiles/rails_6.0.gemfile.lock +118 -93
- data/gemfiles/rails_6.1.gemfile +8 -0
- data/gemfiles/rails_7.0.gemfile +8 -0
- data/gemfiles/semantic_logger_3.4.gemfile +1 -0
- data/gemfiles/semantic_logger_3.4.gemfile.lock +95 -189
- data/gemfiles/semantic_logger_4.6.gemfile +1 -0
- data/gemfiles/semantic_logger_4.6.gemfile.lock +95 -189
- data/gemfiles/semantic_logger_4.7.0.gemfile +1 -0
- data/gemfiles/semantic_logger_4.7.0.gemfile.lock +95 -189
- data/gemfiles/semantic_logger_4.7.2.gemfile +1 -0
- data/gemfiles/semantic_logger_4.7.2.gemfile.lock +95 -189
- data/lib/cloudenvoy/backend/google_pub_sub.rb +2 -2
- data/lib/cloudenvoy/message.rb +2 -2
- data/lib/cloudenvoy/subscriber.rb +1 -1
- data/lib/cloudenvoy/version.rb +1 -1
- data/lib/cloudenvoy.rb +1 -0
- 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 +28 -51
- data/Gemfile.lock +0 -267
- data/app/controllers/cloudenvoy/application_controller.rb +0 -8
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.5.0)
|
|
5
5
|
activesupport
|
|
6
6
|
google-cloud-pubsub (~> 2.0)
|
|
7
7
|
jwt
|
|
@@ -10,198 +10,224 @@ 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.7)
|
|
14
|
+
actionpack (= 6.0.4.7)
|
|
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.7)
|
|
18
|
+
actionpack (= 6.0.4.7)
|
|
19
|
+
activejob (= 6.0.4.7)
|
|
20
|
+
activerecord (= 6.0.4.7)
|
|
21
|
+
activestorage (= 6.0.4.7)
|
|
22
|
+
activesupport (= 6.0.4.7)
|
|
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.7)
|
|
25
|
+
actionpack (= 6.0.4.7)
|
|
26
|
+
actionview (= 6.0.4.7)
|
|
27
|
+
activejob (= 6.0.4.7)
|
|
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.7)
|
|
31
|
+
actionview (= 6.0.4.7)
|
|
32
|
+
activesupport (= 6.0.4.7)
|
|
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.7)
|
|
38
|
+
actionpack (= 6.0.4.7)
|
|
39
|
+
activerecord (= 6.0.4.7)
|
|
40
|
+
activestorage (= 6.0.4.7)
|
|
41
|
+
activesupport (= 6.0.4.7)
|
|
42
42
|
nokogiri (>= 1.8.5)
|
|
43
|
-
actionview (6.0.
|
|
44
|
-
activesupport (= 6.0.
|
|
43
|
+
actionview (6.0.4.7)
|
|
44
|
+
activesupport (= 6.0.4.7)
|
|
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.7)
|
|
50
|
+
activesupport (= 6.0.4.7)
|
|
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.7)
|
|
53
|
+
activesupport (= 6.0.4.7)
|
|
54
|
+
activerecord (6.0.4.7)
|
|
55
|
+
activemodel (= 6.0.4.7)
|
|
56
|
+
activesupport (= 6.0.4.7)
|
|
57
|
+
activestorage (6.0.4.7)
|
|
58
|
+
actionpack (= 6.0.4.7)
|
|
59
|
+
activejob (= 6.0.4.7)
|
|
60
|
+
activerecord (= 6.0.4.7)
|
|
61
|
+
marcel (~> 1.0.0)
|
|
62
|
+
activesupport (6.0.4.7)
|
|
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.10.0)
|
|
75
|
+
faraday-em_http (~> 1.0)
|
|
76
|
+
faraday-em_synchrony (~> 1.0)
|
|
77
|
+
faraday-excon (~> 1.1)
|
|
78
|
+
faraday-httpclient (~> 1.0)
|
|
79
|
+
faraday-multipart (~> 1.0)
|
|
80
|
+
faraday-net_http (~> 1.0)
|
|
81
|
+
faraday-net_http_persistent (~> 1.0)
|
|
82
|
+
faraday-patron (~> 1.0)
|
|
83
|
+
faraday-rack (~> 1.0)
|
|
84
|
+
faraday-retry (~> 1.0)
|
|
85
|
+
ruby2_keywords (>= 0.0.4)
|
|
86
|
+
faraday-em_http (1.0.0)
|
|
87
|
+
faraday-em_synchrony (1.0.0)
|
|
88
|
+
faraday-excon (1.1.0)
|
|
89
|
+
faraday-httpclient (1.0.1)
|
|
90
|
+
faraday-multipart (1.0.3)
|
|
75
91
|
multipart-post (>= 1.2, < 3)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
92
|
+
faraday-net_http (1.0.1)
|
|
93
|
+
faraday-net_http_persistent (1.2.0)
|
|
94
|
+
faraday-patron (1.0.0)
|
|
95
|
+
faraday-rack (1.0.0)
|
|
96
|
+
faraday-retry (1.0.3)
|
|
97
|
+
gapic-common (0.8.0)
|
|
98
|
+
faraday (~> 1.3)
|
|
99
|
+
google-protobuf (~> 3.14)
|
|
100
|
+
googleapis-common-protos (>= 1.3.11, < 2.a)
|
|
101
|
+
googleapis-common-protos-types (>= 1.0.6, < 2.a)
|
|
102
|
+
googleauth (>= 0.17.0, < 2.a)
|
|
103
|
+
grpc (~> 1.36)
|
|
104
|
+
globalid (1.0.0)
|
|
105
|
+
activesupport (>= 5.0)
|
|
106
|
+
google-cloud-core (1.6.0)
|
|
85
107
|
google-cloud-env (~> 1.0)
|
|
86
108
|
google-cloud-errors (~> 1.0)
|
|
87
|
-
google-cloud-env (1.
|
|
109
|
+
google-cloud-env (1.5.0)
|
|
88
110
|
faraday (>= 0.17.3, < 2.0)
|
|
89
|
-
google-cloud-errors (1.0
|
|
90
|
-
google-cloud-pubsub (2.
|
|
111
|
+
google-cloud-errors (1.2.0)
|
|
112
|
+
google-cloud-pubsub (2.9.1)
|
|
91
113
|
concurrent-ruby (~> 1.1)
|
|
92
114
|
google-cloud-core (~> 1.5)
|
|
93
115
|
google-cloud-pubsub-v1 (~> 0.0)
|
|
94
|
-
google-cloud-pubsub-v1 (0.1
|
|
95
|
-
gapic-common (
|
|
116
|
+
google-cloud-pubsub-v1 (0.7.1)
|
|
117
|
+
gapic-common (>= 0.7, < 2.a)
|
|
96
118
|
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 (
|
|
119
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.a)
|
|
120
|
+
google-protobuf (3.19.4)
|
|
121
|
+
googleapis-common-protos (1.3.12)
|
|
122
|
+
google-protobuf (~> 3.14)
|
|
123
|
+
googleapis-common-protos-types (~> 1.2)
|
|
102
124
|
grpc (~> 1.27)
|
|
103
|
-
googleapis-common-protos-types (1.0
|
|
104
|
-
google-protobuf (~> 3.
|
|
105
|
-
googleauth (
|
|
106
|
-
faraday (>= 0.17.3, <
|
|
125
|
+
googleapis-common-protos-types (1.3.0)
|
|
126
|
+
google-protobuf (~> 3.14)
|
|
127
|
+
googleauth (1.1.2)
|
|
128
|
+
faraday (>= 0.17.3, < 3.a)
|
|
107
129
|
jwt (>= 1.4, < 3.0)
|
|
108
130
|
memoist (~> 0.16)
|
|
109
131
|
multi_json (~> 1.11)
|
|
110
132
|
os (>= 0.9, < 2.0)
|
|
111
|
-
signet (
|
|
112
|
-
grpc (1.
|
|
113
|
-
google-protobuf (~> 3.
|
|
133
|
+
signet (>= 0.16, < 2.a)
|
|
134
|
+
grpc (1.43.1)
|
|
135
|
+
google-protobuf (~> 3.18)
|
|
114
136
|
googleapis-common-protos-types (~> 1.0)
|
|
115
|
-
grpc-google-iam-v1 (0.
|
|
116
|
-
google-protobuf (~> 3.
|
|
117
|
-
googleapis-common-protos (>= 1.3.
|
|
137
|
+
grpc-google-iam-v1 (1.0.0)
|
|
138
|
+
google-protobuf (~> 3.14)
|
|
139
|
+
googleapis-common-protos (>= 1.3.12, < 2.0)
|
|
118
140
|
grpc (~> 1.27)
|
|
119
|
-
i18n (1.
|
|
141
|
+
i18n (1.10.0)
|
|
120
142
|
concurrent-ruby (~> 1.0)
|
|
121
|
-
jwt (2.
|
|
122
|
-
loofah (2.
|
|
143
|
+
jwt (2.3.0)
|
|
144
|
+
loofah (2.14.0)
|
|
123
145
|
crass (~> 1.0.2)
|
|
124
146
|
nokogiri (>= 1.5.9)
|
|
125
147
|
mail (2.7.1)
|
|
126
148
|
mini_mime (>= 0.1.1)
|
|
127
|
-
marcel (0.
|
|
128
|
-
mimemagic (~> 0.3.2)
|
|
149
|
+
marcel (1.0.2)
|
|
129
150
|
memoist (0.16.2)
|
|
130
151
|
method_source (1.0.0)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
minitest (5.14.2)
|
|
152
|
+
mini_mime (1.1.2)
|
|
153
|
+
mini_portile2 (2.8.0)
|
|
154
|
+
minitest (5.15.0)
|
|
135
155
|
multi_json (1.15.0)
|
|
136
156
|
multipart-post (2.1.1)
|
|
137
|
-
nio4r (2.5.
|
|
138
|
-
nokogiri (1.
|
|
139
|
-
mini_portile2 (~> 2.
|
|
140
|
-
|
|
157
|
+
nio4r (2.5.8)
|
|
158
|
+
nokogiri (1.13.3)
|
|
159
|
+
mini_portile2 (~> 2.8.0)
|
|
160
|
+
racc (~> 1.4)
|
|
161
|
+
os (1.1.4)
|
|
141
162
|
public_suffix (4.0.6)
|
|
163
|
+
puma (5.6.2)
|
|
164
|
+
nio4r (~> 2.0)
|
|
165
|
+
racc (1.6.0)
|
|
142
166
|
rack (2.2.3)
|
|
143
167
|
rack-test (1.1.0)
|
|
144
168
|
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.
|
|
169
|
+
rails (6.0.4.7)
|
|
170
|
+
actioncable (= 6.0.4.7)
|
|
171
|
+
actionmailbox (= 6.0.4.7)
|
|
172
|
+
actionmailer (= 6.0.4.7)
|
|
173
|
+
actionpack (= 6.0.4.7)
|
|
174
|
+
actiontext (= 6.0.4.7)
|
|
175
|
+
actionview (= 6.0.4.7)
|
|
176
|
+
activejob (= 6.0.4.7)
|
|
177
|
+
activemodel (= 6.0.4.7)
|
|
178
|
+
activerecord (= 6.0.4.7)
|
|
179
|
+
activestorage (= 6.0.4.7)
|
|
180
|
+
activesupport (= 6.0.4.7)
|
|
157
181
|
bundler (>= 1.3.0)
|
|
158
|
-
railties (= 6.0.
|
|
182
|
+
railties (= 6.0.4.7)
|
|
159
183
|
sprockets-rails (>= 2.0.0)
|
|
160
184
|
rails-dom-testing (2.0.3)
|
|
161
185
|
activesupport (>= 4.2.0)
|
|
162
186
|
nokogiri (>= 1.6)
|
|
163
|
-
rails-html-sanitizer (1.
|
|
187
|
+
rails-html-sanitizer (1.4.2)
|
|
164
188
|
loofah (~> 2.3)
|
|
165
|
-
railties (6.0.
|
|
166
|
-
actionpack (= 6.0.
|
|
167
|
-
activesupport (= 6.0.
|
|
189
|
+
railties (6.0.4.7)
|
|
190
|
+
actionpack (= 6.0.4.7)
|
|
191
|
+
activesupport (= 6.0.4.7)
|
|
168
192
|
method_source
|
|
169
193
|
rake (>= 0.8.7)
|
|
170
194
|
thor (>= 0.20.3, < 2.0)
|
|
171
|
-
rake (13.0.
|
|
195
|
+
rake (13.0.6)
|
|
172
196
|
retriable (3.1.2)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
197
|
+
ruby2_keywords (0.0.5)
|
|
198
|
+
signet (0.16.1)
|
|
199
|
+
addressable (~> 2.8)
|
|
200
|
+
faraday (>= 0.17.5, < 3.0)
|
|
176
201
|
jwt (>= 1.5, < 3.0)
|
|
177
202
|
multi_json (~> 1.10)
|
|
178
|
-
sprockets (4.0.
|
|
203
|
+
sprockets (4.0.3)
|
|
179
204
|
concurrent-ruby (~> 1.0)
|
|
180
205
|
rack (> 1, < 3)
|
|
181
|
-
sprockets-rails (3.2
|
|
182
|
-
actionpack (>=
|
|
183
|
-
activesupport (>=
|
|
206
|
+
sprockets-rails (3.4.2)
|
|
207
|
+
actionpack (>= 5.2)
|
|
208
|
+
activesupport (>= 5.2)
|
|
184
209
|
sprockets (>= 3.0.0)
|
|
185
210
|
sqlite3 (1.4.2)
|
|
186
|
-
thor (1.
|
|
211
|
+
thor (1.2.1)
|
|
187
212
|
thread_safe (0.3.6)
|
|
188
|
-
tzinfo (1.2.
|
|
213
|
+
tzinfo (1.2.9)
|
|
189
214
|
thread_safe (~> 0.1)
|
|
190
|
-
websocket-driver (0.7.
|
|
215
|
+
websocket-driver (0.7.5)
|
|
191
216
|
websocket-extensions (>= 0.1.0)
|
|
192
217
|
websocket-extensions (0.1.5)
|
|
193
|
-
zeitwerk (2.4
|
|
218
|
+
zeitwerk (2.5.4)
|
|
194
219
|
|
|
195
220
|
PLATFORMS
|
|
196
221
|
ruby
|
|
197
222
|
|
|
198
223
|
DEPENDENCIES
|
|
199
224
|
cloudenvoy!
|
|
225
|
+
puma (~> 5.6.2)
|
|
200
226
|
rails (~> 6.0.2)
|
|
201
227
|
sqlite3
|
|
202
228
|
|
|
203
229
|
RUBY VERSION
|
|
204
|
-
ruby
|
|
230
|
+
ruby 3.0.0p0
|
|
205
231
|
|
|
206
232
|
BUNDLED WITH
|
|
207
|
-
2.
|
|
233
|
+
2.3.4
|
data/examples/rails/README.md
CHANGED
|
@@ -22,7 +22,7 @@ HelloPublisher.publish('Some message')
|
|
|
22
22
|
* Add the configuration of your GCP Pub/Sub
|
|
23
23
|
* Set `config.processor_host` to the ngrok http or https url
|
|
24
24
|
* Set `config.mode` to `:production`
|
|
25
|
-
5. Launch the server: `foreman start
|
|
25
|
+
5. Launch the server: `foreman start`
|
|
26
26
|
6. Open a Rails console: `rails c`
|
|
27
27
|
7. Publish messages
|
|
28
28
|
```ruby
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
4
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
|
+
|
|
6
|
+
ruby '3.0.0'
|
|
7
|
+
|
|
8
|
+
# Web framework
|
|
9
|
+
gem 'sinatra'
|
|
10
|
+
|
|
11
|
+
# Server
|
|
12
|
+
gem 'puma', '~> 5.6.2'
|
|
13
|
+
|
|
14
|
+
# Support rake tasks
|
|
15
|
+
gem 'rake'
|
|
16
|
+
|
|
17
|
+
# Pub/sub via cloudenvoy
|
|
18
|
+
gem 'cloudenvoy', path: '../../'
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: ../..
|
|
3
|
+
specs:
|
|
4
|
+
cloudenvoy (0.5.0)
|
|
5
|
+
activesupport
|
|
6
|
+
google-cloud-pubsub (~> 2.0)
|
|
7
|
+
jwt
|
|
8
|
+
retriable
|
|
9
|
+
|
|
10
|
+
GEM
|
|
11
|
+
remote: https://rubygems.org/
|
|
12
|
+
specs:
|
|
13
|
+
activesupport (7.0.2.3)
|
|
14
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
15
|
+
i18n (>= 1.6, < 2)
|
|
16
|
+
minitest (>= 5.1)
|
|
17
|
+
tzinfo (~> 2.0)
|
|
18
|
+
addressable (2.8.0)
|
|
19
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
20
|
+
concurrent-ruby (1.1.9)
|
|
21
|
+
faraday (1.10.0)
|
|
22
|
+
faraday-em_http (~> 1.0)
|
|
23
|
+
faraday-em_synchrony (~> 1.0)
|
|
24
|
+
faraday-excon (~> 1.1)
|
|
25
|
+
faraday-httpclient (~> 1.0)
|
|
26
|
+
faraday-multipart (~> 1.0)
|
|
27
|
+
faraday-net_http (~> 1.0)
|
|
28
|
+
faraday-net_http_persistent (~> 1.0)
|
|
29
|
+
faraday-patron (~> 1.0)
|
|
30
|
+
faraday-rack (~> 1.0)
|
|
31
|
+
faraday-retry (~> 1.0)
|
|
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-multipart (1.0.3)
|
|
38
|
+
multipart-post (>= 1.2, < 3)
|
|
39
|
+
faraday-net_http (1.0.1)
|
|
40
|
+
faraday-net_http_persistent (1.2.0)
|
|
41
|
+
faraday-patron (1.0.0)
|
|
42
|
+
faraday-rack (1.0.0)
|
|
43
|
+
faraday-retry (1.0.3)
|
|
44
|
+
gapic-common (0.8.0)
|
|
45
|
+
faraday (~> 1.3)
|
|
46
|
+
google-protobuf (~> 3.14)
|
|
47
|
+
googleapis-common-protos (>= 1.3.11, < 2.a)
|
|
48
|
+
googleapis-common-protos-types (>= 1.0.6, < 2.a)
|
|
49
|
+
googleauth (>= 0.17.0, < 2.a)
|
|
50
|
+
grpc (~> 1.36)
|
|
51
|
+
google-cloud-core (1.6.0)
|
|
52
|
+
google-cloud-env (~> 1.0)
|
|
53
|
+
google-cloud-errors (~> 1.0)
|
|
54
|
+
google-cloud-env (1.5.0)
|
|
55
|
+
faraday (>= 0.17.3, < 2.0)
|
|
56
|
+
google-cloud-errors (1.2.0)
|
|
57
|
+
google-cloud-pubsub (2.9.1)
|
|
58
|
+
concurrent-ruby (~> 1.1)
|
|
59
|
+
google-cloud-core (~> 1.5)
|
|
60
|
+
google-cloud-pubsub-v1 (~> 0.0)
|
|
61
|
+
google-cloud-pubsub-v1 (0.7.1)
|
|
62
|
+
gapic-common (>= 0.7, < 2.a)
|
|
63
|
+
google-cloud-errors (~> 1.0)
|
|
64
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.a)
|
|
65
|
+
google-protobuf (3.19.4-x86_64-darwin)
|
|
66
|
+
google-protobuf (3.19.4-x86_64-linux)
|
|
67
|
+
googleapis-common-protos (1.3.12)
|
|
68
|
+
google-protobuf (~> 3.14)
|
|
69
|
+
googleapis-common-protos-types (~> 1.2)
|
|
70
|
+
grpc (~> 1.27)
|
|
71
|
+
googleapis-common-protos-types (1.3.0)
|
|
72
|
+
google-protobuf (~> 3.14)
|
|
73
|
+
googleauth (1.1.2)
|
|
74
|
+
faraday (>= 0.17.3, < 3.a)
|
|
75
|
+
jwt (>= 1.4, < 3.0)
|
|
76
|
+
memoist (~> 0.16)
|
|
77
|
+
multi_json (~> 1.11)
|
|
78
|
+
os (>= 0.9, < 2.0)
|
|
79
|
+
signet (>= 0.16, < 2.a)
|
|
80
|
+
grpc (1.43.1-universal-darwin)
|
|
81
|
+
google-protobuf (~> 3.18)
|
|
82
|
+
googleapis-common-protos-types (~> 1.0)
|
|
83
|
+
grpc (1.43.1-x86_64-linux)
|
|
84
|
+
google-protobuf (~> 3.18)
|
|
85
|
+
googleapis-common-protos-types (~> 1.0)
|
|
86
|
+
grpc-google-iam-v1 (1.0.0)
|
|
87
|
+
google-protobuf (~> 3.14)
|
|
88
|
+
googleapis-common-protos (>= 1.3.12, < 2.0)
|
|
89
|
+
grpc (~> 1.27)
|
|
90
|
+
i18n (1.10.0)
|
|
91
|
+
concurrent-ruby (~> 1.0)
|
|
92
|
+
jwt (2.3.0)
|
|
93
|
+
memoist (0.16.2)
|
|
94
|
+
minitest (5.15.0)
|
|
95
|
+
multi_json (1.15.0)
|
|
96
|
+
multipart-post (2.1.1)
|
|
97
|
+
mustermann (1.1.1)
|
|
98
|
+
ruby2_keywords (~> 0.0.1)
|
|
99
|
+
nio4r (2.5.8)
|
|
100
|
+
os (1.1.4)
|
|
101
|
+
public_suffix (4.0.6)
|
|
102
|
+
puma (5.6.2)
|
|
103
|
+
nio4r (~> 2.0)
|
|
104
|
+
rack (2.2.3)
|
|
105
|
+
rack-protection (2.2.0)
|
|
106
|
+
rack
|
|
107
|
+
rake (13.0.6)
|
|
108
|
+
retriable (3.1.2)
|
|
109
|
+
ruby2_keywords (0.0.5)
|
|
110
|
+
signet (0.16.1)
|
|
111
|
+
addressable (~> 2.8)
|
|
112
|
+
faraday (>= 0.17.5, < 3.0)
|
|
113
|
+
jwt (>= 1.5, < 3.0)
|
|
114
|
+
multi_json (~> 1.10)
|
|
115
|
+
sinatra (2.2.0)
|
|
116
|
+
mustermann (~> 1.0)
|
|
117
|
+
rack (~> 2.2)
|
|
118
|
+
rack-protection (= 2.2.0)
|
|
119
|
+
tilt (~> 2.0)
|
|
120
|
+
tilt (2.0.10)
|
|
121
|
+
tzinfo (2.0.4)
|
|
122
|
+
concurrent-ruby (~> 1.0)
|
|
123
|
+
|
|
124
|
+
PLATFORMS
|
|
125
|
+
x86_64-darwin-17
|
|
126
|
+
x86_64-darwin-19
|
|
127
|
+
x86_64-linux
|
|
128
|
+
|
|
129
|
+
DEPENDENCIES
|
|
130
|
+
cloudenvoy!
|
|
131
|
+
puma (~> 5.6.2)
|
|
132
|
+
rake
|
|
133
|
+
sinatra
|
|
134
|
+
|
|
135
|
+
RUBY VERSION
|
|
136
|
+
ruby 3.0.0p0
|
|
137
|
+
|
|
138
|
+
BUNDLED WITH
|
|
139
|
+
2.3.4
|
|
@@ -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
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Force logging to be realtime
|
|
4
|
+
STDOUT.sync = true
|
|
5
|
+
|
|
6
|
+
# Require project files
|
|
7
|
+
require 'sinatra'
|
|
8
|
+
Dir.glob('./config/initializers/*.rb').each { |file| require file }
|
|
9
|
+
Dir.glob('./app/publishers/*.rb').each { |file| require file }
|
|
10
|
+
Dir.glob('./app/subscribers/*.rb').each { |file| require file }
|
|
11
|
+
|
|
12
|
+
#---------------------------------------------------
|
|
13
|
+
# Routes
|
|
14
|
+
#---------------------------------------------------
|
|
15
|
+
|
|
16
|
+
get '/' do
|
|
17
|
+
'Hello!'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
post '/cloudenvoy/receive' do
|
|
21
|
+
begin
|
|
22
|
+
# Authenticate request
|
|
23
|
+
Cloudenvoy::Authenticator.verify!(params['token'])
|
|
24
|
+
|
|
25
|
+
# Parse message descriptor
|
|
26
|
+
content = request.body.read
|
|
27
|
+
msg_descriptor = JSON.parse(content).except('token')
|
|
28
|
+
|
|
29
|
+
# Process message descriptor
|
|
30
|
+
Cloudenvoy::Subscriber.execute_from_descriptor(msg_descriptor)
|
|
31
|
+
return 204
|
|
32
|
+
rescue Cloudenvoy::InvalidSubscriberError
|
|
33
|
+
# 404: Message delivery will be retried
|
|
34
|
+
return 404
|
|
35
|
+
rescue StandardError => e
|
|
36
|
+
# 422: Message delivery will be retried
|
|
37
|
+
logger.info([e.message, e.backtrace].flatten.join("\n"))
|
|
38
|
+
return 422
|
|
39
|
+
end
|
|
40
|
+
end
|