Sha256: 5c97ccf8bf4e44ecae16e0063f04784b4d3b18d43b8da3cd3defed86881fd365

Contents?: true

Size: 993 Bytes

Versions: 28

Compression:

Stored size: 993 Bytes

Contents

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)
        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

28 entries across 28 versions & 1 rubygems

Version Path
dynflow-1.3.0 lib/dynflow/dead_letter_silencer.rb
dynflow-1.2.3 lib/dynflow/dead_letter_silencer.rb
dynflow-1.2.2 lib/dynflow/dead_letter_silencer.rb
dynflow-1.2.1 lib/dynflow/dead_letter_silencer.rb
dynflow-1.2.0 lib/dynflow/dead_letter_silencer.rb
dynflow-1.2.0.pre1 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.6 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.5 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.4 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.3 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.2 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.1 lib/dynflow/dead_letter_silencer.rb
dynflow-1.1.0 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.5 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.4 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.3 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.2 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.1 lib/dynflow/dead_letter_silencer.rb
dynflow-1.0.0 lib/dynflow/dead_letter_silencer.rb
dynflow-0.8.37 lib/dynflow/dead_letter_silencer.rb