1 | View dispatcher
|
2 | ---------------
|
3 |
|
4 | view_as_stream = (db_uri,app,view,key) ->
|
5 |
|
6 | The `key` field (in the `SUBSCRIBE` message) is used to determine what type of query is performed:
|
7 |
|
8 | switch
|
9 |
|
10 | - Map (JSON object) is used to provide one-time queries. These do not support `changes` streaming.
|
11 |
|
12 | when Immutable.Map.isMap key
|
13 |
|
14 | For view queries we need to keep the original `key` field (for routing purposes).
|
15 |
|
16 | switch
|
17 |
|
18 | For `group` queries we send the view's `key` in the `value` field of the message.
|
19 |
|
20 | when key.has 'level'
|
21 | group_as_stream db_uri,app,view,
|
22 | key.get('level'),
|
23 | key.get('min'),
|
24 | key.get('max')
|
25 | .tap (row) -> [ row.key, row.value ] = [ key, row.key ]
|
26 |
|
27 | For count queries we set the `_key` field to the key generated by the view (the `value` field contains the view's `value`, i.e. the `count`).
|
28 |
|
29 | when key.has 'count'
|
30 | count_as_stream db_uri,app,view,
|
31 | key.get('count'),
|
32 | key.get('detail')
|
33 | .tap (row) ->
|
34 | if row.key?
|
35 | [ row.key, row._key ] = [ key, row.key ]
|
36 | else
|
37 | row.key = key
|
38 |
|
39 | For range queries we set the `_key` field to the key generated by the view (the `value` field contains the view's `value`).
|
40 |
|
41 | when key.has('min') or key.has('max')
|
42 | range_as_stream db_uri,app,view,
|
43 | key.get('min'),
|
44 | key.get('max')
|
45 | .tap (row) -> [ row.key, row._key ] = [ key, row.key ]
|
46 |
|
47 | else
|
48 | most.empty()
|
49 |
|
50 | - string, List, etc., generate regular view queries (and are subject to `changes` streaming, see `./changes-view`).
|
51 |
|
52 | else
|
53 | query_as_stream db_uri,app,view,key
|
54 |
|
55 | module.exports = view_as_stream
|
56 | query_as_stream = require './query'
|
57 | count_as_stream = require './count'
|
58 | range_as_stream = require './range'
|
59 | group_as_stream = require './group'
|
60 | most = require 'most'
|
61 | Immutable = require 'immutable'
|