offshore
Version:
An ORM for Node.js
61 lines (48 loc) • 1.52 kB
JavaScript
/**
* Module Dependencies
*/
var _ = require('lodash');
var usageError = require('../../utils/usageError');
var utils = require('../../utils/helpers');
var normalize = require('../../utils/normalize');
var Deferred = require('../deferred');
/**
* Count of Records
*
* @param {Object} criteria
* @param {Object} options
* @param {Function} callback
* @return Deferred object if no callback
*/
module.exports = function(criteria, options, cb, metaContainer) {
var usage = utils.capitalize(this.identity) + '.count([criteria],[options],callback)';
if (typeof criteria === 'function') {
cb = criteria;
criteria = null;
options = null;
}
if (typeof options === 'function') {
cb = options;
options = null;
}
// Normalize criteria and fold in options
criteria = normalize.criteria(criteria);
// Return Deferred or pass to adapter
if (typeof cb !== 'function') {
return new Deferred(this, this.count, criteria);
}
// If there was something defined in the criteria that would return no results, don't even
// run the query and just return 0
if (criteria === false) {
return cb(null, 0);
}
if (_.isObject(options) && _.isObject(criteria)) {
criteria = _.extend({}, criteria, options);
}
if (_.isFunction(criteria) || _.isFunction(options)) {
return usageError('Invalid options specified!', usage, cb);
}
// Transform Search Criteria
criteria = this._transformer.serialize(criteria);
this.adapter.count(criteria, cb, metaContainer);
};