Class: NatsWork::Server::MiddlewareChain

Inherits:
Object
  • Object
show all
Defined in:
lib/natswork/middleware_chain.rb

Instance Method Summary collapse

Constructor Details

#initializeMiddlewareChain

Returns a new instance of MiddlewareChain.



6
7
8
# File 'lib/natswork/middleware_chain.rb', line 6

def initialize
  @entries = []
end

Instance Method Details

#add(middleware, *args) ⇒ Object



10
11
12
13
# File 'lib/natswork/middleware_chain.rb', line 10

def add(middleware, *args)
  @entries << [middleware, args]
  self
end

#clearObject



31
32
33
# File 'lib/natswork/middleware_chain.rb', line 31

def clear
  @entries.clear
end

#empty?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/natswork/middleware_chain.rb', line 35

def empty?
  @entries.empty?
end

#invoke(*args) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/natswork/middleware_chain.rb', line 15

def invoke(*args)
  chain = @entries.map do |middleware, options|
    middleware.new(*options)
  end

  traverse_chain = lambda do
    if chain.empty?
      yield if block_given?
    else
      chain.shift.call(*args, &traverse_chain)
    end
  end

  traverse_chain.call
end