Sha256: 0fdbc1c6b68776842a006698f1a2efda6436b2074e0dc101468078453d53178b

Contents?: true

Size: 1.06 KB

Versions: 11

Compression:

Stored size: 1.06 KB

Contents

module Faye
  module Extensible
    include Logging
    
    def add_extension(extension)
      @extensions ||= []
      @extensions << extension
      extension.added(self) if extension.respond_to?(:added)
    end
    
    def remove_extension(extension)
      return unless @extensions
      @extensions.delete_if do |ext|
        next false unless ext == extension
        extension.removed(self) if extension.respond_to?(:removed)
        true
      end
    end
    
    def pipe_through_extensions(stage, message, &callback)
      debug 'Passing through ? extensions: ?', stage, message

      return callback.call(message) unless @extensions
      extensions = @extensions.dup
      
      pipe = lambda do |message|
        next callback.call(message) unless message
        
        extension = extensions.shift
        next callback.call(message) unless extension
        
        if extension.respond_to?(stage)
          extension.__send__(stage, message, pipe)
        else
          pipe.call(message)
        end
      end
      pipe.call(message)
    end
    
  end
end

Version data entries

11 entries across 11 versions & 3 rubygems

Version Path
faye-0.8.8 lib/faye/protocol/extensible.rb
faye-0.8.6 lib/faye/protocol/extensible.rb
faye-0.8.5 lib/faye/protocol/extensible.rb
faye-0.8.4 lib/faye/protocol/extensible.rb
faye-0.8.3 lib/faye/protocol/extensible.rb
faye-0.8.2 lib/faye/protocol/extensible.rb
_bushido-faye-0.8.2 lib/faye/protocol/extensible.rb
_bushido-faye-0.8.1 lib/faye/protocol/extensible.rb
bushido-faye-0.8.1 lib/faye/protocol/extensible.rb
faye-0.8.1 lib/faye/protocol/extensible.rb
faye-0.8.0 lib/faye/protocol/extensible.rb