Sha256: 85933a60be14b6d2a452bbff5da253055cab4aa8c808a17ec2cbd22c024a4d4f

Contents?: true

Size: 1.19 KB

Versions: 9

Compression:

Stored size: 1.19 KB

Contents

require "wisper"

# The Wisper implementation of temporary listeners clears all listeners at the end of the block,
# rather the just the ones that were supplied in block. This implementation just clears the specified ones,
# allowing multiple temporary overlapping listeners.

module PactBroker
  module Events
    class TemporaryListeners < Wisper::TemporaryListeners
      def subscribe(*listeners)
        options = listeners.last.is_a?(Hash) ? listeners.pop : {}
        begin
          listeners.each { |listener| registrations << Wisper::ObjectRegistration.new(listener, options) }
          yield
        ensure
          unsubscribe(listeners)
        end
        self
      end

      def unsubscribe(listeners)
        registrations.delete_if do |registration|
          listeners.include?(registration.listener)
        end
      end
    end
  end
end

module PactBroker
  module Events
    extend self

    def subscribe(*args)
      if block_given?
        result = nil
        TemporaryListeners.subscribe(*args) do
          result = yield
        end
        result
      else
        Wisper.subscribe(*args)
      end
    end

    def unsubscribe(*args)
      Wisper.unsubscribe(*args)
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
pact_broker-2.114.0 lib/pact_broker/events/subscriber.rb
pact_broker-2.113.2 lib/pact_broker/events/subscriber.rb
pact_broker-2.113.1 lib/pact_broker/events/subscriber.rb
pact_broker-2.113.0 lib/pact_broker/events/subscriber.rb
pact_broker-2.112.0 lib/pact_broker/events/subscriber.rb
pact_broker-2.111.0 lib/pact_broker/events/subscriber.rb
pact_broker-2.109.1 lib/pact_broker/events/subscriber.rb
pact_broker-2.109.0 lib/pact_broker/events/subscriber.rb
pact_broker-2.108.0 lib/pact_broker/events/subscriber.rb