(changesHandler, opts)
| 4121 | } |
| 4122 | |
| 4123 | function filter(changesHandler, opts) { |
| 4124 | var callback = opts.complete; |
| 4125 | if (opts.filter === '_view') { |
| 4126 | if (!opts.view || typeof opts.view !== 'string') { |
| 4127 | var err = createError(BAD_REQUEST, |
| 4128 | '`view` filter parameter not found or invalid.'); |
| 4129 | return callback(err); |
| 4130 | } |
| 4131 | // fetch a view from a design doc, make it behave like a filter |
| 4132 | var viewName = parseDesignDocFunctionName(opts.view); |
| 4133 | changesHandler.db.get('_design/' + viewName[0], function (err, ddoc) { |
| 4134 | /* istanbul ignore if */ |
| 4135 | if (changesHandler.isCancelled) { |
| 4136 | return callback(null, {status: 'cancelled'}); |
| 4137 | } |
| 4138 | /* istanbul ignore next */ |
| 4139 | if (err) { |
| 4140 | return callback(generateErrorFromResponse(err)); |
| 4141 | } |
| 4142 | var mapFun = ddoc && ddoc.views && ddoc.views[viewName[1]] && |
| 4143 | ddoc.views[viewName[1]].map; |
| 4144 | if (!mapFun) { |
| 4145 | return callback(createError(MISSING_DOC, |
| 4146 | (ddoc.views ? 'missing json key: ' + viewName[1] : |
| 4147 | 'missing json key: views'))); |
| 4148 | } |
| 4149 | opts.filter = evalView(mapFun); |
| 4150 | changesHandler.doChanges(opts); |
| 4151 | }); |
| 4152 | } else if (opts.selector) { |
| 4153 | opts.filter = function (doc) { |
| 4154 | return matchesSelector(doc, opts.selector); |
| 4155 | }; |
| 4156 | changesHandler.doChanges(opts); |
| 4157 | } else { |
| 4158 | // fetch a filter from a design doc |
| 4159 | var filterName = parseDesignDocFunctionName(opts.filter); |
| 4160 | changesHandler.db.get('_design/' + filterName[0], function (err, ddoc) { |
| 4161 | /* istanbul ignore if */ |
| 4162 | if (changesHandler.isCancelled) { |
| 4163 | return callback(null, {status: 'cancelled'}); |
| 4164 | } |
| 4165 | /* istanbul ignore next */ |
| 4166 | if (err) { |
| 4167 | return callback(generateErrorFromResponse(err)); |
| 4168 | } |
| 4169 | var filterFun = ddoc && ddoc.filters && ddoc.filters[filterName[1]]; |
| 4170 | if (!filterFun) { |
| 4171 | return callback(createError(MISSING_DOC, |
| 4172 | ((ddoc && ddoc.filters) ? 'missing json key: ' + filterName[1] |
| 4173 | : 'missing json key: filters'))); |
| 4174 | } |
| 4175 | opts.filter = evalFilter(filterFun); |
| 4176 | changesHandler.doChanges(opts); |
| 4177 | }); |
| 4178 | } |
| 4179 | } |
| 4180 |
no test coverage detected
searching dependent graphs…