dionysus-rb 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bf3312592aa3f39392dc5ea53bb55a026cdf1dbde5cce0fc598f50a99d1d499e
4
- data.tar.gz: 0c302683ed17704b861bd1d08eb3d87f549e7102af46acd23cccd1be0163c329
3
+ metadata.gz: 8297895cea885c4df1b824188297d199eed0eb00f4c52f102842e8468c02728a
4
+ data.tar.gz: b71aff2bf67cffe2a5be1e9befd29f3651a23501ee107806b7c2c6eef85f744f
5
5
  SHA512:
6
- metadata.gz: d788ee2c0aadac5bd2d8510517f941043ef032cb22d049ed8457a5ce68a26cd799ef4370fd58cb89f2999ade8e4dfd174fcebe39d42ed702f4e235060dc877f1
7
- data.tar.gz: a3e25434d96c3579b6185b9e6cfd6d6bd4e87aba52eb7e5e8b7736addf25aada4964bbf1ada59d9c4ccf0051b5b251bfe207669ce08d4852836ca35e8e5dc1d9
6
+ metadata.gz: 3ad54974b1e4956cd76f94e865c225dfe1beb2b339a29b6a594faf1671f59b4388d9a39a420788f57692e168edb1fc067e351a96d7d5883ec237f051f319eb21
7
+ data.tar.gz: 428894822478c3ed6296eb51c7440049fe39dd3ec54220abc038e1786b3f4468e48ee745cd2cadaaf7a419b9b093e79628cfb0be476602d352c6317280771685
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0]
4
+ - Allow to provide multiple message filters. `message_filter` stays for backwards compatibility and depends on `message_filters`.
5
+
3
6
  ## [0.2.0]
4
7
  - Fix creation of outbox records when updating a record that was soft-deleted
5
8
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dionysus-rb (0.2.0)
4
+ dionysus-rb (0.3.0)
5
5
  activerecord (>= 5)
6
6
  activesupport (>= 3.2)
7
7
  concurrent-ruby
data/README.md CHANGED
@@ -1136,7 +1136,8 @@ Dionysus::Consumer.configure do |config|
1136
1136
  config.synced_data_attribute = :synced_data # required, default: :synced_data
1137
1137
  config.resolve_synced_data_hash_proc = ->(record) { record.synced_data_model.synced_data_hash } # optional, defaults to ->(record) { record.public_send(Dionysus::Consumer.configuration.synced_data_attribute).to_h }
1138
1138
  config.sidekiq_queue = :default # optional, defaults to `:dionysus`
1139
- config.message_filter = FilterIgnoringLargeMessageToAvoidOutofMemoryErrors.new(error_handler: Sentry) # not required, defaults to Dionysus::Utils::DefaultMessageFilter, which doesn't ignore any messages. It can be useful when you want to ignore some messages, e.g. some very large ones that would cause OOM error. Check the implementation of `Dionysus::Utils::DefaultMessageFilter for more details to understand what kind of arguments are available to set the condition. `error_handler` needs to implement Sentry-like interface.
1139
+ config.message_filter = FilterIgnoringLargeMessageToAvoidOutofMemoryErrors.new(error_handler: Sentry) # DEPRECATED - not required, defaults to Dionysus::Utils::DefaultMessageFilter, which doesn't ignore any messages. It can be useful when you want to ignore some messages, e.g. some very large ones that would cause OOM error. Check the implementation of `Dionysus::Utils::DefaultMessageFilter for more details to understand what kind of arguments are available to set the condition. `error_handler` needs to implement Sentry-like interface. Kept for backwards compatibility, please use `message_filters` instead.
1140
+ config.message_filters = [FilterIgnoringLargeMessageToAvoidOutofMemoryErrors.new(error_handler: Sentry)] # not required, defaults to [Dionysus::Utils::DefaultMessageFilter], which doesn't ignore any messages. It can be useful when you want to ignore some messages, e.g. some very large ones that would cause OOM error. Check the implementation of `Dionysus::Utils::DefaultMessageFilter for more details to understand what kind of arguments are available to set the condition. `error_handler` needs to implement Sentry-like interface.
1140
1141
 
1141
1142
  # if you ever need to provide mapping:
1142
1143
 
@@ -6,7 +6,7 @@ class Dionysus::Consumer::Config
6
6
  :instrumenter, :event_bus, :soft_delete_strategy, :soft_deleted_at_timestamp_attribute,
7
7
  :synced_created_at_timestamp_attribute, :synced_updated_at_timestamp_attribute, :synced_id_attribute,
8
8
  :synced_data_attribute, :consumer_base_class, :retry_provider, :resolve_synced_data_hash_proc, :sidekiq_queue,
9
- :message_filter
9
+ :message_filters
10
10
 
11
11
  def self.default_sidekiq_queue
12
12
  :dionysus
@@ -94,4 +94,13 @@ class Dionysus::Consumer::Config
94
94
  @message_filter || Dionysus::Utils::DefaultMessageFilter.new(error_handler:
95
95
  Dionysus::Utils::NullErrorHandler)
96
96
  end
97
+
98
+ def message_filter=(val)
99
+ @message_filter = val
100
+ self.message_filters = [val]
101
+ end
102
+
103
+ def message_filters
104
+ @message_filters || Array.wrap(message_filter)
105
+ end
97
106
  end
@@ -27,8 +27,9 @@ class Dionysus::Consumer::ParamsBatchProcessor
27
27
  transformed_data = Dionysus::Consumer::Deserializer.new(data).deserialize
28
28
  end
29
29
 
30
- if ignore_message?(topic: topic, message: message, transformed_data: transformed_data)
31
- notify_about_ignored_message(topic: topic, message: message, transformed_data: transformed_data)
30
+ if (applicable_message_filter = find_applicable_message_filter(topic, message, transformed_data))
31
+ applicable_message_filter.notify_about_ignored_message(topic: topic, message: message,
32
+ transformed_data: transformed_data)
32
33
  next
33
34
  end
34
35
 
@@ -50,8 +51,11 @@ class Dionysus::Consumer::ParamsBatchProcessor
50
51
 
51
52
  private
52
53
 
53
- delegate :message_filter, to: :config
54
- delegate :ignore_message?, :notify_about_ignored_message, to: :message_filter
54
+ delegate :message_filters, to: :config
55
+
56
+ def find_applicable_message_filter(topic, message, transformed_data)
57
+ message_filters.find { |f| f.ignore_message?(topic: topic, message: message, transformed_data: transformed_data) }
58
+ end
55
59
 
56
60
  def instrument(label, options = {}, &block)
57
61
  config.instrumenter.instrument(label, options, &block)
@@ -3,5 +3,5 @@
3
3
  module Dionysus
4
4
  module Version
5
5
  end
6
- VERSION = "0.2.0"
6
+ VERSION = "0.3.0"
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dionysus-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Galanciak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-21 00:00:00.000000000 Z
11
+ date: 2024-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord