Module: Faye::Extensible

Includes:
Logging
Included in:
Client, Server
Defined in:
lib/faye/protocol/extensible.rb

Constant Summary

Constants included from Logging

Logging::DEFAULT_LOG_LEVEL, Logging::LOG_LEVELS

Instance Attribute Summary

Attributes included from Logging

#log_level

Instance Method Summary collapse

Methods included from Logging

#log

Instance Method Details

#add_extension(extension) ⇒ Object



5
6
7
8
9
# File 'lib/faye/protocol/extensible.rb', line 5

def add_extension(extension)
  @extensions ||= []
  @extensions << extension
  extension.added(self) if extension.respond_to?(:added)
end

#pipe_through_extensions(stage, message, &callback) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/faye/protocol/extensible.rb', line 20

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

#remove_extension(extension) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/faye/protocol/extensible.rb', line 11

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