class Sequent::Core::Middleware::Chain

Attributes

entries[R]

Public Class Methods

new() click to toggle source
# File lib/sequent/core/middleware/chain.rb, line 9
def initialize
  clear
end

Public Instance Methods

add(middleware) click to toggle source
# File lib/sequent/core/middleware/chain.rb, line 13
def add(middleware)
  @entries.push(middleware)
end
clear() click to toggle source
# File lib/sequent/core/middleware/chain.rb, line 17
def clear
  @entries = []
end
invoke(*args, &invoker) click to toggle source
# File lib/sequent/core/middleware/chain.rb, line 21
def invoke(*args, &invoker)
  chain = @entries.dup

  traverse_chain = -> do
    if chain.empty?
      invoker.call
    else
      chain.shift.call(*args, &traverse_chain)
    end
  end

  traverse_chain.call
end