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