class Modware::Stack::Executor

Public Class Methods

new(middleware_mods) click to toggle source
# File lib/modware/stack.rb, line 26
def initialize(middleware_mods)
  prev = nil
  @middlewares = middleware_mods.map { |mod|
    Middleware.new(self, mod).tap { |middleware|
      prev._modware_next = middleware if prev
      prev = middleware
    }
  }
end

Public Instance Methods

call_implementation(env, base_implementation) click to toggle source
# File lib/modware/stack.rb, line 50
def call_implementation(env, base_implementation)
  if middleware = @middlewares.select { |mw| mw.respond_to?(:implement) }.last
    middleware.implement(env)
  elsif base_implementation
    base_implementation.call env
  else
    raise StackError, "No base implementation nor middleware implementation in stack"
  end
end
execute(env, base_implementation) click to toggle source
# File lib/modware/stack.rb, line 36
def execute(env, base_implementation)
  return call_implementation(env, base_implementation) if @middlewares.empty?

  @middlewares.each do |middleware|
    middleware.before env if middleware.respond_to? :before
  end

  @middlewares.first._modware_call(env, base_implementation)

  @middlewares.each do |middleware|
    middleware.after env if middleware.respond_to? :after
  end
end