Method: Funktor::MiddlewareChain#invoke

Defined in:
lib/funktor/middleware_chain.rb

#invoke(*args) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/funktor/middleware_chain.rb', line 35

def invoke(*args)
  return yield if @entries.empty?

  middlewares = entries.map(&:instantiate)
  traverse_chain = proc do
    if middlewares.empty?
      yield
    else
      middlewares.shift.call(*args, &traverse_chain)
    end
  end
  traverse_chain.call
end