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

Function filter

lib/index.js:3963–4019  ·  view source on GitHub ↗
(changesHandler, opts)

Source from the content-addressed store, hash-verified

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

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…