pub_sub_model_sync 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -8
- data/lib/pub_sub_model_sync/payload.rb +1 -1
- data/lib/pub_sub_model_sync/payload_builder.rb +2 -2
- data/lib/pub_sub_model_sync/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec006984fe2bf9c33e9992facdd25aa9fdaa3494b6bcaf656592593829429017
|
4
|
+
data.tar.gz: 8ca60de929eb7465c95ff819682af73a9094c60294661e5c823394aeb02ed6a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d799e1e27c071e18d5d7e15460a7d481b9991b469599356e23c86669fd8de95046b236d4596a5fbc22e93d278548d2b17255262e4f5c67eece7a4f6898ff03ca
|
7
|
+
data.tar.gz: 89f6e95f040919994a0f0397b61b09ac83567b69472ce41aa722b240dba66e8a66d4e7a60cedb0de5f59d671525c4d7ad38b02255e558728f8e34e71e227e1e1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
# 1.2.0 (October 28, 2021)
|
4
|
+
- feat: rename Payload `:key` into `:internal_key` to avoid confusions while debugging
|
5
|
+
|
3
6
|
# 1.1.1 (October 25, 2021)
|
4
7
|
- feat: include `ordering_key topic_name` when delivering a notification for debugging purposes
|
5
8
|
- doc: improve docs
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -311,14 +311,14 @@ Any notification before delivering is transformed as a Payload for a better port
|
|
311
311
|
- `klass`: (String) Notification class name
|
312
312
|
- `mode`: (Symbol: `:model`|`:class`) Kind of notification
|
313
313
|
* `headers`: (Hash) Notification settings that defines how the notification will be processed or delivered.
|
314
|
-
- `ordering_key`: (String, optional): notifications with the same `ordering_key` are processed in the same order they were delivered, default: `<model.class.name>/<model.id>` when instance notification and `klass_name` when class notification.
|
315
|
-
|
316
|
-
|
314
|
+
- `ordering_key`: (String, optional): notifications with the same `ordering_key` are processed in the same order they were delivered, default: `<model.class.name>/<model.id>` when instance notification and `klass_name` when class notification.
|
315
|
+
Note: Final `ordering_key` is calculated as: `payload.headers[:forced_ordering_key] || current_transaction&.key || payload.headers[:ordering_key]`
|
316
|
+
- `internal_key`: (String, optional) Internal identifier of the payload, default: `<model.class.name>/<action>/<model.id>` when model notification and `<klass_name>/<action>` when class notification (Useful for caching techniques).
|
317
317
|
- `topic_name`: (String|Array<String>, optional): Specific topic name where to deliver the notification (default `PubSubModelSync::Config.topic_name`).
|
318
318
|
- `forced_ordering_key`: (String, optional): Overrides `ordering_key` with the provided value even withing transactions. Default `nil`.
|
319
319
|
- `app_key`: (Auto calculated): Name of the application who delivered the notification.
|
320
320
|
- `uuid`: (Auto calculated): Unique notification identifier (Very useful when debugging).
|
321
|
-
|
321
|
+
Note: To reduce Payload size, some header info are not delivered (Enable debug mode to deliver all payload info).
|
322
322
|
|
323
323
|
- Actions
|
324
324
|
```ruby
|
@@ -343,21 +343,21 @@ Any notification before delivering is transformed as a Payload for a better port
|
|
343
343
|
ps_after_action([:create, :update, :destroy]) { |action| ps_publish(action, mapping: %i[id user_id title]) }
|
344
344
|
end
|
345
345
|
```
|
346
|
-
- When created (all notifications use the same
|
346
|
+
- When created (all notifications use the same ordering_key to be processed in the same order)
|
347
347
|
```ruby
|
348
348
|
user = User.create!(name: 'test', posts_attributes: [{ title: 'Post 1' }, { title: 'Post 2' }])
|
349
349
|
# notification #1 => <Payload data: {id: 1, name: 'sample'}, info: { klass: 'User', action: :create, mode: :model }, headers: { ordering_key = `User/1` }>
|
350
350
|
# notification #2 => <Payload data: {id: 1, title: 'Post 1', user_id: 1}, info: { klass: 'Post', action: :create, mode: :model }, headers: { ordering_key = `User/1` }>
|
351
351
|
# notification #3 => <Payload data: {id: 2, title: 'Post 2', user_id: 1}, info: { klass: 'Post', action: :create, mode: :model }, headers: { ordering_key = `User/1` }>
|
352
352
|
```
|
353
|
-
- When updated (all notifications use the same
|
353
|
+
- When updated (all notifications use the same ordering_key to be processed in the same order)
|
354
354
|
```ruby
|
355
355
|
user.update!(name: 'changed', posts_attributes: [{ id: 1, title: 'Post 1C' }, { id: 2, title: 'Post 2C' }])
|
356
356
|
# notification #1 => <Payload data: {id: 1, name: 'changed'}, info: { klass: 'User', action: :update, mode: :model }, headers: { ordering_key = `User/1` }>
|
357
357
|
# notification #2 => <Payload data: {id: 1, title: 'Post 1C', user_id: 1}, info: { klass: 'Post', action: :update, mode: :model }, headers: { ordering_key = `User/1` }>
|
358
358
|
# notification #3 => <Payload data: {id: 2, title: 'Post 2C', user_id: 1}, info: { klass: 'Post', action: :update, mode: :model }, headers: { ordering_key = `User/1` }>
|
359
359
|
```
|
360
|
-
- When destroyed (all notifications use the same
|
360
|
+
- When destroyed (all notifications use the same ordering_key to be processed in the same order)
|
361
361
|
**Note**: The notifications order were reordered in order to avoid inconsistency in other apps
|
362
362
|
```ruby
|
363
363
|
user.destroy!
|
@@ -371,7 +371,7 @@ Any notification before delivering is transformed as a Payload for a better port
|
|
371
371
|
|
372
372
|
- Manual transactions
|
373
373
|
`PubSubModelSync::MessagePublisher::transaction(key, max_buffer: , &block)`
|
374
|
-
- `key` (String|nil) Key used as the
|
374
|
+
- `key` (String|nil) Key used as the ordering_key for all inner notifications (When nil, will use `ordering_key` of the first notification)
|
375
375
|
- `max_buffer:` (Integer, default: `PubSubModelSync::Config.transactions_max_buffer`) Transaction buffer size (more details in #transactions_max_buffer).
|
376
376
|
Sample:
|
377
377
|
```ruby
|
@@ -86,7 +86,7 @@ module PubSubModelSync
|
|
86
86
|
|
87
87
|
def build_headers
|
88
88
|
headers[:app_key] ||= PubSubModelSync::Config.subscription_key
|
89
|
-
headers[:
|
89
|
+
headers[:internal_key] ||= [klass, action].join('/')
|
90
90
|
headers[:ordering_key] ||= klass
|
91
91
|
headers[:uuid] ||= SecureRandom.uuid
|
92
92
|
end
|
@@ -43,8 +43,8 @@ module PubSubModelSync
|
|
43
43
|
|
44
44
|
def headers_data
|
45
45
|
klass_name = model.class.name
|
46
|
-
|
47
|
-
def_data = { ordering_key: self.class.ordering_key_for(model),
|
46
|
+
internal_key = [klass_name, action, model.id || SecureRandom.uuid].join('/')
|
47
|
+
def_data = { ordering_key: self.class.ordering_key_for(model), internal_key: internal_key }
|
48
48
|
def_data.merge(compute_value(headers))
|
49
49
|
end
|
50
50
|
|