UNPKG

2.07 kBMarkdownView Raw
1View dispatcher
2---------------
3
4 view_as_stream = (db_uri,app,view,key) ->
5
6The `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
14For view queries we need to keep the original `key` field (for routing purposes).
15
16 switch
17
18For `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
27For 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
39For 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 `most-couchdb/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'