Class: Fluffle::MiddlewareStack

Inherits:
Object
  • Object
show all
Defined in:
lib/fluffle/middleware_stack.rb

Instance Method Summary collapse

Constructor Details

#initializeMiddlewareStack

Returns a new instance of MiddlewareStack.



3
4
5
# File 'lib/fluffle/middleware_stack.rb', line 3

def initialize
  @stack = []
end

Instance Method Details

#call(callable = nil, &block) ⇒ Object

Calls the stack in FIFO order with the callable (passed as an object receiving ‘#call` or an `&block`) being called last.

For example:

stack.push 1
stack.push 2
stack.call 3

Will be evaluated 1 -> 2 -> 3 -> 2 -> 1.



23
24
25
26
27
28
29
30
31
32
# File 'lib/fluffle/middleware_stack.rb', line 23

def call(callable = nil, &block)
  callable ||= block

  @stack
    .reverse
    .inject(callable) { |previous, middleware|
      ->{ middleware.call(previous) }
    }
    .call
end

#push(middleware) ⇒ Object Also known as: <<



7
8
9
10
# File 'lib/fluffle/middleware_stack.rb', line 7

def push(middleware)
  @stack << middleware
  self
end