(changesHandler, opts)
| 3956 | } |
| 3957 | |
| 3958 | function filter(changesHandler, opts) { |
| 3959 | var callback = opts.complete; |
| 3960 | if (opts.filter === '_view') { |
| 3961 | if (!opts.view || typeof opts.view !== 'string') { |
| 3962 | var err = createError(BAD_REQUEST, |
| 3963 | '`view` filter parameter not found or invalid.'); |
| 3964 | return callback(err); |
| 3965 | } |
| 3966 | // fetch a view from a design doc, make it behave like a filter |
| 3967 | var viewName = parseDesignDocFunctionName(opts.view); |
| 3968 | changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) { |
| 3969 | /* istanbul ignore if */ |
| 3970 | if (changesHandler.isCancelled) { |
| 3971 | return callback(null, {status: 'cancelled'}); |
| 3972 | } |
| 3973 | /* istanbul ignore next */ |
| 3974 | if (err) { |
| 3975 | return callback(generateErrorFromResponse(err)); |
| 3976 | } |
| 3977 | var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] && |
| 3978 | ddoc.views[viewName[1]].map; |
| 3979 | if (!mapFun) { |
| 3980 | return callback(createError(MISSING_DOC, |
| 3981 | (ddoc.views ? 'missing json key: ' + viewName[1] : |
| 3982 | 'missing json key: views'))); |
| 3983 | } |
| 3984 | opts.filter = evalView(mapFun); |
| 3985 | changesHandler.doChanges(opts); |
| 3986 | }); |
| 3987 | } else if (opts.selector) { |
| 3988 | opts.filter = function (doc) { |
| 3989 | return matchesSelector(doc, opts.selector); |
| 3990 | }; |
| 3991 | changesHandler.doChanges(opts); |
| 3992 | } else { |
| 3993 | // fetch a filter from a design doc |
| 3994 | var filterName = parseDesignDocFunctionName(opts.filter); |
| 3995 | changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) { |
| 3996 | /* istanbul ignore if */ |
| 3997 | if (changesHandler.isCancelled) { |
| 3998 | return callback(null, {status: 'cancelled'}); |
| 3999 | } |
| 4000 | /* istanbul ignore next */ |
| 4001 | if (err) { |
| 4002 | return callback(generateErrorFromResponse(err)); |
| 4003 | } |
| 4004 | var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]]; |
| 4005 | if (!filterFun) { |
| 4006 | return callback(createError(MISSING_DOC, |
| 4007 | ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1] |
| 4008 | : 'missing json key: filters'))); |
| 4009 | } |
| 4010 | opts.filter = evalFilter(filterFun); |
| 4011 | changesHandler.doChanges(opts); |
| 4012 | }); |
| 4013 | } |
| 4014 | } |
| 4015 |
no test coverage detected
searching dependent graphs…