Class: Modware::Stack::Executor
- Inherits:
-
Object
- Object
- Modware::Stack::Executor
- Defined in:
- lib/modware/stack.rb
Instance Method Summary collapse
- #call_implementation(env, base_implementation) ⇒ Object
- #execute(env, base_implementation) ⇒ Object
-
#initialize(middleware_mods) ⇒ Executor
constructor
A new instance of Executor.
Constructor Details
#initialize(middleware_mods) ⇒ Executor
Returns a new instance of Executor.
31 32 33 34 35 36 37 38 39 |
# File 'lib/modware/stack.rb', line 31 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 |
Instance Method Details
#call_implementation(env, base_implementation) ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/modware/stack.rb', line 55 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) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/modware/stack.rb', line 41 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 |