Method: Upperkut::Middleware::Chain#invoke

Defined in:
lib/upperkut/middleware.rb

#invoke(*args) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/upperkut/middleware.rb', line 20

def invoke(*args)
  chain = @items.map(&:new)

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

  traverse_chain.call
end