Method: Circuitry::Middleware::Chain#invoke

Defined in:
lib/circuitry/middleware/chain.rb

#invoke(*args) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/circuitry/middleware/chain.rb', line 58

def invoke(*args)
  chain = build.dup

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

  traverse_chain.call
end