Sha256: 454aa4c04ef9471d2b3b769ab3e95ad028fd52094adabe240084778cdec4a544
Contents?: true
Size: 1.07 KB
Versions: 2
Compression:
Stored size: 1.07 KB
Contents
# frozen_string_literal: true module Dynflow class DeadLetterSilencer < Concurrent::Actor::DefaultDeadLetterHandler def initialize(matchers) @matchers = Type! matchers, Array end def should_drop?(dead_letter) @matchers.any? { |matcher| matcher.match? dead_letter } end def on_message(dead_letter) super unless should_drop?(dead_letter) end private class Matcher Any = Algebrick.atom def initialize(from, message = Any, to = Any) @from = from @message = message @to = to end def match?(dead_letter) return unless dead_letter.sender.respond_to?(:actor_class) evaluate(dead_letter.sender.actor_class, @from) && evaluate(dead_letter.message, @message) && evaluate(dead_letter.address.actor_class, @to) end private def evaluate(thing, condition) case condition when Any true when Proc condition.call(thing) else condition == thing end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dynflow-1.9.0 | lib/dynflow/dead_letter_silencer.rb |
dynflow-1.8.3 | lib/dynflow/dead_letter_silencer.rb |