Sha256: 9a446cdcc86cde4b024bffb0a702d1d9bba6ccc9c17d195de04a497ad929ac53

Contents?: true

Size: 1.38 KB

Versions: 111

Compression:

Stored size: 1.38 KB

Contents

# Distributes messages to listeners

module RSMP
  module Notifier
    attr_reader :listeners

    include Inspect

    def inspect
      "#<#{self.class.name}:#{self.object_id}, #{inspector(:@listeners)}>"
    end

    def initialize_distributor
      @listeners = []
      @defer_notify = false
      @notify_queue = []
    end

    def clear_deferred_notify &block
      @notify_queue = []
    end

    def deferred_notify &block
      was, @defer_notify = @defer_notify, true
      yield
      dequeue_notify
    ensure
      @defer_notify = was
      @notify_queue = []
    end

    def dequeue_notify
      @notify_queue.each { |message| notify_without_defer message }
    ensure
      @notify_queue = []
    end

    def add_listener listener
      raise ArgumentError unless listener
      @listeners << listener unless @listeners.include? listener
    end

    def remove_listener listener
      raise ArgumentError unless listener
      @listeners.delete listener
    end

    def notify message
      raise ArgumentError unless message
      if @defer_notify
        @notify_queue << message
      else
        notify_without_defer message
      end
    end

    def notify_without_defer message
      @listeners.each { |listener| listener.notify message }
    end

    def distribute_error error, options={}
      @listeners.each { |listener| listener.notify_error error, options }
    end
  end
end

Version data entries

111 entries across 111 versions & 1 rubygems

Version Path
rsmp-0.29.0 lib/rsmp/collect/notifier.rb
rsmp-0.28.1 lib/rsmp/collect/notifier.rb
rsmp-0.28.0 lib/rsmp/collect/notifier.rb
rsmp-0.27.1 lib/rsmp/collect/notifier.rb
rsmp-0.27.0 lib/rsmp/collect/notifier.rb
rsmp-0.26.1 lib/rsmp/collect/notifier.rb
rsmp-0.26.0 lib/rsmp/collect/notifier.rb
rsmp-0.25.3 lib/rsmp/collect/notifier.rb
rsmp-0.25.2 lib/rsmp/collect/notifier.rb
rsmp-0.25.1 lib/rsmp/collect/notifier.rb
rsmp-0.25.0 lib/rsmp/collect/notifier.rb
rsmp-0.24.0 lib/rsmp/collect/notifier.rb
rsmp-0.23.1 lib/rsmp/collect/notifier.rb
rsmp-0.23.0 lib/rsmp/collect/notifier.rb
rsmp-0.22.0 lib/rsmp/collect/notifier.rb
rsmp-0.21.0 lib/rsmp/collect/notifier.rb
rsmp-0.20.7 lib/rsmp/collect/notifier.rb
rsmp-0.20.6 lib/rsmp/collect/notifier.rb
rsmp-0.20.4 lib/rsmp/collect/notifier.rb
rsmp-0.20.3 lib/rsmp/collect/notifier.rb