Sha256: 2809217891e2ce620b7d64848053de495d7e1305a5aef6fac4664023276e63f2

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

module ZK
  # the subscription object that is passed back from subscribing
  # to events.
  # @see ZK::Client::Base#register
  class EventHandlerSubscription
    # the event handler associated with this subscription
    # @return [EventHandler]
    attr_accessor :event_handler

    # the path this subscription is for
    # @return [String]
    attr_accessor :path
    
    # the block associated with the path
    # @return [Proc]
    attr_accessor :callback

    # an array of what kinds of events this handler is interested in receiving
    #
    # @return [Set] containing any combination of :create, :change, :delete,
    #   or :children
    #
    # @private
    attr_accessor :interests

    ALL_EVENTS    = [:created, :deleted, :changed, :child].freeze unless defined?(ALL_EVENTS)
    ALL_EVENT_SET = Set.new(ALL_EVENTS).freeze                    unless defined?(ALL_EVENT_SET)

    # @private
    def initialize(event_handler, path, callback, interests)
      @event_handler, @path, @callback = event_handler, path, callback
      @interests = prep_interests(interests)
    end

    # unsubscribe from the path or state you were watching
    # @see ZK::Client::Base#register
    def unsubscribe
      @event_handler.unregister(self)
    end
    alias :unregister :unsubscribe

    # @private
    def call(event)
      callback.call(event)
    end

    private
      def prep_interests(a)
        return ALL_EVENT_SET if a.nil?

        rval = 
          case a
          when Array
            Set.new(a)
          when Symbol
            Set.new([a])
          else
            raise ArgumentError, "Don't know how to handle interests: #{a.inspect}" 
          end

        rval.tap do |rv|
          invalid = (rv - ALL_EVENT_SET)
          raise ArgumentError, "Invalid event name(s) #{invalid.to_a.inspect} given" unless invalid.empty?
        end
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
zk-1.0.0 lib/zk/event_handler_subscription.rb
zk-1.0.0.rc.1 lib/zk/event_handler_subscription.rb