Class: Wayfarer::Middleware::Chain

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/wayfarer/middleware/chain.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(middlewares) ⇒ Chain

Returns a new instance of Chain.



10
11
12
# File 'lib/wayfarer/middleware/chain.rb', line 10

def initialize(middlewares)
  @middlewares = middlewares
end

Instance Attribute Details

#middlewaresObject (readonly)

Returns the value of attribute middlewares.



8
9
10
# File 'lib/wayfarer/middleware/chain.rb', line 8

def middlewares
  @middlewares
end

Class Method Details

.emptyObject



14
15
16
# File 'lib/wayfarer/middleware/chain.rb', line 14

def self.empty
  new([])
end

Instance Method Details

#call(task) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/wayfarer/middleware/chain.rb', line 20

def call(task)
  traverse = lambda do |i|
    if middlewares[i]
      middlewares[i].call(task) { traverse.call(i + 1) }
    elsif block_given?
      yield
    end
  end

  traverse.call(0)
end