UNPKG

1.68 kBtext/coffeescriptView Raw
1LinkedQueue = require "../collections/linkedQueue"
2Response = require "./response"
3_ = require "underscore"
4
5module.exports = class extends LinkedQueue
6
7 ###
8 constructor
9 ###
10
11 constructor: (@message, @first, @director) ->
12 @router = director.router
13 @from = message.from
14 super first
15
16 # ack callback
17 @response = new Response @
18
19 # dump the data into the ack
20 @response.reader().dump () =>
21 @message.callback.apply @message, arguments
22 , @message.headers
23
24 ###
25 ###
26
27 start:() -> @next()
28
29 ###
30 returns param, or query data
31 ###
32
33 data: (name) ->
34
35 if arguments.length == 0
36 return _.extend {}, @current.params, @message.query
37 else if arguments.length > 1
38 obj = {}
39 for name in arguments
40 obj[name] = @data(name)
41 obj
42
43 return @current.params[name] || @message.query[name];
44
45 ###
46 flattens all param data into one object
47 ###
48
49 flattenData: (reset) ->
50 return @_allData if @_allData and not reset
51
52 cur = @current
53 allData = _.defaults(cur.params, @message.query)
54
55 cur = cur.getNextSibling()
56
57 while cur
58 _.defaults(allData, cur.params)
59 cur = cur.getNextSibling()
60
61 return @_allData = allData
62
63 ###
64 ###
65
66 _onNext: (middleware, args) ->
67
68 if args.length
69
70 ## error? Do not continue
71 if args[0]
72 return _onError args[0]
73 else
74 _onNextData args[1]
75
76
77 @message.params = middleware.params
78
79
80 try
81 ## if we're not at the end, then cache incomming data.
82 @message.cache @hasNext
83
84 @_next middleware, args
85
86 catch e
87 @response.error e
88
89
90 ###
91 ###
92
93 _next: (middleware) -> middleware.listener @
94
95 ###
96 ###
97
98 _onError: (error) -> #override me
99
100
101 ###
102 ###
103
104 _onNextData: () -> #override me
105
106
107