Example #1
0
  if (builtIn) {
    return builtIn;
  } else {
    return evalFunction(reduceFunString);
  }
}

function ddocValidator(ddoc, viewName) {
  var fun = ddoc.views && ddoc.views[viewName];
  if (typeof fun.map !== 'string') {
    throw new NotFoundError('ddoc ' + ddoc._id + ' has no string view named ' +
      viewName + ', instead found object of type: ' + typeof fun.map);
  }
}

var localDocName = 'mrviews';
var abstract = createAbstractMapReduce(localDocName, mapper, reducer, ddocValidator);

function query(fun, opts, callback) {
  return abstract.query.call(this, fun, opts, callback);
}

function viewCleanup(callback) {
  return abstract.viewCleanup.call(this, callback);
}

export default {
  query: query,
  viewCleanup: viewCleanup
};
    if (isSingle) {
      return createDeepSingleMapper(fields[0], emit);
    } else { // multi
      return createDeepMultiMapper(fields, emit);
    }
  }
}

var abstractMapper = abstractMapReduce({
  name: 'indexes',
  mapper: function (mapFunDef, emit) {
    // mapFunDef is a list of fields

    var fields = Object.keys(mapFunDef.fields);

    return createMapper(fields, emit);
  },
  reducer: function (/*reduceFunDef*/) {
    throw new Error('reduce not supported');
  },
  ddocValidator: function (ddoc, viewName) {
    var view = ddoc.views[viewName];
    if (!view.map || !view.map.fields) {
      throw new Error('ddoc ' + ddoc._id +' with view ' + viewName +
      ' doesn\'t have map.fields defined. ' +
      'maybe it wasn\'t created by this plugin?');
    }
  }
});

module.exports = abstractMapper;