pub_sub_model_sync 0.5.5 → 0.5.6
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/Gemfile.lock +1 -1
- data/README.md +22 -1
- data/lib/pub_sub_model_sync/payload.rb +22 -0
- 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: ebc62742739be4d3291fc1551a8f53bf57d815f7b0ce3a9622e4c06a025e4fab
|
4
|
+
data.tar.gz: ec84b83f7b2e176a2030415674b6c09859e40bbd9069fa40ff51041d24de0d4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b351a1210c3b747de830e4ed67c527625d7941967e71332189000de5b81cb4286f906d8ab943595c7f7ab4cf7c2238c5458b2ea87620a11705877889552dcfcf
|
7
|
+
data.tar.gz: 6d282613d88dfa53460bab1425c10553e89837a31790a49bbbd27f451de39f777b56d99424ef81e046eb459ba5d6b97aea92d6b812830579e9a2996e67c5dc6f
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -319,7 +319,28 @@ config.debug = true
|
|
319
319
|
To fix the problem, edit config/database.yml and increase the quantity of ```pool: 10```
|
320
320
|
- Google pubsub: How to process notifications parallely and not sequentially (default 1 thread)?
|
321
321
|
```ruby PubSubModelSync::ServiceGoogle::LISTEN_SETTINGS = { threads: { callback: qty_threads } } ```
|
322
|
-
Note: by this way some notifications can be processed before others thus missing relationship errors can appear
|
322
|
+
Note: by this way some notifications can be processed before others thus missing relationship errors can appear
|
323
|
+
- How to retry failed syncs with sidekiq?
|
324
|
+
```ruby
|
325
|
+
# lib/initializers/pub_sub_config.rb
|
326
|
+
|
327
|
+
class PubSubRecovery
|
328
|
+
include Sidekiq::Worker
|
329
|
+
sidekiq_options queue: :pubsub, retry: 2, backtrace: true
|
330
|
+
|
331
|
+
def perform(payload_data, action)
|
332
|
+
payload = PubSubModelSync::Payload.from_payload_data(payload_data)
|
333
|
+
payload.send(action)
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
PubSubModelSync::Config.on_error_publish = lambda do |_e, data|
|
338
|
+
PubSubRecovery.perform_async(data[:payload].to_h, :publish!)
|
339
|
+
end
|
340
|
+
PubSubModelSync::Config.on_error_processing = lambda do |_e, data|
|
341
|
+
PubSubRecovery.perform_async(data[:payload].to_h, :process!)
|
342
|
+
end
|
343
|
+
```
|
323
344
|
|
324
345
|
## Contributing
|
325
346
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
module PubSubModelSync
|
4
4
|
class Payload
|
5
|
+
class MissingInfo < StandardError; end
|
5
6
|
attr_reader :data, :attributes, :headers
|
6
7
|
|
7
8
|
# @param data (Hash: { any value }):
|
@@ -11,8 +12,10 @@ module PubSubModelSync
|
|
11
12
|
@attributes = attributes
|
12
13
|
@headers = headers
|
13
14
|
build_headers
|
15
|
+
validate!
|
14
16
|
end
|
15
17
|
|
18
|
+
# @return Hash: payload data
|
16
19
|
def to_h
|
17
20
|
{ data: data, attributes: attributes, headers: headers }
|
18
21
|
end
|
@@ -25,33 +28,52 @@ module PubSubModelSync
|
|
25
28
|
attributes[:action]
|
26
29
|
end
|
27
30
|
|
31
|
+
# Process payload data
|
32
|
+
# (If error will raise exception and wont call on_error_processing callback)
|
28
33
|
def process!
|
29
34
|
process do |publisher|
|
30
35
|
publisher.raise_error = true
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
39
|
+
# Process payload data
|
40
|
+
# (If error will call on_error_processing callback)
|
34
41
|
def process
|
35
42
|
publisher = PubSubModelSync::MessageProcessor.new(self)
|
36
43
|
yield(publisher) if block_given?
|
37
44
|
publisher.process
|
38
45
|
end
|
39
46
|
|
47
|
+
# Publish payload to pubsub
|
48
|
+
# (If error will raise exception and wont call on_error_publish callback)
|
40
49
|
def publish!
|
41
50
|
klass = PubSubModelSync::MessagePublisher
|
42
51
|
klass.publish(self, raise_error: true)
|
43
52
|
end
|
44
53
|
|
54
|
+
# Publish payload to pubsub
|
55
|
+
# (If error will call on_error_publish callback)
|
45
56
|
def publish
|
46
57
|
klass = PubSubModelSync::MessagePublisher
|
47
58
|
klass.publish(self)
|
48
59
|
end
|
49
60
|
|
61
|
+
# convert payload data into Payload
|
62
|
+
# @param data [Hash]: payload data (:data, :attributes, :headers)
|
63
|
+
def self.from_payload_data(data)
|
64
|
+
data = data.deep_symbolize_keys
|
65
|
+
new(data[:data], data[:attributes], data[:headers])
|
66
|
+
end
|
67
|
+
|
50
68
|
private
|
51
69
|
|
52
70
|
def build_headers
|
53
71
|
headers[:uuid] ||= SecureRandom.uuid
|
54
72
|
headers[:app_key] ||= PubSubModelSync::Config.subscription_key
|
55
73
|
end
|
74
|
+
|
75
|
+
def validate!
|
76
|
+
raise MissingInfo if !attributes[:klass] || !attributes[:action]
|
77
|
+
end
|
56
78
|
end
|
57
79
|
end
|
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.6
|
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-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|