pub_sub_model_sync 0.5.7.1 → 0.5.8
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/CHANGELOG.md +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +45 -39
- data/README.md +4 -3
- data/lib/pub_sub_model_sync/mock_google_service.rb +8 -0
- data/lib/pub_sub_model_sync/service_google.rb +10 -2
- data/lib/pub_sub_model_sync/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 14095a129de1a44dd2f51051e3ee768217eae9ddbaa69b2e9bb3979d857dde5a
|
|
4
|
+
data.tar.gz: eeff964335f21b2bc5db23048cf0a09cb8e4d385333f72cf431d9201e107737b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3f85d85ac9f5de88af18848c8511e113a2359c5135b4dba8904e4bbc2b1f72b7be526c9fcdd221761202e9ef8d4630d84e08e9a5d8aa0c2753f98046a514fb70
|
|
7
|
+
data.tar.gz: 4788d133e2eaf6b302d34898d5f0d7002556edb357c907f280df137d686c71d7280503a763180f7fb61dece830c41f1263a7d569a868fad0082d13062e7caccd
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
pub_sub_model_sync (0.5.
|
|
4
|
+
pub_sub_model_sync (0.5.8)
|
|
5
5
|
rails
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -78,49 +78,55 @@ GEM
|
|
|
78
78
|
diff-lcs (1.3)
|
|
79
79
|
digest-crc (0.5.1)
|
|
80
80
|
erubi (1.10.0)
|
|
81
|
-
faraday (
|
|
81
|
+
faraday (1.1.0)
|
|
82
82
|
multipart-post (>= 1.2, < 3)
|
|
83
|
+
ruby2_keywords
|
|
84
|
+
gapic-common (0.3.4)
|
|
85
|
+
google-protobuf (~> 3.12, >= 3.12.2)
|
|
86
|
+
googleapis-common-protos (>= 1.3.9, < 2.0)
|
|
87
|
+
googleapis-common-protos-types (>= 1.0.4, < 2.0)
|
|
88
|
+
googleauth (~> 0.9)
|
|
89
|
+
grpc (~> 1.25)
|
|
83
90
|
globalid (0.4.2)
|
|
84
91
|
activesupport (>= 4.2.0)
|
|
85
|
-
google-cloud-core (1.
|
|
92
|
+
google-cloud-core (1.5.0)
|
|
86
93
|
google-cloud-env (~> 1.0)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
94
|
+
google-cloud-errors (~> 1.0)
|
|
95
|
+
google-cloud-env (1.4.0)
|
|
96
|
+
faraday (>= 0.17.3, < 2.0)
|
|
97
|
+
google-cloud-errors (1.0.1)
|
|
98
|
+
google-cloud-pubsub (2.3.0)
|
|
90
99
|
concurrent-ruby (~> 1.1)
|
|
91
|
-
google-cloud-core (~> 1.
|
|
92
|
-
google-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
google-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
googleapis-common-protos (1.
|
|
103
|
-
google-protobuf (~> 3.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
googleapis-common-protos-types (1.0.4)
|
|
107
|
-
google-protobuf (~> 3.0)
|
|
108
|
-
googleauth (0.9.0)
|
|
109
|
-
faraday (~> 0.12)
|
|
100
|
+
google-cloud-core (~> 1.5)
|
|
101
|
+
google-cloud-pubsub-v1 (~> 0.0)
|
|
102
|
+
google-cloud-pubsub-v1 (0.1.2)
|
|
103
|
+
gapic-common (~> 0.3)
|
|
104
|
+
google-cloud-errors (~> 1.0)
|
|
105
|
+
grpc-google-iam-v1 (>= 0.6.10, < 2.0)
|
|
106
|
+
google-protobuf (3.14.0-universal-darwin)
|
|
107
|
+
googleapis-common-protos (1.3.10)
|
|
108
|
+
google-protobuf (~> 3.11)
|
|
109
|
+
googleapis-common-protos-types (>= 1.0.5, < 2.0)
|
|
110
|
+
grpc (~> 1.27)
|
|
111
|
+
googleapis-common-protos-types (1.0.5)
|
|
112
|
+
google-protobuf (~> 3.11)
|
|
113
|
+
googleauth (0.14.0)
|
|
114
|
+
faraday (>= 0.17.3, < 2.0)
|
|
110
115
|
jwt (>= 1.4, < 3.0)
|
|
111
116
|
memoist (~> 0.16)
|
|
112
117
|
multi_json (~> 1.11)
|
|
113
118
|
os (>= 0.9, < 2.0)
|
|
114
|
-
signet (~> 0.
|
|
115
|
-
grpc (1.
|
|
116
|
-
google-protobuf (~> 3.
|
|
119
|
+
signet (~> 0.14)
|
|
120
|
+
grpc (1.34.0-universal-darwin)
|
|
121
|
+
google-protobuf (~> 3.13)
|
|
117
122
|
googleapis-common-protos-types (~> 1.0)
|
|
118
|
-
grpc-google-iam-v1 (0.6.
|
|
119
|
-
|
|
120
|
-
|
|
123
|
+
grpc-google-iam-v1 (0.6.10)
|
|
124
|
+
google-protobuf (~> 3.11)
|
|
125
|
+
googleapis-common-protos (>= 1.3.10, < 2.0)
|
|
126
|
+
grpc (~> 1.27)
|
|
121
127
|
i18n (1.8.2)
|
|
122
128
|
concurrent-ruby (~> 1.0)
|
|
123
|
-
jwt (2.2.
|
|
129
|
+
jwt (2.2.2)
|
|
124
130
|
loofah (2.8.0)
|
|
125
131
|
crass (~> 1.0.2)
|
|
126
132
|
nokogiri (>= 1.5.9)
|
|
@@ -134,16 +140,16 @@ GEM
|
|
|
134
140
|
mini_mime (1.0.2)
|
|
135
141
|
mini_portile2 (2.4.0)
|
|
136
142
|
minitest (5.14.0)
|
|
137
|
-
multi_json (1.
|
|
143
|
+
multi_json (1.15.0)
|
|
138
144
|
multipart-post (2.1.1)
|
|
139
145
|
nio4r (2.5.4)
|
|
140
146
|
nokogiri (1.10.10)
|
|
141
147
|
mini_portile2 (~> 2.4.0)
|
|
142
|
-
os (1.
|
|
148
|
+
os (1.1.1)
|
|
143
149
|
parallel (1.20.1)
|
|
144
150
|
parser (2.7.2.0)
|
|
145
151
|
ast (~> 2.4.1)
|
|
146
|
-
public_suffix (4.0.
|
|
152
|
+
public_suffix (4.0.6)
|
|
147
153
|
rack (2.2.3)
|
|
148
154
|
rack-test (1.1.0)
|
|
149
155
|
rack (>= 1.0, < 3)
|
|
@@ -177,7 +183,6 @@ GEM
|
|
|
177
183
|
rake (13.0.1)
|
|
178
184
|
regexp_parser (2.0.1)
|
|
179
185
|
rexml (3.2.4)
|
|
180
|
-
rly (0.2.3)
|
|
181
186
|
rspec (3.9.0)
|
|
182
187
|
rspec-core (~> 3.9.0)
|
|
183
188
|
rspec-expectations (~> 3.9.0)
|
|
@@ -205,9 +210,10 @@ GEM
|
|
|
205
210
|
ruby-kafka (1.0.0)
|
|
206
211
|
digest-crc
|
|
207
212
|
ruby-progressbar (1.10.1)
|
|
208
|
-
|
|
213
|
+
ruby2_keywords (0.0.2)
|
|
214
|
+
signet (0.14.0)
|
|
209
215
|
addressable (~> 2.3)
|
|
210
|
-
faraday (
|
|
216
|
+
faraday (>= 0.17.3, < 2.0)
|
|
211
217
|
jwt (>= 1.5, < 3.0)
|
|
212
218
|
multi_json (~> 1.10)
|
|
213
219
|
sprockets (4.0.2)
|
|
@@ -235,7 +241,7 @@ DEPENDENCIES
|
|
|
235
241
|
bundler
|
|
236
242
|
bunny
|
|
237
243
|
database_cleaner-active_record
|
|
238
|
-
google-cloud-pubsub
|
|
244
|
+
google-cloud-pubsub (> 2.0)
|
|
239
245
|
pub_sub_model_sync!
|
|
240
246
|
rake
|
|
241
247
|
rspec
|
data/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Add this line to your application's Gemfile:
|
|
|
15
15
|
```ruby
|
|
16
16
|
gem 'pub_sub_model_sync'
|
|
17
17
|
|
|
18
|
-
gem 'google-cloud-pubsub' # to use google pub/sub service
|
|
18
|
+
gem 'google-cloud-pubsub', '>= 1.9' # to use google pub/sub service
|
|
19
19
|
gem 'bunny' # to use rabbit-mq pub/sub service
|
|
20
20
|
gem 'ruby-kafka' # to use apache kafka pub/sub service
|
|
21
21
|
```
|
|
@@ -308,10 +308,11 @@ config.debug = true
|
|
|
308
308
|
|
|
309
309
|
## TODO
|
|
310
310
|
- Add alias attributes when subscribing (similar to publisher)
|
|
311
|
-
- Add flag ```model.
|
|
311
|
+
- Add flag ```model.ps_process_payload``` to retrieve the payload used to process the pub/sub sync
|
|
312
312
|
- Auto publish update only if payload has changed
|
|
313
313
|
- On delete, payload must only be composed by ids
|
|
314
|
-
-
|
|
314
|
+
- Feature to publish multiple message at a time with the ability to exclude similar messages by klass and action (use the last one)
|
|
315
|
+
PubSubModelSync::MessagePublisher.batch_publish({ same_keys: :use_last_as_first|:use_last|:use_first_as_last|:keep*, same_data: :use_last_as_first*|:use_last|:use_first_as_last|:keep })
|
|
315
316
|
|
|
316
317
|
## Q&A
|
|
317
318
|
- Error "could not obtain a connection from the pool within 5.000 seconds"
|
|
@@ -8,6 +8,7 @@ end
|
|
|
8
8
|
module PubSubModelSync
|
|
9
9
|
class ServiceGoogle < ServiceBase
|
|
10
10
|
LISTEN_SETTINGS = { threads: { callback: 1 } }.freeze
|
|
11
|
+
TOPIC_SETTINGS = { async: { threads: { publish: 1, callback: 1 } } }.freeze
|
|
11
12
|
SUBSCRIPTION_SETTINGS = { message_ordering: true }.freeze
|
|
12
13
|
attr_accessor :service, :topic, :subscription, :subscriber
|
|
13
14
|
|
|
@@ -15,7 +16,8 @@ module PubSubModelSync
|
|
|
15
16
|
@service = Google::Cloud::Pubsub.new(project: config.project,
|
|
16
17
|
credentials: config.credentials)
|
|
17
18
|
@topic = service.topic(config.topic_name) ||
|
|
18
|
-
service.create_topic(config.topic_name)
|
|
19
|
+
service.create_topic(config.topic_name, TOPIC_SETTINGS)
|
|
20
|
+
topic.enable_message_ordering!
|
|
19
21
|
end
|
|
20
22
|
|
|
21
23
|
def listen_messages
|
|
@@ -30,7 +32,9 @@ module PubSubModelSync
|
|
|
30
32
|
end
|
|
31
33
|
|
|
32
34
|
def publish(payload)
|
|
33
|
-
topic.
|
|
35
|
+
topic.publish_async(payload.to_json, message_headers) do |res|
|
|
36
|
+
raise 'Failed to publish the message.' unless res.succeeded?
|
|
37
|
+
end
|
|
34
38
|
end
|
|
35
39
|
|
|
36
40
|
def stop
|
|
@@ -40,6 +44,10 @@ module PubSubModelSync
|
|
|
40
44
|
|
|
41
45
|
private
|
|
42
46
|
|
|
47
|
+
def message_headers
|
|
48
|
+
{ SERVICE_KEY => true, ordering_key: Time.current.to_i }.merge(PUBLISH_SETTINGS)
|
|
49
|
+
end
|
|
50
|
+
|
|
43
51
|
def subscribe_to_topic
|
|
44
52
|
topic.subscription(config.subscription_key) ||
|
|
45
53
|
topic.subscribe(config.subscription_key, SUBSCRIPTION_SETTINGS)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pub_sub_model_sync
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Owen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-01-
|
|
11
|
+
date: 2021-01-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|