MCPcopy
hub / github.com/apache/pouchdb / filter

Function filter

lib/index.es.js:3958–4014  ·  view source on GitHub ↗
(changesHandler, opts)

Source from the content-addressed store, hash-verified

3956}
3957
3958function 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

Callers 2

tryFilterFunction · 0.70
onGetWinningDocFunction · 0.70

Calls 8

createErrorFunction · 0.70
evalViewFunction · 0.70
matchesSelectorFunction · 0.70
evalFilterFunction · 0.70
getMethod · 0.45
doChangesMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…