Class: Modware::Stack::Executor

Inherits:
Object
  • Object
show all
Defined in:
lib/modware/stack.rb

Instance Method Summary collapse

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