1 | LinkedQueue = require "../collections/linkedQueue"
|
2 | Response = require "./response"
|
3 | _ = require "underscore"
|
4 |
|
5 | module.exports = class extends LinkedQueue
|
6 |
|
7 | |
8 |
|
9 |
|
10 |
|
11 | constructor: (@message, @first, @director) ->
|
12 | @router = director.router
|
13 | @from = message.from
|
14 | super first
|
15 |
|
16 |
|
17 | @response = new Response @
|
18 |
|
19 |
|
20 | @response.reader().dump () =>
|
21 | @message.callback.apply @message, arguments
|
22 | , @message.headers
|
23 |
|
24 | |
25 |
|
26 |
|
27 | start:() -> @next()
|
28 |
|
29 | |
30 |
|
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 |
|
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 |
|
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 |
|
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) ->
|
99 |
|
100 |
|
101 | |
102 |
|
103 |
|
104 | _onNextData: () ->
|
105 |
|
106 |
|
107 |
|