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



27
28
29
30
31
32
33
34
35
# File 'lib/modware/stack.rb', line 27

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



51
52
53
54
55
56
57
58
59
# File 'lib/modware/stack.rb', line 51

def call_implementation(env, base_implementation)
  if middleware = @middlewares.select(&it.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



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/modware/stack.rb', line 37

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