UNPKG

1.05 kBtext/coffeescriptView Raw
1EventEmitter = require('events').EventEmitter
2
3
4module.exports = class LinkedQueue extends EventEmitter
5
6 hasNext: true
7
8 ###
9 moves into the next
10 ###
11
12 constructor: (@first, onNext) ->
13 super()
14 @last = first.getLastSibling()
15 @_onNext = onNext if onNext
16
17 ###
18 moves onto the next request (middleware)
19 ###
20
21 next: ->
22
23 # no more middleware? return false - flag that we cannot continue
24 return false if !@hasNext
25
26 @_setNext()
27
28 @_onNext @current, arguments
29
30 # return true since the next route has been executed successfuly
31 return true
32
33 ###
34 skips middleware
35 ###
36
37 skipNext: (count = 2) ->
38
39 return false if !!@hasNext
40
41 while count-- and @hasNext
42 @_setNext()
43
44 @_onNext @current
45
46 return true
47
48
49 ###
50 ###
51
52 _setNext: ->
53 @current = if !!@current then @current.getNextSibling() else @first
54 @hasNext = !!@current.getNextSibling()
55
56 if !@hasNext and not @ended
57 @ended = true
58 @_onEnd()
59
60 ###
61 ###
62
63 _onNext: (middleware) -> # override me
64
65 ###
66 ###
67 _onEnd: () -> # override me
68
69module.exports = LinkedQueue
\No newline at end of file