Socket
Socket
Sign inDemoInstall

mongoose

Package Overview
Dependencies
Maintainers
0
Versions
883
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mongoose - npm Package Compare versions

Comparing version 1.0.0 to 1.0.1

lib-cov/mongoose/schema/mixed.js

246

lib-cov/mongoose/connection.js

@@ -17,3 +17,2 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/connection.js'][70] = 0;
_$jscoverage['mongoose/connection.js'][73] = 0;
_$jscoverage['mongoose/connection.js'][74] = 0;

@@ -24,72 +23,72 @@ _$jscoverage['mongoose/connection.js'][75] = 0;

_$jscoverage['mongoose/connection.js'][78] = 0;
_$jscoverage['mongoose/connection.js'][80] = 0;
_$jscoverage['mongoose/connection.js'][79] = 0;
_$jscoverage['mongoose/connection.js'][81] = 0;
_$jscoverage['mongoose/connection.js'][85] = 0;
_$jscoverage['mongoose/connection.js'][82] = 0;
_$jscoverage['mongoose/connection.js'][86] = 0;
_$jscoverage['mongoose/connection.js'][87] = 0;
_$jscoverage['mongoose/connection.js'][88] = 0;
_$jscoverage['mongoose/connection.js'][92] = 0;
_$jscoverage['mongoose/connection.js'][89] = 0;
_$jscoverage['mongoose/connection.js'][93] = 0;
_$jscoverage['mongoose/connection.js'][94] = 0;
_$jscoverage['mongoose/connection.js'][95] = 0;
_$jscoverage['mongoose/connection.js'][97] = 0;
_$jscoverage['mongoose/connection.js'][99] = 0;
_$jscoverage['mongoose/connection.js'][96] = 0;
_$jscoverage['mongoose/connection.js'][98] = 0;
_$jscoverage['mongoose/connection.js'][100] = 0;
_$jscoverage['mongoose/connection.js'][101] = 0;
_$jscoverage['mongoose/connection.js'][102] = 0;
_$jscoverage['mongoose/connection.js'][105] = 0;
_$jscoverage['mongoose/connection.js'][103] = 0;
_$jscoverage['mongoose/connection.js'][106] = 0;
_$jscoverage['mongoose/connection.js'][107] = 0;
_$jscoverage['mongoose/connection.js'][108] = 0;
_$jscoverage['mongoose/connection.js'][111] = 0;
_$jscoverage['mongoose/connection.js'][109] = 0;
_$jscoverage['mongoose/connection.js'][112] = 0;
_$jscoverage['mongoose/connection.js'][113] = 0;
_$jscoverage['mongoose/connection.js'][116] = 0;
_$jscoverage['mongoose/connection.js'][114] = 0;
_$jscoverage['mongoose/connection.js'][117] = 0;
_$jscoverage['mongoose/connection.js'][120] = 0;
_$jscoverage['mongoose/connection.js'][118] = 0;
_$jscoverage['mongoose/connection.js'][121] = 0;
_$jscoverage['mongoose/connection.js'][122] = 0;
_$jscoverage['mongoose/connection.js'][124] = 0;
_$jscoverage['mongoose/connection.js'][123] = 0;
_$jscoverage['mongoose/connection.js'][125] = 0;
_$jscoverage['mongoose/connection.js'][129] = 0;
_$jscoverage['mongoose/connection.js'][138] = 0;
_$jscoverage['mongoose/connection.js'][126] = 0;
_$jscoverage['mongoose/connection.js'][130] = 0;
_$jscoverage['mongoose/connection.js'][139] = 0;
_$jscoverage['mongoose/connection.js'][140] = 0;
_$jscoverage['mongoose/connection.js'][151] = 0;
_$jscoverage['mongoose/connection.js'][141] = 0;
_$jscoverage['mongoose/connection.js'][152] = 0;
_$jscoverage['mongoose/connection.js'][154] = 0;
_$jscoverage['mongoose/connection.js'][156] = 0;
_$jscoverage['mongoose/connection.js'][153] = 0;
_$jscoverage['mongoose/connection.js'][155] = 0;
_$jscoverage['mongoose/connection.js'][157] = 0;
_$jscoverage['mongoose/connection.js'][160] = 0;
_$jscoverage['mongoose/connection.js'][158] = 0;
_$jscoverage['mongoose/connection.js'][161] = 0;
_$jscoverage['mongoose/connection.js'][162] = 0;
_$jscoverage['mongoose/connection.js'][163] = 0;
_$jscoverage['mongoose/connection.js'][165] = 0;
_$jscoverage['mongoose/connection.js'][164] = 0;
_$jscoverage['mongoose/connection.js'][166] = 0;
_$jscoverage['mongoose/connection.js'][169] = 0;
_$jscoverage['mongoose/connection.js'][172] = 0;
_$jscoverage['mongoose/connection.js'][167] = 0;
_$jscoverage['mongoose/connection.js'][170] = 0;
_$jscoverage['mongoose/connection.js'][173] = 0;
_$jscoverage['mongoose/connection.js'][175] = 0;
_$jscoverage['mongoose/connection.js'][178] = 0;
_$jscoverage['mongoose/connection.js'][174] = 0;
_$jscoverage['mongoose/connection.js'][176] = 0;
_$jscoverage['mongoose/connection.js'][179] = 0;
_$jscoverage['mongoose/connection.js'][181] = 0;
_$jscoverage['mongoose/connection.js'][184] = 0;
_$jscoverage['mongoose/connection.js'][193] = 0;
_$jscoverage['mongoose/connection.js'][180] = 0;
_$jscoverage['mongoose/connection.js'][182] = 0;
_$jscoverage['mongoose/connection.js'][185] = 0;
_$jscoverage['mongoose/connection.js'][194] = 0;
_$jscoverage['mongoose/connection.js'][195] = 0;
_$jscoverage['mongoose/connection.js'][206] = 0;
_$jscoverage['mongoose/connection.js'][196] = 0;
_$jscoverage['mongoose/connection.js'][207] = 0;
_$jscoverage['mongoose/connection.js'][208] = 0;
_$jscoverage['mongoose/connection.js'][209] = 0;
_$jscoverage['mongoose/connection.js'][221] = 0;
_$jscoverage['mongoose/connection.js'][210] = 0;
_$jscoverage['mongoose/connection.js'][222] = 0;
_$jscoverage['mongoose/connection.js'][224] = 0;
_$jscoverage['mongoose/connection.js'][223] = 0;
_$jscoverage['mongoose/connection.js'][225] = 0;
_$jscoverage['mongoose/connection.js'][227] = 0;
_$jscoverage['mongoose/connection.js'][226] = 0;
_$jscoverage['mongoose/connection.js'][228] = 0;
_$jscoverage['mongoose/connection.js'][231] = 0;
_$jscoverage['mongoose/connection.js'][229] = 0;
_$jscoverage['mongoose/connection.js'][232] = 0;
_$jscoverage['mongoose/connection.js'][233] = 0;
_$jscoverage['mongoose/connection.js'][234] = 0;
_$jscoverage['mongoose/connection.js'][236] = 0;
_$jscoverage['mongoose/connection.js'][235] = 0;
_$jscoverage['mongoose/connection.js'][237] = 0;

@@ -99,5 +98,6 @@ _$jscoverage['mongoose/connection.js'][238] = 0;

_$jscoverage['mongoose/connection.js'][240] = 0;
_$jscoverage['mongoose/connection.js'][243] = 0;
_$jscoverage['mongoose/connection.js'][246] = 0;
_$jscoverage['mongoose/connection.js'][253] = 0;
_$jscoverage['mongoose/connection.js'][241] = 0;
_$jscoverage['mongoose/connection.js'][244] = 0;
_$jscoverage['mongoose/connection.js'][247] = 0;
_$jscoverage['mongoose/connection.js'][254] = 0;
}

@@ -129,81 +129,81 @@ _$jscoverage['mongoose/connection.js'][6]++;

var self = this, uri;
_$jscoverage['mongoose/connection.js'][73]++;
_$jscoverage['mongoose/connection.js'][74]++;
if (typeof database != "string") {
_$jscoverage['mongoose/connection.js'][74]++;
_$jscoverage['mongoose/connection.js'][75]++;
uri = url.parse(host);
_$jscoverage['mongoose/connection.js'][75]++;
_$jscoverage['mongoose/connection.js'][76]++;
host = uri.hostname;
_$jscoverage['mongoose/connection.js'][76]++;
_$jscoverage['mongoose/connection.js'][77]++;
port = uri.port || 27017;
_$jscoverage['mongoose/connection.js'][77]++;
_$jscoverage['mongoose/connection.js'][78]++;
callback = database;
_$jscoverage['mongoose/connection.js'][78]++;
_$jscoverage['mongoose/connection.js'][79]++;
database = uri.pathname.replace(/\//g, "");
}
else {
_$jscoverage['mongoose/connection.js'][80]++;
_$jscoverage['mongoose/connection.js'][81]++;
callback = callback || port;
_$jscoverage['mongoose/connection.js'][81]++;
_$jscoverage['mongoose/connection.js'][82]++;
port = typeof port == "number"? port: 27017;
}
_$jscoverage['mongoose/connection.js'][85]++;
_$jscoverage['mongoose/connection.js'][86]++;
if (this.readyState != 0) {
_$jscoverage['mongoose/connection.js'][86]++;
_$jscoverage['mongoose/connection.js'][87]++;
if ("function" == typeof callback) {
_$jscoverage['mongoose/connection.js'][87]++;
_$jscoverage['mongoose/connection.js'][88]++;
callback(new Error("Trying to open unclosed connection"));
}
_$jscoverage['mongoose/connection.js'][88]++;
_$jscoverage['mongoose/connection.js'][89]++;
return this;
}
_$jscoverage['mongoose/connection.js'][92]++;
if (uri.auth) {
_$jscoverage['mongoose/connection.js'][93]++;
_$jscoverage['mongoose/connection.js'][93]++;
if (uri && uri.auth) {
_$jscoverage['mongoose/connection.js'][94]++;
var auth = uri.auth.split(":");
_$jscoverage['mongoose/connection.js'][94]++;
_$jscoverage['mongoose/connection.js'][95]++;
this.user = auth[0];
_$jscoverage['mongoose/connection.js'][95]++;
_$jscoverage['mongoose/connection.js'][96]++;
this.pass = auth[1];
}
else {
_$jscoverage['mongoose/connection.js'][97]++;
_$jscoverage['mongoose/connection.js'][98]++;
this.user = this.pass = undefined;
}
_$jscoverage['mongoose/connection.js'][99]++;
_$jscoverage['mongoose/connection.js'][100]++;
if (! host) {
_$jscoverage['mongoose/connection.js'][100]++;
_$jscoverage['mongoose/connection.js'][101]++;
if ("function" == typeof callback) {
_$jscoverage['mongoose/connection.js'][101]++;
_$jscoverage['mongoose/connection.js'][102]++;
callback(new Error("Please provide a valid hostname."));
}
_$jscoverage['mongoose/connection.js'][102]++;
_$jscoverage['mongoose/connection.js'][103]++;
return this;
}
_$jscoverage['mongoose/connection.js'][105]++;
_$jscoverage['mongoose/connection.js'][106]++;
if (! database) {
_$jscoverage['mongoose/connection.js'][106]++;
_$jscoverage['mongoose/connection.js'][107]++;
if ("function" == typeof callback) {
_$jscoverage['mongoose/connection.js'][107]++;
_$jscoverage['mongoose/connection.js'][108]++;
callback(new Error("Please provide a database to connect to."));
}
_$jscoverage['mongoose/connection.js'][108]++;
_$jscoverage['mongoose/connection.js'][109]++;
return this;
}
_$jscoverage['mongoose/connection.js'][111]++;
_$jscoverage['mongoose/connection.js'][112]++;
this.name = database;
_$jscoverage['mongoose/connection.js'][112]++;
_$jscoverage['mongoose/connection.js'][113]++;
this.host = host;
_$jscoverage['mongoose/connection.js'][113]++;
_$jscoverage['mongoose/connection.js'][114]++;
this.port = port;
_$jscoverage['mongoose/connection.js'][116]++;
_$jscoverage['mongoose/connection.js'][117]++;
this.readyState = 2;
_$jscoverage['mongoose/connection.js'][117]++;
_$jscoverage['mongoose/connection.js'][118]++;
this.emit("opening");
_$jscoverage['mongoose/connection.js'][120]++;
_$jscoverage['mongoose/connection.js'][121]++;
this.doOpen((function (err) {
_$jscoverage['mongoose/connection.js'][121]++;
_$jscoverage['mongoose/connection.js'][122]++;
if (err) {
_$jscoverage['mongoose/connection.js'][122]++;
_$jscoverage['mongoose/connection.js'][123]++;
if (typeof callback == "function") {
_$jscoverage['mongoose/connection.js'][122]++;
_$jscoverage['mongoose/connection.js'][123]++;
callback(err);

@@ -213,7 +213,7 @@ }

else {
_$jscoverage['mongoose/connection.js'][124]++;
_$jscoverage['mongoose/connection.js'][125]++;
self.onOpen();
_$jscoverage['mongoose/connection.js'][125]++;
_$jscoverage['mongoose/connection.js'][126]++;
if (typeof callback == "function") {
_$jscoverage['mongoose/connection.js'][125]++;
_$jscoverage['mongoose/connection.js'][126]++;
callback(null);

@@ -223,33 +223,33 @@ }

}));
_$jscoverage['mongoose/connection.js'][129]++;
_$jscoverage['mongoose/connection.js'][130]++;
return this;
});
_$jscoverage['mongoose/connection.js'][138]++;
_$jscoverage['mongoose/connection.js'][139]++;
Connection.prototype.onOpen = (function () {
_$jscoverage['mongoose/connection.js'][139]++;
_$jscoverage['mongoose/connection.js'][140]++;
this.readyState = 1;
_$jscoverage['mongoose/connection.js'][140]++;
_$jscoverage['mongoose/connection.js'][141]++;
this.emit("open");
});
_$jscoverage['mongoose/connection.js'][151]++;
_$jscoverage['mongoose/connection.js'][152]++;
Connection.prototype.close = (function (callback) {
_$jscoverage['mongoose/connection.js'][152]++;
_$jscoverage['mongoose/connection.js'][153]++;
var self = this;
_$jscoverage['mongoose/connection.js'][154]++;
_$jscoverage['mongoose/connection.js'][155]++;
switch (this.readyState) {
case 0:
_$jscoverage['mongoose/connection.js'][156]++;
_$jscoverage['mongoose/connection.js'][157]++;
callback(null);
_$jscoverage['mongoose/connection.js'][157]++;
_$jscoverage['mongoose/connection.js'][158]++;
break;
case 1:
_$jscoverage['mongoose/connection.js'][160]++;
_$jscoverage['mongoose/connection.js'][161]++;
this.readyState = 3;
_$jscoverage['mongoose/connection.js'][161]++;
_$jscoverage['mongoose/connection.js'][162]++;
this.doClose((function (err) {
_$jscoverage['mongoose/connection.js'][162]++;
_$jscoverage['mongoose/connection.js'][163]++;
if (err) {
_$jscoverage['mongoose/connection.js'][163]++;
_$jscoverage['mongoose/connection.js'][164]++;
if (callback) {
_$jscoverage['mongoose/connection.js'][163]++;
_$jscoverage['mongoose/connection.js'][164]++;
callback(err);

@@ -259,7 +259,7 @@ }

else {
_$jscoverage['mongoose/connection.js'][165]++;
_$jscoverage['mongoose/connection.js'][166]++;
self.onClose();
_$jscoverage['mongoose/connection.js'][166]++;
_$jscoverage['mongoose/connection.js'][167]++;
if (callback) {
_$jscoverage['mongoose/connection.js'][166]++;
_$jscoverage['mongoose/connection.js'][167]++;
callback(null);

@@ -269,82 +269,82 @@ }

}));
_$jscoverage['mongoose/connection.js'][169]++;
_$jscoverage['mongoose/connection.js'][170]++;
break;
case 2:
_$jscoverage['mongoose/connection.js'][172]++;
_$jscoverage['mongoose/connection.js'][173]++;
this.once("open", (function () {
_$jscoverage['mongoose/connection.js'][173]++;
_$jscoverage['mongoose/connection.js'][174]++;
self.close(callback);
}));
_$jscoverage['mongoose/connection.js'][175]++;
_$jscoverage['mongoose/connection.js'][176]++;
break;
case 3:
_$jscoverage['mongoose/connection.js'][178]++;
_$jscoverage['mongoose/connection.js'][179]++;
this.once("close", (function () {
_$jscoverage['mongoose/connection.js'][179]++;
_$jscoverage['mongoose/connection.js'][180]++;
callback(null);
}));
_$jscoverage['mongoose/connection.js'][181]++;
_$jscoverage['mongoose/connection.js'][182]++;
break;
}
_$jscoverage['mongoose/connection.js'][184]++;
_$jscoverage['mongoose/connection.js'][185]++;
return this;
});
_$jscoverage['mongoose/connection.js'][193]++;
_$jscoverage['mongoose/connection.js'][194]++;
Connection.prototype.onClose = (function () {
_$jscoverage['mongoose/connection.js'][194]++;
_$jscoverage['mongoose/connection.js'][195]++;
this.readyState = 0;
_$jscoverage['mongoose/connection.js'][195]++;
_$jscoverage['mongoose/connection.js'][196]++;
this.emit("close");
});
_$jscoverage['mongoose/connection.js'][206]++;
_$jscoverage['mongoose/connection.js'][207]++;
Connection.prototype.collection = (function (name) {
_$jscoverage['mongoose/connection.js'][207]++;
_$jscoverage['mongoose/connection.js'][208]++;
if (! (name in this.collections)) {
_$jscoverage['mongoose/connection.js'][208]++;
_$jscoverage['mongoose/connection.js'][209]++;
this.collections[name] = new Collection(name, this);
}
_$jscoverage['mongoose/connection.js'][209]++;
_$jscoverage['mongoose/connection.js'][210]++;
return this.collections[name];
});
_$jscoverage['mongoose/connection.js'][221]++;
_$jscoverage['mongoose/connection.js'][222]++;
Connection.prototype.model = (function (name, collection) {
_$jscoverage['mongoose/connection.js'][222]++;
_$jscoverage['mongoose/connection.js'][223]++;
collection || (collection = utils.toCollectionName(name));
_$jscoverage['mongoose/connection.js'][224]++;
_$jscoverage['mongoose/connection.js'][225]++;
if (! this.models[collection]) {
_$jscoverage['mongoose/connection.js'][225]++;
_$jscoverage['mongoose/connection.js'][226]++;
this.models[collection] = {};
}
_$jscoverage['mongoose/connection.js'][227]++;
_$jscoverage['mongoose/connection.js'][228]++;
if (! this.models[collection][name]) {
_$jscoverage['mongoose/connection.js'][228]++;
_$jscoverage['mongoose/connection.js'][229]++;
var model = this.base.model(name, null, collection, true), Model;
_$jscoverage['mongoose/connection.js'][231]++;
_$jscoverage['mongoose/connection.js'][232]++;
if (model.prototype.connection != this) {
_$jscoverage['mongoose/connection.js'][232]++;
_$jscoverage['mongoose/connection.js'][233]++;
function Model() {
_$jscoverage['mongoose/connection.js'][233]++;
_$jscoverage['mongoose/connection.js'][234]++;
model.apply(this, arguments);
}
_$jscoverage['mongoose/connection.js'][234]++;
_$jscoverage['mongoose/connection.js'][235]++;
;
_$jscoverage['mongoose/connection.js'][236]++;
_$jscoverage['mongoose/connection.js'][237]++;
Model.__proto__ = model;
_$jscoverage['mongoose/connection.js'][237]++;
_$jscoverage['mongoose/connection.js'][238]++;
Model.prototype.__proto__ = model.prototype;
_$jscoverage['mongoose/connection.js'][238]++;
_$jscoverage['mongoose/connection.js'][239]++;
Model.prototype.db = this;
_$jscoverage['mongoose/connection.js'][239]++;
_$jscoverage['mongoose/connection.js'][240]++;
Model.prototype.collection = this.collection(collection);
_$jscoverage['mongoose/connection.js'][240]++;
_$jscoverage['mongoose/connection.js'][241]++;
Model.init();
}
_$jscoverage['mongoose/connection.js'][243]++;
_$jscoverage['mongoose/connection.js'][244]++;
this.models[collection][name] = Model || model;
}
_$jscoverage['mongoose/connection.js'][246]++;
_$jscoverage['mongoose/connection.js'][247]++;
return this.models[collection][name];
});
_$jscoverage['mongoose/connection.js'][253]++;
_$jscoverage['mongoose/connection.js'][254]++;
module.exports = Connection;
_$jscoverage['mongoose/connection.js'].source = ["","/**"," * Module dependencies."," */","","var url = require('url')"," , utils = require('./utils')"," , EventEmitter = utils.EventEmitter"," , driver = global.MONGOOSE_DRIVER_PATH || './drivers/node-mongodb-native'"," , Model = require('./model')"," , Collection = require(driver + '/collection');","","/**"," * Connection constructor. For practical reasons, a Connection equals a Db"," *"," * @param {Mongoose} mongoose base"," * @api public"," */","","function Connection (base) {"," this.base = base;"," this.collections = {};"," this.models = {};","};","","/**"," * Inherit from EventEmitter."," *"," */","","Connection.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Connection ready state:"," * 0 = Disconnected"," * 1 = Connected"," * 2 = Connecting"," * 3 = Disconnecting"," *"," * @api public"," */","","Connection.prototype.readyState = 0;","","/**"," * A hash of the collections associated with this connection"," *"," * @param text"," */","","Connection.prototype.collections;","","/**"," * The mongodb.Db instance, set when the connection is opened"," *"," * @api public"," */","","Connection.prototype.db;","","/**"," * Establishes the connection"," *"," * @param {String} mongodb://uri"," * @return {Connection} self"," * @api public"," */","","Connection.prototype.open = function (host, database, port, callback) {"," var self = this, uri;",""," // if we've been supplied an uri"," if (typeof database != 'string'){"," uri = url.parse(host);"," host = uri.hostname;"," port = uri.port || 27017;"," callback = database;"," database = uri.pathname.replace(/\\//g, '');"," } else {"," callback = callback || port;"," port = typeof port == 'number' ? port : 27017;"," }"," "," // make sure we can open"," if (this.readyState != 0){"," if ('function' == typeof callback)"," callback(new Error('Trying to open unclosed connection'));"," return this;"," }",""," // handle authentication"," if (uri.auth){"," var auth = uri.auth.split(':');"," this.user = auth[0];"," this.pass = auth[1];"," } else "," this.user = this.pass = undefined;"," "," if (!host) {"," if ('function' == typeof callback)"," callback(new Error('Please provide a valid hostname.'));"," return this;"," }",""," if (!database) {"," if ('function' == typeof callback)"," callback(new Error('Please provide a database to connect to.'));"," return this;"," }",""," this.name = database;"," this.host = host;"," this.port = port;",""," // signal connecting"," this.readyState = 2;"," this.emit('opening');",""," // open connection"," this.doOpen(function(err){"," if (err) {"," if (typeof callback == 'function') callback(err);"," } else {"," self.onOpen();"," if (typeof callback == 'function') callback(null);"," }"," });",""," return this;","};","","/**"," * Called when the connection is opened"," *"," * @api private"," */","","Connection.prototype.onOpen = function () {"," this.readyState = 1;"," this.emit('open');","};","","/**"," * Closes the connection"," *"," * @param {Function} optional callback"," * @return {Connection} self"," * @api public"," */","","Connection.prototype.close = function (callback) {"," var self = this;",""," switch (this.readyState){"," case 0: // disconnected"," callback(null);"," break;",""," case 1: // connected "," this.readyState = 3;"," this.doClose(function(err){"," if (err){"," if (callback) callback(err);"," } else {"," self.onClose();"," if (callback) callback(null);"," }"," });"," break;",""," case 2: // connecting"," this.once('open', function(){"," self.close(callback);"," });"," break;",""," case 3: // disconnecting"," this.once('close', function () {"," callback(null);"," });"," break;"," }",""," return this;","};","","/**"," * Called when the connection closes"," *"," * @api private"," */","","Connection.prototype.onClose = function () {"," this.readyState = 0;"," this.emit('close');","};","","/**"," * Retrieves a collection, creating it if not cached."," *"," * @param {String} collection name"," * @return {Collection} collection instance"," * @api public"," */","","Connection.prototype.collection = function (name) {"," if (!(name in this.collections))"," this.collections[name] = new Collection(name, this);"," return this.collections[name];","};","","/**"," * Defines a model or retrieves it"," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name (optional, induced from model name)"," * @api public"," */","","Connection.prototype.model = function (name, collection) {"," collection || (collection = utils.toCollectionName(name));"," // look up models for the collection"," if (!this.models[collection])"," this.models[collection] = {};",""," if (!this.models[collection][name]){"," var model = this.base.model(name, null, collection, true)"," , Model;"," "," if (model.prototype.connection != this){"," function Model (){"," model.apply(this, arguments);"," };",""," Model.__proto__ = model;"," Model.prototype.__proto__ = model.prototype;"," Model.prototype.db = this;"," Model.prototype.collection = this.collection(collection);"," Model.init();"," }",""," this.models[collection][name] = Model || model;"," }"," "," return this.models[collection][name];","};","","/**"," * Module exports."," */","","module.exports = Connection;"];
_$jscoverage['mongoose/connection.js'].source = ["","/**"," * Module dependencies."," */","","var url = require('url')"," , utils = require('./utils')"," , EventEmitter = utils.EventEmitter"," , driver = global.MONGOOSE_DRIVER_PATH || './drivers/node-mongodb-native'"," , Model = require('./model')"," , Collection = require(driver + '/collection');","","/**"," * Connection constructor. For practical reasons, a Connection equals a Db"," *"," * @param {Mongoose} mongoose base"," * @api public"," */","","function Connection (base) {"," this.base = base;"," this.collections = {};"," this.models = {};","};","","/**"," * Inherit from EventEmitter."," *"," */","","Connection.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Connection ready state:"," * 0 = Disconnected"," * 1 = Connected"," * 2 = Connecting"," * 3 = Disconnecting"," *"," * @api public"," */","","Connection.prototype.readyState = 0;","","/**"," * A hash of the collections associated with this connection"," *"," * @param text"," */","","Connection.prototype.collections;","","/**"," * The mongodb.Db instance, set when the connection is opened"," *"," * @api public"," */","","Connection.prototype.db;","","/**"," * Establishes the connection"," *"," * @param {String} mongodb://uri"," * @return {Connection} self"," * @api public"," */","","Connection.prototype.open = function (host, database, port, callback) {"," var self = this"," , uri;",""," // if we've been supplied an uri"," if (typeof database != 'string'){"," uri = url.parse(host);"," host = uri.hostname;"," port = uri.port || 27017;"," callback = database;"," database = uri.pathname.replace(/\\//g, '');"," } else {"," callback = callback || port;"," port = typeof port == 'number' ? port : 27017;"," }"," "," // make sure we can open"," if (this.readyState != 0){"," if ('function' == typeof callback)"," callback(new Error('Trying to open unclosed connection'));"," return this;"," }",""," // handle authentication"," if (uri && uri.auth){"," var auth = uri.auth.split(':');"," this.user = auth[0];"," this.pass = auth[1];"," } else "," this.user = this.pass = undefined;"," "," if (!host) {"," if ('function' == typeof callback)"," callback(new Error('Please provide a valid hostname.'));"," return this;"," }",""," if (!database) {"," if ('function' == typeof callback)"," callback(new Error('Please provide a database to connect to.'));"," return this;"," }",""," this.name = database;"," this.host = host;"," this.port = port;",""," // signal connecting"," this.readyState = 2;"," this.emit('opening');",""," // open connection"," this.doOpen(function(err){"," if (err) {"," if (typeof callback == 'function') callback(err);"," } else {"," self.onOpen();"," if (typeof callback == 'function') callback(null);"," }"," });",""," return this;","};","","/**"," * Called when the connection is opened"," *"," * @api private"," */","","Connection.prototype.onOpen = function () {"," this.readyState = 1;"," this.emit('open');","};","","/**"," * Closes the connection"," *"," * @param {Function} optional callback"," * @return {Connection} self"," * @api public"," */","","Connection.prototype.close = function (callback) {"," var self = this;",""," switch (this.readyState){"," case 0: // disconnected"," callback(null);"," break;",""," case 1: // connected "," this.readyState = 3;"," this.doClose(function(err){"," if (err){"," if (callback) callback(err);"," } else {"," self.onClose();"," if (callback) callback(null);"," }"," });"," break;",""," case 2: // connecting"," this.once('open', function(){"," self.close(callback);"," });"," break;",""," case 3: // disconnecting"," this.once('close', function () {"," callback(null);"," });"," break;"," }",""," return this;","};","","/**"," * Called when the connection closes"," *"," * @api private"," */","","Connection.prototype.onClose = function () {"," this.readyState = 0;"," this.emit('close');","};","","/**"," * Retrieves a collection, creating it if not cached."," *"," * @param {String} collection name"," * @return {Collection} collection instance"," * @api public"," */","","Connection.prototype.collection = function (name) {"," if (!(name in this.collections))"," this.collections[name] = new Collection(name, this);"," return this.collections[name];","};","","/**"," * Defines a model or retrieves it"," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name (optional, induced from model name)"," * @api public"," */","","Connection.prototype.model = function (name, collection) {"," collection || (collection = utils.toCollectionName(name));"," // look up models for the collection"," if (!this.models[collection])"," this.models[collection] = {};",""," if (!this.models[collection][name]){"," var model = this.base.model(name, null, collection, true)"," , Model;"," "," if (model.prototype.connection != this){"," function Model (){"," model.apply(this, arguments);"," };",""," Model.__proto__ = model;"," Model.prototype.__proto__ = model.prototype;"," Model.prototype.db = this;"," Model.prototype.collection = this.collection(collection);"," Model.init();"," }",""," this.models[collection][name] = Model || model;"," }"," "," return this.models[collection][name];","};","","/**"," * Module exports."," */","","module.exports = Connection;"];

@@ -6,5 +6,2 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/document.js'][6] = 0;
_$jscoverage['mongoose/document.js'][22] = 0;
_$jscoverage['mongoose/document.js'][23] = 0;
_$jscoverage['mongoose/document.js'][24] = 0;
_$jscoverage['mongoose/document.js'][25] = 0;

@@ -17,18 +14,19 @@ _$jscoverage['mongoose/document.js'][26] = 0;

_$jscoverage['mongoose/document.js'][31] = 0;
_$jscoverage['mongoose/document.js'][37] = 0;
_$jscoverage['mongoose/document.js'][46] = 0;
_$jscoverage['mongoose/document.js'][54] = 0;
_$jscoverage['mongoose/document.js'][62] = 0;
_$jscoverage['mongoose/document.js'][70] = 0;
_$jscoverage['mongoose/document.js'][71] = 0;
_$jscoverage['mongoose/document.js'][32] = 0;
_$jscoverage['mongoose/document.js'][33] = 0;
_$jscoverage['mongoose/document.js'][34] = 0;
_$jscoverage['mongoose/document.js'][40] = 0;
_$jscoverage['mongoose/document.js'][49] = 0;
_$jscoverage['mongoose/document.js'][57] = 0;
_$jscoverage['mongoose/document.js'][65] = 0;
_$jscoverage['mongoose/document.js'][73] = 0;
_$jscoverage['mongoose/document.js'][74] = 0;
_$jscoverage['mongoose/document.js'][75] = 0;
_$jscoverage['mongoose/document.js'][77] = 0;
_$jscoverage['mongoose/document.js'][78] = 0;
_$jscoverage['mongoose/document.js'][79] = 0;
_$jscoverage['mongoose/document.js'][80] = 0;
_$jscoverage['mongoose/document.js'][81] = 0;
_$jscoverage['mongoose/document.js'][82] = 0;
_$jscoverage['mongoose/document.js'][86] = 0;
_$jscoverage['mongoose/document.js'][96] = 0;
_$jscoverage['mongoose/document.js'][97] = 0;
_$jscoverage['mongoose/document.js'][98] = 0;
_$jscoverage['mongoose/document.js'][83] = 0;
_$jscoverage['mongoose/document.js'][85] = 0;
_$jscoverage['mongoose/document.js'][89] = 0;
_$jscoverage['mongoose/document.js'][99] = 0;
_$jscoverage['mongoose/document.js'][100] = 0;

@@ -40,91 +38,86 @@ _$jscoverage['mongoose/document.js'][101] = 0;

_$jscoverage['mongoose/document.js'][107] = 0;
_$jscoverage['mongoose/document.js'][108] = 0;
_$jscoverage['mongoose/document.js'][110] = 0;
_$jscoverage['mongoose/document.js'][111] = 0;
_$jscoverage['mongoose/document.js'][113] = 0;
_$jscoverage['mongoose/document.js'][112] = 0;
_$jscoverage['mongoose/document.js'][114] = 0;
_$jscoverage['mongoose/document.js'][115] = 0;
_$jscoverage['mongoose/document.js'][117] = 0;
_$jscoverage['mongoose/document.js'][118] = 0;
_$jscoverage['mongoose/document.js'][119] = 0;
_$jscoverage['mongoose/document.js'][122] = 0;
_$jscoverage['mongoose/document.js'][125] = 0;
_$jscoverage['mongoose/document.js'][127] = 0;
_$jscoverage['mongoose/document.js'][126] = 0;
_$jscoverage['mongoose/document.js'][129] = 0;
_$jscoverage['mongoose/document.js'][130] = 0;
_$jscoverage['mongoose/document.js'][132] = 0;
_$jscoverage['mongoose/document.js'][143] = 0;
_$jscoverage['mongoose/document.js'][144] = 0;
_$jscoverage['mongoose/document.js'][145] = 0;
_$jscoverage['mongoose/document.js'][131] = 0;
_$jscoverage['mongoose/document.js'][133] = 0;
_$jscoverage['mongoose/document.js'][134] = 0;
_$jscoverage['mongoose/document.js'][136] = 0;
_$jscoverage['mongoose/document.js'][147] = 0;
_$jscoverage['mongoose/document.js'][148] = 0;
_$jscoverage['mongoose/document.js'][149] = 0;
_$jscoverage['mongoose/document.js'][150] = 0;
_$jscoverage['mongoose/document.js'][164] = 0;
_$jscoverage['mongoose/document.js'][165] = 0;
_$jscoverage['mongoose/document.js'][166] = 0;
_$jscoverage['mongoose/document.js'][167] = 0;
_$jscoverage['mongoose/document.js'][168] = 0;
_$jscoverage['mongoose/document.js'][169] = 0;
_$jscoverage['mongoose/document.js'][171] = 0;
_$jscoverage['mongoose/document.js'][175] = 0;
_$jscoverage['mongoose/document.js'][177] = 0;
_$jscoverage['mongoose/document.js'][153] = 0;
_$jscoverage['mongoose/document.js'][154] = 0;
_$jscoverage['mongoose/document.js'][180] = 0;
_$jscoverage['mongoose/document.js'][181] = 0;
_$jscoverage['mongoose/document.js'][182] = 0;
_$jscoverage['mongoose/document.js'][183] = 0;
_$jscoverage['mongoose/document.js'][184] = 0;
_$jscoverage['mongoose/document.js'][187] = 0;
_$jscoverage['mongoose/document.js'][186] = 0;
_$jscoverage['mongoose/document.js'][188] = 0;
_$jscoverage['mongoose/document.js'][189] = 0;
_$jscoverage['mongoose/document.js'][191] = 0;
_$jscoverage['mongoose/document.js'][196] = 0;
_$jscoverage['mongoose/document.js'][193] = 0;
_$jscoverage['mongoose/document.js'][198] = 0;
_$jscoverage['mongoose/document.js'][199] = 0;
_$jscoverage['mongoose/document.js'][200] = 0;
_$jscoverage['mongoose/document.js'][210] = 0;
_$jscoverage['mongoose/document.js'][201] = 0;
_$jscoverage['mongoose/document.js'][204] = 0;
_$jscoverage['mongoose/document.js'][206] = 0;
_$jscoverage['mongoose/document.js'][208] = 0;
_$jscoverage['mongoose/document.js'][211] = 0;
_$jscoverage['mongoose/document.js'][214] = 0;
_$jscoverage['mongoose/document.js'][212] = 0;
_$jscoverage['mongoose/document.js'][213] = 0;
_$jscoverage['mongoose/document.js'][215] = 0;
_$jscoverage['mongoose/document.js'][216] = 0;
_$jscoverage['mongoose/document.js'][218] = 0;
_$jscoverage['mongoose/document.js'][229] = 0;
_$jscoverage['mongoose/document.js'][230] = 0;
_$jscoverage['mongoose/document.js'][233] = 0;
_$jscoverage['mongoose/document.js'][234] = 0;
_$jscoverage['mongoose/document.js'][221] = 0;
_$jscoverage['mongoose/document.js'][224] = 0;
_$jscoverage['mongoose/document.js'][225] = 0;
_$jscoverage['mongoose/document.js'][235] = 0;
_$jscoverage['mongoose/document.js'][236] = 0;
_$jscoverage['mongoose/document.js'][246] = 0;
_$jscoverage['mongoose/document.js'][247] = 0;
_$jscoverage['mongoose/document.js'][248] = 0;
_$jscoverage['mongoose/document.js'][249] = 0;
_$jscoverage['mongoose/document.js'][239] = 0;
_$jscoverage['mongoose/document.js'][240] = 0;
_$jscoverage['mongoose/document.js'][241] = 0;
_$jscoverage['mongoose/document.js'][243] = 0;
_$jscoverage['mongoose/document.js'][254] = 0;
_$jscoverage['mongoose/document.js'][255] = 0;
_$jscoverage['mongoose/document.js'][258] = 0;
_$jscoverage['mongoose/document.js'][259] = 0;
_$jscoverage['mongoose/document.js'][260] = 0;
_$jscoverage['mongoose/document.js'][264] = 0;
_$jscoverage['mongoose/document.js'][265] = 0;
_$jscoverage['mongoose/document.js'][267] = 0;
_$jscoverage['mongoose/document.js'][268] = 0;
_$jscoverage['mongoose/document.js'][270] = 0;
_$jscoverage['mongoose/document.js'][280] = 0;
_$jscoverage['mongoose/document.js'][281] = 0;
_$jscoverage['mongoose/document.js'][282] = 0;
_$jscoverage['mongoose/document.js'][283] = 0;
_$jscoverage['mongoose/document.js'][261] = 0;
_$jscoverage['mongoose/document.js'][271] = 0;
_$jscoverage['mongoose/document.js'][272] = 0;
_$jscoverage['mongoose/document.js'][273] = 0;
_$jscoverage['mongoose/document.js'][274] = 0;
_$jscoverage['mongoose/document.js'][284] = 0;
_$jscoverage['mongoose/document.js'][286] = 0;
_$jscoverage['mongoose/document.js'][287] = 0;
_$jscoverage['mongoose/document.js'][288] = 0;
_$jscoverage['mongoose/document.js'][285] = 0;
_$jscoverage['mongoose/document.js'][289] = 0;
_$jscoverage['mongoose/document.js'][298] = 0;
_$jscoverage['mongoose/document.js'][299] = 0;
_$jscoverage['mongoose/document.js'][290] = 0;
_$jscoverage['mongoose/document.js'][291] = 0;
_$jscoverage['mongoose/document.js'][293] = 0;
_$jscoverage['mongoose/document.js'][294] = 0;
_$jscoverage['mongoose/document.js'][297] = 0;
_$jscoverage['mongoose/document.js'][306] = 0;
_$jscoverage['mongoose/document.js'][308] = 0;
_$jscoverage['mongoose/document.js'][309] = 0;
_$jscoverage['mongoose/document.js'][318] = 0;
_$jscoverage['mongoose/document.js'][319] = 0;
_$jscoverage['mongoose/document.js'][320] = 0;
_$jscoverage['mongoose/document.js'][321] = 0;
_$jscoverage['mongoose/document.js'][322] = 0;
_$jscoverage['mongoose/document.js'][324] = 0;
_$jscoverage['mongoose/document.js'][325] = 0;
_$jscoverage['mongoose/document.js'][326] = 0;
_$jscoverage['mongoose/document.js'][327] = 0;
_$jscoverage['mongoose/document.js'][328] = 0;
_$jscoverage['mongoose/document.js'][329] = 0;
_$jscoverage['mongoose/document.js'][330] = 0;
_$jscoverage['mongoose/document.js'][331] = 0;
_$jscoverage['mongoose/document.js'][332] = 0;
_$jscoverage['mongoose/document.js'][333] = 0;
_$jscoverage['mongoose/document.js'][334] = 0;
_$jscoverage['mongoose/document.js'][336] = 0;
_$jscoverage['mongoose/document.js'][339] = 0;
_$jscoverage['mongoose/document.js'][342] = 0;
_$jscoverage['mongoose/document.js'][343] = 0;
_$jscoverage['mongoose/document.js'][337] = 0;
_$jscoverage['mongoose/document.js'][346] = 0;
_$jscoverage['mongoose/document.js'][356] = 0;
_$jscoverage['mongoose/document.js'][347] = 0;
_$jscoverage['mongoose/document.js'][357] = 0;
_$jscoverage['mongoose/document.js'][358] = 0;
_$jscoverage['mongoose/document.js'][363] = 0;
_$jscoverage['mongoose/document.js'][365] = 0;
_$jscoverage['mongoose/document.js'][366] = 0;

@@ -134,24 +127,20 @@ _$jscoverage['mongoose/document.js'][367] = 0;

_$jscoverage['mongoose/document.js'][369] = 0;
_$jscoverage['mongoose/document.js'][370] = 0;
_$jscoverage['mongoose/document.js'][371] = 0;
_$jscoverage['mongoose/document.js'][372] = 0;
_$jscoverage['mongoose/document.js'][375] = 0;
_$jscoverage['mongoose/document.js'][374] = 0;
_$jscoverage['mongoose/document.js'][377] = 0;
_$jscoverage['mongoose/document.js'][378] = 0;
_$jscoverage['mongoose/document.js'][379] = 0;
_$jscoverage['mongoose/document.js'][380] = 0;
_$jscoverage['mongoose/document.js'][381] = 0;
_$jscoverage['mongoose/document.js'][382] = 0;
_$jscoverage['mongoose/document.js'][383] = 0;
_$jscoverage['mongoose/document.js'][384] = 0;
_$jscoverage['mongoose/document.js'][385] = 0;
_$jscoverage['mongoose/document.js'][388] = 0;
_$jscoverage['mongoose/document.js'][391] = 0;
_$jscoverage['mongoose/document.js'][392] = 0;
_$jscoverage['mongoose/document.js'][394] = 0;
_$jscoverage['mongoose/document.js'][395] = 0;
_$jscoverage['mongoose/document.js'][396] = 0;
_$jscoverage['mongoose/document.js'][399] = 0;
_$jscoverage['mongoose/document.js'][401] = 0;
_$jscoverage['mongoose/document.js'][402] = 0;
_$jscoverage['mongoose/document.js'][403] = 0;
_$jscoverage['mongoose/document.js'][412] = 0;
_$jscoverage['mongoose/document.js'][404] = 0;
_$jscoverage['mongoose/document.js'][405] = 0;
_$jscoverage['mongoose/document.js'][406] = 0;
_$jscoverage['mongoose/document.js'][413] = 0;
_$jscoverage['mongoose/document.js'][415] = 0;
_$jscoverage['mongoose/document.js'][416] = 0;
_$jscoverage['mongoose/document.js'][419] = 0;
_$jscoverage['mongoose/document.js'][421] = 0;
_$jscoverage['mongoose/document.js'][422] = 0;

@@ -163,46 +152,37 @@ _$jscoverage['mongoose/document.js'][423] = 0;

_$jscoverage['mongoose/document.js'][428] = 0;
_$jscoverage['mongoose/document.js'][430] = 0;
_$jscoverage['mongoose/document.js'][434] = 0;
_$jscoverage['mongoose/document.js'][429] = 0;
_$jscoverage['mongoose/document.js'][432] = 0;
_$jscoverage['mongoose/document.js'][435] = 0;
_$jscoverage['mongoose/document.js'][436] = 0;
_$jscoverage['mongoose/document.js'][439] = 0;
_$jscoverage['mongoose/document.js'][440] = 0;
_$jscoverage['mongoose/document.js'][443] = 0;
_$jscoverage['mongoose/document.js'][445] = 0;
_$jscoverage['mongoose/document.js'][446] = 0;
_$jscoverage['mongoose/document.js'][447] = 0;
_$jscoverage['mongoose/document.js'][448] = 0;
_$jscoverage['mongoose/document.js'][449] = 0;
_$jscoverage['mongoose/document.js'][458] = 0;
_$jscoverage['mongoose/document.js'][459] = 0;
_$jscoverage['mongoose/document.js'][460] = 0;
_$jscoverage['mongoose/document.js'][461] = 0;
_$jscoverage['mongoose/document.js'][462] = 0;
_$jscoverage['mongoose/document.js'][473] = 0;
_$jscoverage['mongoose/document.js'][456] = 0;
_$jscoverage['mongoose/document.js'][457] = 0;
_$jscoverage['mongoose/document.js'][466] = 0;
_$jscoverage['mongoose/document.js'][467] = 0;
_$jscoverage['mongoose/document.js'][469] = 0;
_$jscoverage['mongoose/document.js'][470] = 0;
_$jscoverage['mongoose/document.js'][471] = 0;
_$jscoverage['mongoose/document.js'][472] = 0;
_$jscoverage['mongoose/document.js'][474] = 0;
_$jscoverage['mongoose/document.js'][484] = 0;
_$jscoverage['mongoose/document.js'][485] = 0;
_$jscoverage['mongoose/document.js'][495] = 0;
_$jscoverage['mongoose/document.js'][497] = 0;
_$jscoverage['mongoose/document.js'][498] = 0;
_$jscoverage['mongoose/document.js'][499] = 0;
_$jscoverage['mongoose/document.js'][500] = 0;
_$jscoverage['mongoose/document.js'][501] = 0;
_$jscoverage['mongoose/document.js'][478] = 0;
_$jscoverage['mongoose/document.js'][479] = 0;
_$jscoverage['mongoose/document.js'][491] = 0;
_$jscoverage['mongoose/document.js'][492] = 0;
_$jscoverage['mongoose/document.js'][493] = 0;
_$jscoverage['mongoose/document.js'][502] = 0;
_$jscoverage['mongoose/document.js'][503] = 0;
_$jscoverage['mongoose/document.js'][504] = 0;
_$jscoverage['mongoose/document.js'][505] = 0;
_$jscoverage['mongoose/document.js'][506] = 0;
_$jscoverage['mongoose/document.js'][507] = 0;
_$jscoverage['mongoose/document.js'][509] = 0;
_$jscoverage['mongoose/document.js'][510] = 0;
_$jscoverage['mongoose/document.js'][512] = 0;
_$jscoverage['mongoose/document.js'][514] = 0;
_$jscoverage['mongoose/document.js'][515] = 0;
_$jscoverage['mongoose/document.js'][517] = 0;
_$jscoverage['mongoose/document.js'][518] = 0;
_$jscoverage['mongoose/document.js'][520] = 0;
_$jscoverage['mongoose/document.js'][522] = 0;
_$jscoverage['mongoose/document.js'][526] = 0;
_$jscoverage['mongoose/document.js'][528] = 0;
_$jscoverage['mongoose/document.js'][529] = 0;
_$jscoverage['mongoose/document.js'][530] = 0;
_$jscoverage['mongoose/document.js'][533] = 0;
_$jscoverage['mongoose/document.js'][534] = 0;
_$jscoverage['mongoose/document.js'][536] = 0;
_$jscoverage['mongoose/document.js'][537] = 0;
_$jscoverage['mongoose/document.js'][538] = 0;
_$jscoverage['mongoose/document.js'][539] = 0;
_$jscoverage['mongoose/document.js'][541] = 0;
_$jscoverage['mongoose/document.js'][542] = 0;

@@ -212,68 +192,95 @@ _$jscoverage['mongoose/document.js'][543] = 0;

_$jscoverage['mongoose/document.js'][545] = 0;
_$jscoverage['mongoose/document.js'][546] = 0;
_$jscoverage['mongoose/document.js'][547] = 0;
_$jscoverage['mongoose/document.js'][548] = 0;
_$jscoverage['mongoose/document.js'][549] = 0;
_$jscoverage['mongoose/document.js'][550] = 0;
_$jscoverage['mongoose/document.js'][551] = 0;
_$jscoverage['mongoose/document.js'][555] = 0;
_$jscoverage['mongoose/document.js'][553] = 0;
_$jscoverage['mongoose/document.js'][554] = 0;
_$jscoverage['mongoose/document.js'][556] = 0;
_$jscoverage['mongoose/document.js'][558] = 0;
_$jscoverage['mongoose/document.js'][559] = 0;
_$jscoverage['mongoose/document.js'][561] = 0;
_$jscoverage['mongoose/document.js'][562] = 0;
_$jscoverage['mongoose/document.js'][564] = 0;
_$jscoverage['mongoose/document.js'][566] = 0;
_$jscoverage['mongoose/document.js'][570] = 0;
_$jscoverage['mongoose/document.js'][572] = 0;
_$jscoverage['mongoose/document.js'][573] = 0;
_$jscoverage['mongoose/document.js'][574] = 0;
_$jscoverage['mongoose/document.js'][575] = 0;
_$jscoverage['mongoose/document.js'][576] = 0;
_$jscoverage['mongoose/document.js'][577] = 0;
_$jscoverage['mongoose/document.js'][578] = 0;
_$jscoverage['mongoose/document.js'][584] = 0;
_$jscoverage['mongoose/document.js'][580] = 0;
_$jscoverage['mongoose/document.js'][581] = 0;
_$jscoverage['mongoose/document.js'][582] = 0;
_$jscoverage['mongoose/document.js'][583] = 0;
_$jscoverage['mongoose/document.js'][586] = 0;
_$jscoverage['mongoose/document.js'][587] = 0;
_$jscoverage['mongoose/document.js'][588] = 0;
_$jscoverage['mongoose/document.js'][589] = 0;
_$jscoverage['mongoose/document.js'][590] = 0;
_$jscoverage['mongoose/document.js'][591] = 0;
_$jscoverage['mongoose/document.js'][592] = 0;
_$jscoverage['mongoose/document.js'][593] = 0;
_$jscoverage['mongoose/document.js'][595] = 0;
_$jscoverage['mongoose/document.js'][599] = 0;
_$jscoverage['mongoose/document.js'][610] = 0;
_$jscoverage['mongoose/document.js'][618] = 0;
_$jscoverage['mongoose/document.js'][619] = 0;
_$jscoverage['mongoose/document.js'][620] = 0;
_$jscoverage['mongoose/document.js'][621] = 0;
_$jscoverage['mongoose/document.js'][622] = 0;
_$jscoverage['mongoose/document.js'][628] = 0;
_$jscoverage['mongoose/document.js'][630] = 0;
}
_$jscoverage['mongoose/document.js'][6]++;
var EventEmitter = require("events").EventEmitter, MongooseError = require("./error"), Schema = require("./schema"), ArrayType = require("./types/array"), DocumentArraySchema = require("./schema/documentarray"), utils = require("./utils"), clone = utils.clone, ActiveRoster = utils.StateMachine.ctor("require", "modify", "init");
_$jscoverage['mongoose/document.js'][22]++;
var EventEmitter = require("events").EventEmitter, MongooseError = require("./error"), Schema = require("./schema"), SchemaType = require("./schematype"), VirtualType = require("./virtualtype"), ArrayType = require("./types/array"), MixedSchema = require("./schema/mixed"), DocumentArraySchema = require("./schema/documentarray"), utils = require("./utils"), clone = utils.clone, ActiveRoster = utils.StateMachine.ctor("require", "modify", "init");
_$jscoverage['mongoose/document.js'][25]++;
function Document(obj) {
_$jscoverage['mongoose/document.js'][23]++;
_$jscoverage['mongoose/document.js'][26]++;
this.doc = this.buildDoc();
_$jscoverage['mongoose/document.js'][24]++;
_$jscoverage['mongoose/document.js'][27]++;
this.activePaths = new ActiveRoster();
_$jscoverage['mongoose/document.js'][25]++;
_$jscoverage['mongoose/document.js'][28]++;
this.saveError = null;
_$jscoverage['mongoose/document.js'][26]++;
_$jscoverage['mongoose/document.js'][29]++;
if (obj) {
_$jscoverage['mongoose/document.js'][26]++;
_$jscoverage['mongoose/document.js'][29]++;
this.set(obj);
}
_$jscoverage['mongoose/document.js'][27]++;
_$jscoverage['mongoose/document.js'][30]++;
this.pres = {};
_$jscoverage['mongoose/document.js'][28]++;
_$jscoverage['mongoose/document.js'][31]++;
this.registerHooks();
_$jscoverage['mongoose/document.js'][29]++;
_$jscoverage['mongoose/document.js'][32]++;
this.doQueue();
_$jscoverage['mongoose/document.js'][30]++;
_$jscoverage['mongoose/document.js'][33]++;
this.isNew = true;
}
_$jscoverage['mongoose/document.js'][31]++;
_$jscoverage['mongoose/document.js'][34]++;
;
_$jscoverage['mongoose/document.js'][37]++;
_$jscoverage['mongoose/document.js'][40]++;
Document.prototype.__proto__ = EventEmitter.prototype;
_$jscoverage['mongoose/document.js'][46]++;
_$jscoverage['mongoose/document.js'][49]++;
Document.prototype.base;
_$jscoverage['mongoose/document.js'][54]++;
_$jscoverage['mongoose/document.js'][57]++;
Document.prototype.schema;
_$jscoverage['mongoose/document.js'][62]++;
_$jscoverage['mongoose/document.js'][65]++;
Document.prototype.isNew;
_$jscoverage['mongoose/document.js'][70]++;
_$jscoverage['mongoose/document.js'][73]++;
Document.prototype.buildDoc = (function () {
_$jscoverage['mongoose/document.js'][71]++;
_$jscoverage['mongoose/document.js'][74]++;
var doc = {}, self = this;
_$jscoverage['mongoose/document.js'][74]++;
_$jscoverage['mongoose/document.js'][77]++;
this.schema.eachPath((function (i, type) {
_$jscoverage['mongoose/document.js'][75]++;
_$jscoverage['mongoose/document.js'][78]++;
var path = i.split("."), len = path.length;
_$jscoverage['mongoose/document.js'][78]++;
_$jscoverage['mongoose/document.js'][81]++;
path.reduce((function (ref, piece, i) {
_$jscoverage['mongoose/document.js'][79]++;
_$jscoverage['mongoose/document.js'][82]++;
if (i === len - 1) {
_$jscoverage['mongoose/document.js'][80]++;
_$jscoverage['mongoose/document.js'][83]++;
ref[piece] = type.getDefault(self);
}
else {
_$jscoverage['mongoose/document.js'][82]++;
_$jscoverage['mongoose/document.js'][85]++;
return ref[piece] || (ref[piece] = {});

@@ -283,36 +290,36 @@ }

}));
_$jscoverage['mongoose/document.js'][86]++;
_$jscoverage['mongoose/document.js'][89]++;
return doc;
});
_$jscoverage['mongoose/document.js'][96]++;
_$jscoverage['mongoose/document.js'][99]++;
Document.prototype.init = (function (doc, fn) {
_$jscoverage['mongoose/document.js'][97]++;
_$jscoverage['mongoose/document.js'][100]++;
var self = this;
_$jscoverage['mongoose/document.js'][98]++;
_$jscoverage['mongoose/document.js'][101]++;
this.isNew = false;
_$jscoverage['mongoose/document.js'][100]++;
_$jscoverage['mongoose/document.js'][103]++;
function init(obj, doc, prefix) {
_$jscoverage['mongoose/document.js'][101]++;
_$jscoverage['mongoose/document.js'][104]++;
prefix = prefix || "";
_$jscoverage['mongoose/document.js'][103]++;
_$jscoverage['mongoose/document.js'][106]++;
for (var i in obj) {
_$jscoverage['mongoose/document.js'][104]++;
var path = prefix + i;
_$jscoverage['mongoose/document.js'][106]++;
if (obj[i] && obj[i].constructor == Object) {
_$jscoverage['mongoose/document.js'][107]++;
_$jscoverage['mongoose/document.js'][107]++;
var path = prefix + i, schema = self.schema.path(path);
_$jscoverage['mongoose/document.js'][110]++;
if (! schema && obj[i].constructor == Object) {
_$jscoverage['mongoose/document.js'][111]++;
doc[i] = {};
_$jscoverage['mongoose/document.js'][108]++;
_$jscoverage['mongoose/document.js'][112]++;
init(obj[i], doc[i], path + ".");
}
else {
_$jscoverage['mongoose/document.js'][110]++;
_$jscoverage['mongoose/document.js'][114]++;
if (obj[i] !== null && obj[i] !== undefined) {
_$jscoverage['mongoose/document.js'][111]++;
_$jscoverage['mongoose/document.js'][115]++;
var schema = self.schema.path(path);
_$jscoverage['mongoose/document.js'][113]++;
_$jscoverage['mongoose/document.js'][117]++;
if (schema) {
_$jscoverage['mongoose/document.js'][114]++;
_$jscoverage['mongoose/document.js'][118]++;
self["try"]((function () {
_$jscoverage['mongoose/document.js'][115]++;
_$jscoverage['mongoose/document.js'][119]++;
doc[i] = schema.cast(obj[i], self);

@@ -322,7 +329,7 @@ }));

else {
_$jscoverage['mongoose/document.js'][118]++;
_$jscoverage['mongoose/document.js'][122]++;
doc[i] = obj[i];
}
}
_$jscoverage['mongoose/document.js'][122]++;
_$jscoverage['mongoose/document.js'][126]++;
self.activePaths.init(path);

@@ -332,41 +339,41 @@ }

}
_$jscoverage['mongoose/document.js'][125]++;
_$jscoverage['mongoose/document.js'][129]++;
;
_$jscoverage['mongoose/document.js'][127]++;
_$jscoverage['mongoose/document.js'][131]++;
init(doc, self.doc);
_$jscoverage['mongoose/document.js'][129]++;
_$jscoverage['mongoose/document.js'][133]++;
if (fn) {
_$jscoverage['mongoose/document.js'][130]++;
_$jscoverage['mongoose/document.js'][134]++;
fn(null);
}
_$jscoverage['mongoose/document.js'][132]++;
_$jscoverage['mongoose/document.js'][136]++;
return this;
});
_$jscoverage['mongoose/document.js'][143]++;
_$jscoverage['mongoose/document.js'][147]++;
Document.prototype.pre = (function (method, fn) {
_$jscoverage['mongoose/document.js'][144]++;
_$jscoverage['mongoose/document.js'][148]++;
if (! (method in this.pres)) {
_$jscoverage['mongoose/document.js'][145]++;
_$jscoverage['mongoose/document.js'][149]++;
this.pres[method] = {serial: [], parallel: []};
}
_$jscoverage['mongoose/document.js'][149]++;
_$jscoverage['mongoose/document.js'][153]++;
this.pres[method][fn.length == 1? "serial": "parallel"].push(fn);
_$jscoverage['mongoose/document.js'][150]++;
_$jscoverage['mongoose/document.js'][154]++;
return this;
});
_$jscoverage['mongoose/document.js'][164]++;
_$jscoverage['mongoose/document.js'][180]++;
Document.prototype.set = (function (path, val) {
_$jscoverage['mongoose/document.js'][165]++;
_$jscoverage['mongoose/document.js'][181]++;
if (typeof path != "string") {
_$jscoverage['mongoose/document.js'][166]++;
_$jscoverage['mongoose/document.js'][182]++;
var prefix = val? val + ".": "";
_$jscoverage['mongoose/document.js'][167]++;
_$jscoverage['mongoose/document.js'][183]++;
for (var i in path) {
_$jscoverage['mongoose/document.js'][168]++;
if (path[i].constructor == Object) {
_$jscoverage['mongoose/document.js'][169]++;
this.set(path[i], prefix + i + ".");
_$jscoverage['mongoose/document.js'][184]++;
if (! (this.schema.path(prefix + i) instanceof MixedSchema) && path[i].constructor == Object) {
_$jscoverage['mongoose/document.js'][186]++;
this.set(path[i], prefix + i);
}
else {
_$jscoverage['mongoose/document.js'][171]++;
_$jscoverage['mongoose/document.js'][188]++;
this.set(prefix + i, path[i]);

@@ -377,20 +384,29 @@ }

else {
_$jscoverage['mongoose/document.js'][175]++;
_$jscoverage['mongoose/document.js'][193]++;
var schema = this.schema.path(path), parts = path.split("."), obj = this.doc, self = this;
_$jscoverage['mongoose/document.js'][198]++;
if (this.schema.pathType(path) === "virtual") {
_$jscoverage['mongoose/document.js'][199]++;
schema = this.schema.virtualpath(path);
_$jscoverage['mongoose/document.js'][200]++;
schema.applySetters(val, this);
_$jscoverage['mongoose/document.js'][201]++;
return this;
}
_$jscoverage['mongoose/document.js'][204]++;
this.activePaths.modify(path);
_$jscoverage['mongoose/document.js'][177]++;
var schema = this.schema.path(path), parts = path.split("."), obj = this.doc, self = this;
_$jscoverage['mongoose/document.js'][182]++;
_$jscoverage['mongoose/document.js'][206]++;
if ((! schema || val === null || val === undefined) || this["try"]((function () {
_$jscoverage['mongoose/document.js'][184]++;
_$jscoverage['mongoose/document.js'][208]++;
val = schema.applySetters(schema.cast(val, self), self);
}))) {
_$jscoverage['mongoose/document.js'][187]++;
_$jscoverage['mongoose/document.js'][211]++;
for (var i = 0, l = parts.length; i < l; i++) {
_$jscoverage['mongoose/document.js'][188]++;
_$jscoverage['mongoose/document.js'][212]++;
if (i + 1 == l) {
_$jscoverage['mongoose/document.js'][189]++;
_$jscoverage['mongoose/document.js'][213]++;
obj[parts[i]] = val;
}
else {
_$jscoverage['mongoose/document.js'][191]++;
_$jscoverage['mongoose/document.js'][215]++;
obj = obj[parts[i]];

@@ -401,188 +417,195 @@ }

}
_$jscoverage['mongoose/document.js'][196]++;
_$jscoverage['mongoose/document.js'][221]++;
return this;
});
_$jscoverage['mongoose/document.js'][199]++;
_$jscoverage['mongoose/document.js'][224]++;
Document.prototype._markModified = (function (path) {
_$jscoverage['mongoose/document.js'][200]++;
_$jscoverage['mongoose/document.js'][225]++;
this.activePaths.modify(path);
});
_$jscoverage['mongoose/document.js'][210]++;
_$jscoverage['mongoose/document.js'][235]++;
Document.prototype.getValue = (function (path) {
_$jscoverage['mongoose/document.js'][211]++;
_$jscoverage['mongoose/document.js'][236]++;
var parts = path.split("."), obj = this.doc;
_$jscoverage['mongoose/document.js'][214]++;
_$jscoverage['mongoose/document.js'][239]++;
for (var i = 0, l = parts.length; i < l - 1; i++) {
_$jscoverage['mongoose/document.js'][215]++;
_$jscoverage['mongoose/document.js'][240]++;
obj = obj[parts[i]];
_$jscoverage['mongoose/document.js'][216]++;
_$jscoverage['mongoose/document.js'][241]++;
if (! obj) {
_$jscoverage['mongoose/document.js'][216]++;
_$jscoverage['mongoose/document.js'][241]++;
return obj;
}
}
_$jscoverage['mongoose/document.js'][218]++;
_$jscoverage['mongoose/document.js'][243]++;
return obj[parts[l - 1]];
});
_$jscoverage['mongoose/document.js'][229]++;
_$jscoverage['mongoose/document.js'][254]++;
Document.prototype.setValue = (function (path, val) {
_$jscoverage['mongoose/document.js'][230]++;
_$jscoverage['mongoose/document.js'][255]++;
var parts = path.split("."), obj = this.doc;
_$jscoverage['mongoose/document.js'][233]++;
_$jscoverage['mongoose/document.js'][258]++;
for (var i = 0, l = parts.length; i < l - 1; i++) {
_$jscoverage['mongoose/document.js'][233]++;
_$jscoverage['mongoose/document.js'][258]++;
obj = obj[parts[i]];
}
_$jscoverage['mongoose/document.js'][234]++;
_$jscoverage['mongoose/document.js'][259]++;
obj[parts[l - 1]] = val;
_$jscoverage['mongoose/document.js'][236]++;
_$jscoverage['mongoose/document.js'][261]++;
return this;
});
_$jscoverage['mongoose/document.js'][246]++;
_$jscoverage['mongoose/document.js'][271]++;
Document.prototype.doCast = (function (path) {
_$jscoverage['mongoose/document.js'][247]++;
_$jscoverage['mongoose/document.js'][272]++;
var schema = this.schema.path(path);
_$jscoverage['mongoose/document.js'][248]++;
_$jscoverage['mongoose/document.js'][273]++;
if (schema) {
_$jscoverage['mongoose/document.js'][249]++;
_$jscoverage['mongoose/document.js'][274]++;
this.setValue(path, this.getValue(path));
}
});
_$jscoverage['mongoose/document.js'][259]++;
_$jscoverage['mongoose/document.js'][284]++;
Document.prototype.get = (function (path) {
_$jscoverage['mongoose/document.js'][260]++;
var obj = this.doc, schema = this.schema.path(path), pieces = path.split(".");
_$jscoverage['mongoose/document.js'][264]++;
_$jscoverage['mongoose/document.js'][285]++;
var obj, schema = this.schema.path(path) || this.schema.virtualpath(path), pieces = path.split(".");
_$jscoverage['mongoose/document.js'][289]++;
obj = this.doc;
_$jscoverage['mongoose/document.js'][290]++;
for (var i = 0, l = pieces.length; i < l; i++) {
_$jscoverage['mongoose/document.js'][265]++;
_$jscoverage['mongoose/document.js'][291]++;
obj = obj[pieces[i]];
}
_$jscoverage['mongoose/document.js'][267]++;
_$jscoverage['mongoose/document.js'][293]++;
if (schema) {
_$jscoverage['mongoose/document.js'][268]++;
_$jscoverage['mongoose/document.js'][294]++;
obj = schema.applyGetters(obj, this);
}
_$jscoverage['mongoose/document.js'][270]++;
_$jscoverage['mongoose/document.js'][297]++;
return obj;
});
_$jscoverage['mongoose/document.js'][280]++;
_$jscoverage['mongoose/document.js'][306]++;
Document.prototype.commit = (function (path) {
_$jscoverage['mongoose/document.js'][308]++;
this.activePaths.modify(path);
});
_$jscoverage['mongoose/document.js'][318]++;
Document.prototype["try"] = (function (fn, scope) {
_$jscoverage['mongoose/document.js'][281]++;
_$jscoverage['mongoose/document.js'][319]++;
var res;
_$jscoverage['mongoose/document.js'][282]++;
_$jscoverage['mongoose/document.js'][320]++;
try {
_$jscoverage['mongoose/document.js'][283]++;
_$jscoverage['mongoose/document.js'][321]++;
fn.call(scope);
_$jscoverage['mongoose/document.js'][284]++;
_$jscoverage['mongoose/document.js'][322]++;
res = true;
}
catch (e) {
_$jscoverage['mongoose/document.js'][286]++;
_$jscoverage['mongoose/document.js'][324]++;
this.error(e);
_$jscoverage['mongoose/document.js'][287]++;
_$jscoverage['mongoose/document.js'][325]++;
res = false;
}
_$jscoverage['mongoose/document.js'][288]++;
_$jscoverage['mongoose/document.js'][326]++;
;
_$jscoverage['mongoose/document.js'][289]++;
_$jscoverage['mongoose/document.js'][327]++;
return res;
});
_$jscoverage['mongoose/document.js'][298]++;
_$jscoverage['mongoose/document.js'][336]++;
Document.prototype.isModified = (function (path) {
_$jscoverage['mongoose/document.js'][299]++;
_$jscoverage['mongoose/document.js'][337]++;
return (path in this.activePaths.states.modify);
});
_$jscoverage['mongoose/document.js'][308]++;
_$jscoverage['mongoose/document.js'][346]++;
Document.prototype.isInit = (function (path) {
_$jscoverage['mongoose/document.js'][309]++;
_$jscoverage['mongoose/document.js'][347]++;
return (path in this.activePaths.states.init);
});
_$jscoverage['mongoose/document.js'][319]++;
_$jscoverage['mongoose/document.js'][357]++;
Document.prototype.validate = (function (next) {
_$jscoverage['mongoose/document.js'][320]++;
_$jscoverage['mongoose/document.js'][358]++;
var total = 0, self = this, validating = {}, didErr = false;
_$jscoverage['mongoose/document.js'][325]++;
_$jscoverage['mongoose/document.js'][363]++;
if (! this.activePaths.some("init", "modify")) {
_$jscoverage['mongoose/document.js'][325]++;
_$jscoverage['mongoose/document.js'][363]++;
return next();
}
_$jscoverage['mongoose/document.js'][327]++;
_$jscoverage['mongoose/document.js'][365]++;
function validatePath(path) {
_$jscoverage['mongoose/document.js'][328]++;
_$jscoverage['mongoose/document.js'][366]++;
if (validating[path]) {
_$jscoverage['mongoose/document.js'][328]++;
_$jscoverage['mongoose/document.js'][366]++;
return;
}
_$jscoverage['mongoose/document.js'][329]++;
_$jscoverage['mongoose/document.js'][367]++;
total++;
_$jscoverage['mongoose/document.js'][330]++;
_$jscoverage['mongoose/document.js'][368]++;
process.nextTick((function () {
_$jscoverage['mongoose/document.js'][331]++;
_$jscoverage['mongoose/document.js'][369]++;
self.schema.path(path).doValidate(self.getValue(path), (function (err) {
_$jscoverage['mongoose/document.js'][332]++;
_$jscoverage['mongoose/document.js'][370]++;
if (err) {
_$jscoverage['mongoose/document.js'][333]++;
_$jscoverage['mongoose/document.js'][371]++;
didErr = true;
_$jscoverage['mongoose/document.js'][334]++;
_$jscoverage['mongoose/document.js'][372]++;
return next(err);
}
_$jscoverage['mongoose/document.js'][336]++;
_$jscoverage['mongoose/document.js'][374]++;
--total || next();
}), self);
}));
_$jscoverage['mongoose/document.js'][339]++;
_$jscoverage['mongoose/document.js'][377]++;
validating[path] = true;
}
_$jscoverage['mongoose/document.js'][342]++;
_$jscoverage['mongoose/document.js'][380]++;
this.activePaths.forEach("init", "modify", (function (path) {
_$jscoverage['mongoose/document.js'][343]++;
_$jscoverage['mongoose/document.js'][381]++;
if (! didErr) {
_$jscoverage['mongoose/document.js'][343]++;
_$jscoverage['mongoose/document.js'][381]++;
validatePath(path);
}
}));
_$jscoverage['mongoose/document.js'][346]++;
_$jscoverage['mongoose/document.js'][384]++;
return this;
});
_$jscoverage['mongoose/document.js'][356]++;
_$jscoverage['mongoose/document.js'][394]++;
Document.prototype.__defineGetter__("modified", (function () {
_$jscoverage['mongoose/document.js'][357]++;
_$jscoverage['mongoose/document.js'][395]++;
return this.activePaths.some("modified");
}));
_$jscoverage['mongoose/document.js'][366]++;
_$jscoverage['mongoose/document.js'][404]++;
function compile(tree, proto, prefix) {
_$jscoverage['mongoose/document.js'][367]++;
_$jscoverage['mongoose/document.js'][405]++;
for (var i in tree) {
_$jscoverage['mongoose/document.js'][368]++;
define(i, tree[i].constructor == Object? tree[i]: null, proto, prefix);
_$jscoverage['mongoose/document.js'][406]++;
define(i, ((tree[i].constructor == Object && Object.keys(tree[i]).length) && (! tree[i].type || tree[i].__nested)? tree[i]: null), proto, prefix);
}
}
_$jscoverage['mongoose/document.js'][369]++;
_$jscoverage['mongoose/document.js'][413]++;
;
_$jscoverage['mongoose/document.js'][371]++;
_$jscoverage['mongoose/document.js'][415]++;
function define(prop, subprops, prototype, prefix) {
_$jscoverage['mongoose/document.js'][372]++;
_$jscoverage['mongoose/document.js'][416]++;
var prefix = prefix || "", path = (prefix? prefix + ".": "") + prop;
_$jscoverage['mongoose/document.js'][375]++;
_$jscoverage['mongoose/document.js'][419]++;
if (subprops) {
_$jscoverage['mongoose/document.js'][377]++;
_$jscoverage['mongoose/document.js'][421]++;
prototype.__defineGetter__(prop, (function () {
_$jscoverage['mongoose/document.js'][378]++;
_$jscoverage['mongoose/document.js'][422]++;
if (! this.__getters) {
_$jscoverage['mongoose/document.js'][379]++;
_$jscoverage['mongoose/document.js'][423]++;
this.__getters = {};
}
_$jscoverage['mongoose/document.js'][381]++;
_$jscoverage['mongoose/document.js'][425]++;
if (! this.__getters[path]) {
_$jscoverage['mongoose/document.js'][382]++;
_$jscoverage['mongoose/document.js'][426]++;
var nested = (function () {
});
_$jscoverage['mongoose/document.js'][383]++;
_$jscoverage['mongoose/document.js'][427]++;
nested.prototype = this;
_$jscoverage['mongoose/document.js'][384]++;
_$jscoverage['mongoose/document.js'][428]++;
compile(subprops, nested.prototype, path);
_$jscoverage['mongoose/document.js'][385]++;
_$jscoverage['mongoose/document.js'][429]++;
this.__getters[path] = new nested();
}
_$jscoverage['mongoose/document.js'][388]++;
_$jscoverage['mongoose/document.js'][432]++;
return this.__getters[path];

@@ -592,10 +615,10 @@ }));

else {
_$jscoverage['mongoose/document.js'][391]++;
_$jscoverage['mongoose/document.js'][435]++;
prototype.__defineGetter__(prop, (function () {
_$jscoverage['mongoose/document.js'][392]++;
_$jscoverage['mongoose/document.js'][436]++;
return this.get(path);
}));
_$jscoverage['mongoose/document.js'][395]++;
_$jscoverage['mongoose/document.js'][439]++;
prototype.__defineSetter__(prop, (function (v) {
_$jscoverage['mongoose/document.js'][396]++;
_$jscoverage['mongoose/document.js'][440]++;
return this.set(path, v);

@@ -605,181 +628,181 @@ }));

}
_$jscoverage['mongoose/document.js'][399]++;
_$jscoverage['mongoose/document.js'][443]++;
;
_$jscoverage['mongoose/document.js'][401]++;
_$jscoverage['mongoose/document.js'][445]++;
Document.prototype.__defineSetter__("schema", (function (schema) {
_$jscoverage['mongoose/document.js'][402]++;
_$jscoverage['mongoose/document.js'][446]++;
compile(schema.tree, this);
_$jscoverage['mongoose/document.js'][403]++;
_$jscoverage['mongoose/document.js'][447]++;
this._schema = schema;
}));
_$jscoverage['mongoose/document.js'][412]++;
_$jscoverage['mongoose/document.js'][456]++;
Document.prototype.__defineGetter__("schema", (function () {
_$jscoverage['mongoose/document.js'][413]++;
_$jscoverage['mongoose/document.js'][457]++;
return this._schema;
}));
_$jscoverage['mongoose/document.js'][422]++;
_$jscoverage['mongoose/document.js'][466]++;
Document.prototype.registerHooks = (function () {
_$jscoverage['mongoose/document.js'][423]++;
_$jscoverage['mongoose/document.js'][467]++;
var self = this;
_$jscoverage['mongoose/document.js'][425]++;
_$jscoverage['mongoose/document.js'][469]++;
this.pre("save", (function checkForExistingErrors(next) {
_$jscoverage['mongoose/document.js'][426]++;
_$jscoverage['mongoose/document.js'][470]++;
if (self.saveError) {
_$jscoverage['mongoose/document.js'][427]++;
_$jscoverage['mongoose/document.js'][471]++;
next(self.saveError);
_$jscoverage['mongoose/document.js'][428]++;
_$jscoverage['mongoose/document.js'][472]++;
self.saveError = null;
}
else {
_$jscoverage['mongoose/document.js'][430]++;
_$jscoverage['mongoose/document.js'][474]++;
next();
}
}));
_$jscoverage['mongoose/document.js'][434]++;
_$jscoverage['mongoose/document.js'][478]++;
this.pre("save", (function validation(next) {
_$jscoverage['mongoose/document.js'][435]++;
_$jscoverage['mongoose/document.js'][479]++;
return self.validate.call(self, next);
}));
});
_$jscoverage['mongoose/document.js'][447]++;
_$jscoverage['mongoose/document.js'][491]++;
Document.prototype.error = (function (err) {
_$jscoverage['mongoose/document.js'][448]++;
_$jscoverage['mongoose/document.js'][492]++;
this.saveError = err;
_$jscoverage['mongoose/document.js'][449]++;
_$jscoverage['mongoose/document.js'][493]++;
return this;
});
_$jscoverage['mongoose/document.js'][458]++;
_$jscoverage['mongoose/document.js'][502]++;
Document.prototype.doQueue = (function () {
_$jscoverage['mongoose/document.js'][459]++;
_$jscoverage['mongoose/document.js'][503]++;
if (this.schema && this.schema.callQueue) {
_$jscoverage['mongoose/document.js'][460]++;
_$jscoverage['mongoose/document.js'][504]++;
for (var i = 0, l = this.schema.callQueue.length; i < l; i++) {
_$jscoverage['mongoose/document.js'][461]++;
_$jscoverage['mongoose/document.js'][505]++;
this[this.schema.callQueue[i][0]].apply(this, this.schema.callQueue[i][1]);
}
}
_$jscoverage['mongoose/document.js'][462]++;
_$jscoverage['mongoose/document.js'][506]++;
return this;
});
_$jscoverage['mongoose/document.js'][473]++;
_$jscoverage['mongoose/document.js'][517]++;
Document.prototype.toObject = (function () {
_$jscoverage['mongoose/document.js'][474]++;
_$jscoverage['mongoose/document.js'][518]++;
return clone(this.doc);
});
_$jscoverage['mongoose/document.js'][484]++;
_$jscoverage['mongoose/document.js'][528]++;
Document.prototype.toJSON = (function () {
_$jscoverage['mongoose/document.js'][485]++;
_$jscoverage['mongoose/document.js'][529]++;
return JSON.stringify(this.toObject());
});
_$jscoverage['mongoose/document.js'][495]++;
_$jscoverage['mongoose/document.js'][539]++;
function noop() {
}
_$jscoverage['mongoose/document.js'][495]++;
_$jscoverage['mongoose/document.js'][539]++;
;
_$jscoverage['mongoose/document.js'][497]++;
_$jscoverage['mongoose/document.js'][541]++;
Document.registerHooks = (function () {
_$jscoverage['mongoose/document.js'][498]++;
_$jscoverage['mongoose/document.js'][542]++;
for (var i = 0, l = arguments.length; i < l; i++) {
_$jscoverage['mongoose/document.js'][499]++;
_$jscoverage['mongoose/document.js'][543]++;
this.prototype[arguments[i]] = (function (methodName, oldFn) {
_$jscoverage['mongoose/document.js'][500]++;
_$jscoverage['mongoose/document.js'][544]++;
return (function () {
_$jscoverage['mongoose/document.js'][501]++;
_$jscoverage['mongoose/document.js'][545]++;
var self = this, args = arguments;
_$jscoverage['mongoose/document.js'][504]++;
_$jscoverage['mongoose/document.js'][548]++;
function error(err) {
_$jscoverage['mongoose/document.js'][505]++;
_$jscoverage['mongoose/document.js'][549]++;
var lastArg = args[args.length - 1];
_$jscoverage['mongoose/document.js'][506]++;
_$jscoverage['mongoose/document.js'][550]++;
if (typeof lastArg == "function") {
_$jscoverage['mongoose/document.js'][507]++;
_$jscoverage['mongoose/document.js'][551]++;
lastArg.call(self, err);
}
}
_$jscoverage['mongoose/document.js'][509]++;
_$jscoverage['mongoose/document.js'][553]++;
var pres = this.pres[methodName];
_$jscoverage['mongoose/document.js'][510]++;
_$jscoverage['mongoose/document.js'][554]++;
if (! pres) {
_$jscoverage['mongoose/document.js'][510]++;
_$jscoverage['mongoose/document.js'][554]++;
return oldFn.apply(this, args);
}
_$jscoverage['mongoose/document.js'][512]++;
_$jscoverage['mongoose/document.js'][556]++;
var pres = this.pres[methodName], chain = pres.serial.map((function (fn, i) {
_$jscoverage['mongoose/document.js'][514]++;
_$jscoverage['mongoose/document.js'][558]++;
return (function (err) {
_$jscoverage['mongoose/document.js'][515]++;
_$jscoverage['mongoose/document.js'][559]++;
if (arguments.callee._hookCalled) {
_$jscoverage['mongoose/document.js'][515]++;
_$jscoverage['mongoose/document.js'][559]++;
return;
}
_$jscoverage['mongoose/document.js'][517]++;
_$jscoverage['mongoose/document.js'][561]++;
if (err instanceof Error) {
_$jscoverage['mongoose/document.js'][518]++;
_$jscoverage['mongoose/document.js'][562]++;
error(err);
}
else {
_$jscoverage['mongoose/document.js'][520]++;
_$jscoverage['mongoose/document.js'][564]++;
fn.call(self, chain[i + 1] || parallel);
}
_$jscoverage['mongoose/document.js'][522]++;
_$jscoverage['mongoose/document.js'][566]++;
arguments.callee._hookCalled = true;
});
}));
_$jscoverage['mongoose/document.js'][526]++;
_$jscoverage['mongoose/document.js'][570]++;
chain.length? chain[0](): parallel();
_$jscoverage['mongoose/document.js'][528]++;
_$jscoverage['mongoose/document.js'][572]++;
function parallel(err) {
_$jscoverage['mongoose/document.js'][529]++;
_$jscoverage['mongoose/document.js'][573]++;
if (err instanceof Error) {
_$jscoverage['mongoose/document.js'][530]++;
_$jscoverage['mongoose/document.js'][574]++;
return error(err);
}
_$jscoverage['mongoose/document.js'][533]++;
_$jscoverage['mongoose/document.js'][577]++;
var complete = pres.parallel.length;
_$jscoverage['mongoose/document.js'][534]++;
_$jscoverage['mongoose/document.js'][578]++;
if (! complete) {
_$jscoverage['mongoose/document.js'][534]++;
_$jscoverage['mongoose/document.js'][578]++;
return oldFn.apply(self, args);
}
_$jscoverage['mongoose/document.js'][536]++;
_$jscoverage['mongoose/document.js'][580]++;
function done(err) {
_$jscoverage['mongoose/document.js'][537]++;
_$jscoverage['mongoose/document.js'][581]++;
if (err instanceof Error) {
_$jscoverage['mongoose/document.js'][538]++;
_$jscoverage['mongoose/document.js'][582]++;
return error(err);
}
_$jscoverage['mongoose/document.js'][539]++;
_$jscoverage['mongoose/document.js'][583]++;
--complete || oldFn.apply(self, args);
}
_$jscoverage['mongoose/document.js'][542]++;
_$jscoverage['mongoose/document.js'][586]++;
var chain = pres.parallel.map((function (fn, i) {
_$jscoverage['mongoose/document.js'][543]++;
_$jscoverage['mongoose/document.js'][587]++;
return (function (err) {
_$jscoverage['mongoose/document.js'][544]++;
_$jscoverage['mongoose/document.js'][588]++;
if (arguments.callee._hookCalled) {
_$jscoverage['mongoose/document.js'][544]++;
_$jscoverage['mongoose/document.js'][588]++;
return;
}
_$jscoverage['mongoose/document.js'][545]++;
_$jscoverage['mongoose/document.js'][589]++;
if (err) {
_$jscoverage['mongoose/document.js'][545]++;
_$jscoverage['mongoose/document.js'][589]++;
return error(err);
}
_$jscoverage['mongoose/document.js'][546]++;
_$jscoverage['mongoose/document.js'][590]++;
fn.call(self, chain[i + 1] || noop, (function (err) {
_$jscoverage['mongoose/document.js'][547]++;
_$jscoverage['mongoose/document.js'][591]++;
if (arguments.callee._hookCalled) {
_$jscoverage['mongoose/document.js'][547]++;
_$jscoverage['mongoose/document.js'][591]++;
return;
}
_$jscoverage['mongoose/document.js'][548]++;
_$jscoverage['mongoose/document.js'][592]++;
done(err);
_$jscoverage['mongoose/document.js'][549]++;
_$jscoverage['mongoose/document.js'][593]++;
arguments.callee._hookCalled = true;
}));
_$jscoverage['mongoose/document.js'][551]++;
_$jscoverage['mongoose/document.js'][595]++;
arguments.callee._hookCalled = true;
});
}));
_$jscoverage['mongoose/document.js'][555]++;
_$jscoverage['mongoose/document.js'][599]++;
chain[0]();

@@ -791,19 +814,19 @@ }

});
_$jscoverage['mongoose/document.js'][566]++;
_$jscoverage['mongoose/document.js'][610]++;
module.exports = Document;
_$jscoverage['mongoose/document.js'][574]++;
_$jscoverage['mongoose/document.js'][618]++;
function DocumentError() {
_$jscoverage['mongoose/document.js'][575]++;
_$jscoverage['mongoose/document.js'][619]++;
MongooseError.call(this, msg);
_$jscoverage['mongoose/document.js'][576]++;
_$jscoverage['mongoose/document.js'][620]++;
MongooseError.captureStackTrace(this, arguments.callee);
_$jscoverage['mongoose/document.js'][577]++;
_$jscoverage['mongoose/document.js'][621]++;
this.name = "DocumentError";
}
_$jscoverage['mongoose/document.js'][578]++;
_$jscoverage['mongoose/document.js'][622]++;
;
_$jscoverage['mongoose/document.js'][584]++;
_$jscoverage['mongoose/document.js'][628]++;
DocumentError.prototype.__proto__ = MongooseError.prototype;
_$jscoverage['mongoose/document.js'][586]++;
_$jscoverage['mongoose/document.js'][630]++;
exports.Error = DocumentError;
_$jscoverage['mongoose/document.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , MongooseError = require('./error')"," , Schema = require('./schema')"," , ArrayType = require('./types/array')"," , DocumentArraySchema = require('./schema/documentarray')"," , utils = require('./utils')"," , clone = utils.clone"," , ActiveRoster = utils.StateMachine.ctor('require', 'modify', 'init');","","/**"," * Document constructor."," *"," * @param {Object} values to set"," * @api private"," */","","function Document (obj) {"," this.doc = this.buildDoc();"," this.activePaths = new ActiveRoster();"," this.saveError = null;"," if (obj) this.set(obj);"," this.pres = {};"," this.registerHooks();"," this.doQueue();"," this.isNew = true;","};","","/**"," * Inherit from EventEmitter."," */","","Document.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Base Mongoose instance for the model. Set by the Mongoose instance upon"," * pre-compilation."," *"," * @api public"," */","","Document.prototype.base;","","/**"," * Document schema as a nested structure."," *"," * @api public"," */","","Document.prototype.schema;","","/**"," * Whether the document is new."," *"," * @api public"," */","","Document.prototype.isNew;","","/**"," * Builds the default doc structure"," *"," * @api private"," */","","Document.prototype.buildDoc = function () {"," var doc = {}"," , self = this;",""," this.schema.eachPath( function (i, type) {"," var path = i.split('.')"," , len = path.length;",""," path.reduce( function (ref, piece, i) {"," if (i === len-1)"," ref[piece] = type.getDefault(self);"," else"," return ref[piece] || (ref[piece] = {});"," }, doc);"," });",""," return doc;","};","","/**"," * Inits (hydrates) the document."," *"," * @param {Object} document returned by mongo"," * @api private"," */","","Document.prototype.init = function (doc, fn) {"," var self = this;"," this.isNew = false;",""," function init (obj, doc, prefix) {"," prefix = prefix || '';",""," for (var i in obj){"," var path = prefix + i;",""," if (obj[i] &amp;&amp; obj[i].constructor == Object){"," doc[i] = {};"," init(obj[i], doc[i], path + '.');"," } else {"," if (obj[i] !== null &amp;&amp; obj[i] !== undefined) {"," var schema = self.schema.path(path);",""," if (schema)"," self.try(function(){"," doc[i] = schema.cast(obj[i], self);"," });"," else"," doc[i] = obj[i];"," }",""," // mark as hydrated"," self.activePaths.init(path);"," }"," }"," };",""," init(doc, self.doc);",""," if (fn)"," fn(null);",""," return this;","};","","/**"," * Registers a middleware that is executed before a method."," *"," * @param {String} method name"," * @param {Function} callback"," * @api public"," */","","Document.prototype.pre = function (method, fn) {"," if (!(method in this.pres))"," this.pres[method] = {"," serial: []"," , parallel: []"," };"," this.pres[method][fn.length == 1 ? 'serial' : 'parallel'].push(fn);"," return this;","};","","/**"," * Sets a path"," *"," * @param {String} key path"," * @param {Object} value"," * @param {Boolean} whether to apply transformations: cast, setters (true) "," * @param {Boolean} whether to mark dirty (true)"," * @param {Boolean} whether this is an initialization"," * @api public"," */","","Document.prototype.set = function (path, val) {"," if (typeof path != 'string'){"," var prefix = val ? val + '.' : '';"," for (var i in path){"," if (path[i].constructor == Object)"," this.set(path[i], prefix + i + '.');"," else"," this.set(prefix + i, path[i]);"," }"," } else {"," // TODO: do actual checking to see if the value changed"," this.activePaths.modify(path);",""," var schema = this.schema.path(path)"," , parts = path.split('.')"," , obj = this.doc"," , self = this;",""," if ( (!schema || val === null || val === undefined) || "," this.try(function(){"," val = schema.applySetters(schema.cast(val, self), self);"," })"," ){"," for (var i = 0, l = parts.length; i &lt; l; i++){"," if (i + 1 == l)"," obj[parts[i]] = val;"," else "," obj = obj[parts[i]];"," }"," }"," }",""," return this;","};","","Document.prototype._markModified = function (path) {"," this.activePaths.modify(path);","};","","/**"," * Gets a raw value from a path (no getters)"," *"," * @param {String} path"," * @api private"," */","","Document.prototype.getValue = function (path) {"," var parts = path.split('.')"," , obj = this.doc;",""," for (var i = 0, l = parts.length; i &lt; l-1; i++) {"," obj = obj[parts[i]];"," if (!obj) return obj;"," }"," return obj[parts[l-1]];","};","","/**"," * Sets a raw value for a path (no casting, setters, transformations)"," *"," * @param {String} path"," * @param {Object} value"," * @api private"," */","","Document.prototype.setValue = function (path, val) {"," var parts = path.split('.')"," , obj = this.doc;",""," for (var i = 0, l = parts.length; i &lt; l-1; i++) obj = obj[parts[i]];"," obj[parts[l-1]] = val;",""," return this;","};","","/**"," * Triggers casting on a specific path"," *"," * @param {String} path"," * @api public"," */","","Document.prototype.doCast = function (path) {"," var schema = this.schema.path(path);"," if (schema)"," this.setValue(path, this.getValue(path));","};","","/**"," * Gets a path"," *"," * @param {String} key path"," * @api public"," */","","Document.prototype.get = function (path) {"," var obj = this.doc"," , schema = this.schema.path(path)"," , pieces = path.split('.');",""," for (var i = 0, l = pieces.length; i &lt; l; i++)"," obj = obj[pieces[i]];",""," if (schema)"," obj = schema.applyGetters(obj, this);",""," return obj;","};","","/**"," * Captures an exception that will be bubbled to `save`"," *"," * @param {Function} function to execute"," * @param {Object} scope"," */","","Document.prototype.try = function (fn, scope) {"," var res;"," try {"," fn.call(scope);"," res = true;"," } catch(e){"," this.error(e);"," res = false;"," };"," return res;","};","","/**"," * Checks if a path is modified"," *"," * @param {String} path"," */","","Document.prototype.isModified = function (path) {"," return (path in this.activePaths.states.modify);","};","","/**"," * Checks if a certain path was initialized"," *"," * @param {String} path"," */","","Document.prototype.isInit = function (path) {"," return (path in this.activePaths.states.init);","};","","/**"," * Validation middleware"," *"," * @param {Function} next"," * @api private"," */","","Document.prototype.validate = function (next) {"," var total = 0"," , self = this"," , validating = {}"," , didErr = false;",""," if (!this.activePaths.some('init', 'modify')) return next();",""," function validatePath (path) {"," if (validating[path]) return;"," total++;"," process.nextTick(function(){"," self.schema.path(path).doValidate(self.getValue(path), function(err){"," if (err) {"," didErr = true;"," return next(err);"," }"," --total || next();"," }, self);"," });"," validating[path] = true;"," }",""," this.activePaths.forEach('init', 'modify', function (path) {"," if (!didErr) validatePath(path);"," });",""," return this;","};","","/**"," * Returns if the document has been modified"," *"," * @return {Boolean}"," * @api public"," */","","Document.prototype.__defineGetter__('modified', function () {"," return this.activePaths.some('modified');","});","","/**"," * We override the schema setter to compile accessors"," *"," * @api private"," */","","function compile (tree, proto, prefix) {"," for (var i in tree)"," define(i, tree[i].constructor == Object ? tree[i] : null, proto, prefix);","};","","function define (prop, subprops, prototype, prefix) {"," var prefix = prefix || ''"," , path = (prefix ? prefix + '.' : '') + prop;",""," if (subprops) {"," // if prop hasn't been defined"," prototype.__defineGetter__(prop, function () {"," if (!this.__getters)"," this.__getters = {};",""," if (!this.__getters[path]){"," var nested = function(){};"," nested.prototype = this;"," compile(subprops, nested.prototype, path);"," this.__getters[path] = new nested();"," }",""," return this.__getters[path];"," });"," } else {"," prototype.__defineGetter__(prop, function () {"," return this.get(path);"," });",""," prototype.__defineSetter__(prop, function (v) {"," return this.set(path, v);"," });"," }","};","","Document.prototype.__defineSetter__('schema', function (schema) {"," compile(schema.tree, this);"," this._schema = schema;","});","","/**"," * We override the schema getter to return the internal reference"," *"," * @api private"," */","","Document.prototype.__defineGetter__('schema', function () {"," return this._schema;","});","","/**"," * Register default hooks"," *"," * @api private"," */","","Document.prototype.registerHooks = function () {"," var self = this;",""," this.pre('save', function checkForExistingErrors (next) {"," if (self.saveError){"," next(self.saveError);"," self.saveError = null;"," } else {"," next();"," }"," });",""," this.pre('save', function validation (next) {"," return self.validate.call(self, next);"," });","};","","/**"," * Registers an error"," * TODO: handle multiple"," *"," * @param {Error} error"," * @api private"," */","","Document.prototype.error = function (err) {"," this.saveError = err;"," return this;","};","","/**"," * Executes methods queued from the Schema definition"," *"," * @api private"," */","","Document.prototype.doQueue = function () {"," if (this.schema &amp;&amp; this.schema.callQueue)"," for (var i = 0, l = this.schema.callQueue.length; i &lt; l; i++)"," this[this.schema.callQueue[i][0]].apply(this, this.schema.callQueue[i][1]);"," return this;","};","","/**"," * Gets the document"," *"," * @todo Should we apply getters?"," * @return {Object} plain object"," * @api public"," */","","Document.prototype.toObject = function () {"," return clone(this.doc);","};","","/**"," * Returns a JSON string for the document"," *"," * @return {String} JSON representation"," * @api public"," */","","Document.prototype.toJSON = function () {"," return JSON.stringify(this.toObject());","};","","/**"," * Wrap methods for hooks. Should be called on implemented classes (eg: Model)"," * Takes multiple method names as arguments."," *"," * @api private"," */","","function noop () {};","","Document.registerHooks = function () {"," for (var i = 0, l = arguments.length; i &lt; l; i++){"," this.prototype[arguments[i]] = (function(methodName, oldFn){"," return function () {"," var self = this"," , args = arguments;",""," function error (err){"," var lastArg = args[args.length-1];"," if (typeof lastArg == 'function')"," lastArg.call(self, err);"," }"," var pres = this.pres[methodName];"," if (!pres) return oldFn.apply(this, args);",""," var pres = this.pres[methodName]"," , chain = pres.serial.map(function (fn, i) {"," return function (err) {"," if (arguments.callee._hookCalled) return;",""," if (err instanceof Error)"," error(err);"," else"," fn.call(self, chain[i+1] || parallel);",""," arguments.callee._hookCalled = true;"," };"," });",""," chain.length ? chain[0]() : parallel();",""," function parallel (err) {"," if (err instanceof Error)"," return error(err);",""," // chain determines execution, callbacks completeness"," var complete = pres.parallel.length;"," if (!complete) return oldFn.apply(self, args);"," "," function done (err) {"," if (err instanceof Error)"," return error(err);"," --complete || oldFn.apply(self, args);"," }",""," var chain = pres.parallel.map(function (fn, i) {"," return function (err) {"," if (arguments.callee._hookCalled) return;"," if (err) return error(err);"," fn.call(self, chain[i+1] || noop, function (err) {"," if (arguments.callee._hookCalled) return;"," done(err);"," arguments.callee._hookCalled = true;"," });"," arguments.callee._hookCalled = true;"," };"," });"," "," chain[0]();"," }"," };"," })(arguments[i], this.prototype[arguments[i]]);"," }","};","","/**"," * Module exports."," */","","module.exports = Document;","","/**"," * Document Error"," *"," * @param text"," */","","function DocumentError () {"," MongooseError.call(this, msg);"," MongooseError.captureStackTrace(this, arguments.callee);"," this.name = 'DocumentError';","};","","/**"," * Inherits from MongooseError."," */","","DocumentError.prototype.__proto__ = MongooseError.prototype;","","exports.Error = DocumentError;"];
_$jscoverage['mongoose/document.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , MongooseError = require('./error')"," , Schema = require('./schema')"," , SchemaType = require('./schematype')"," , VirtualType = require('./virtualtype')"," , ArrayType = require('./types/array')"," , MixedSchema = require('./schema/mixed')"," , DocumentArraySchema = require('./schema/documentarray')"," , utils = require('./utils')"," , clone = utils.clone"," , ActiveRoster = utils.StateMachine.ctor('require', 'modify', 'init');","","/**"," * Document constructor."," *"," * @param {Object} values to set"," * @api private"," */","","function Document (obj) {"," this.doc = this.buildDoc();"," this.activePaths = new ActiveRoster();"," this.saveError = null;"," if (obj) this.set(obj);"," this.pres = {};"," this.registerHooks();"," this.doQueue();"," this.isNew = true;","};","","/**"," * Inherit from EventEmitter."," */","","Document.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Base Mongoose instance for the model. Set by the Mongoose instance upon"," * pre-compilation."," *"," * @api public"," */","","Document.prototype.base;","","/**"," * Document schema as a nested structure."," *"," * @api public"," */","","Document.prototype.schema;","","/**"," * Whether the document is new."," *"," * @api public"," */","","Document.prototype.isNew;","","/**"," * Builds the default doc structure"," *"," * @api private"," */","","Document.prototype.buildDoc = function () {"," var doc = {}"," , self = this;",""," this.schema.eachPath( function (i, type) {"," var path = i.split('.')"," , len = path.length;",""," path.reduce( function (ref, piece, i) {"," if (i === len-1)"," ref[piece] = type.getDefault(self);"," else"," return ref[piece] || (ref[piece] = {});"," }, doc);"," });",""," return doc;","};","","/**"," * Inits (hydrates) the document."," *"," * @param {Object} document returned by mongo"," * @api private"," */","","Document.prototype.init = function (doc, fn) {"," var self = this;"," this.isNew = false;",""," function init (obj, doc, prefix) {"," prefix = prefix || '';",""," for (var i in obj){"," var path = prefix + i"," , schema = self.schema.path(path);",""," if (!schema &amp;&amp; obj[i].constructor == Object){ // assume nested object"," doc[i] = {};"," init(obj[i], doc[i], path + '.');"," } else {"," if (obj[i] !== null &amp;&amp; obj[i] !== undefined) {"," var schema = self.schema.path(path);",""," if (schema)"," self.try(function(){"," doc[i] = schema.cast(obj[i], self);"," });"," else"," doc[i] = obj[i];"," }",""," // mark as hydrated"," self.activePaths.init(path);"," }"," }"," };",""," init(doc, self.doc);",""," if (fn)"," fn(null);",""," return this;","};","","/**"," * Registers a middleware that is executed before a method."," *"," * @param {String} method name"," * @param {Function} callback"," * @api public"," */","","Document.prototype.pre = function (method, fn) {"," if (!(method in this.pres))"," this.pres[method] = {"," serial: []"," , parallel: []"," };"," this.pres[method][fn.length == 1 ? 'serial' : 'parallel'].push(fn);"," return this;","};","","/**"," * Sets a path, or many paths"," *"," * Examples:"," * // path, value"," * doc.set(path, value)"," *"," * // object"," * doc.set({"," * path : value"," * , path2 : {"," * path : value"," * }"," * }"," *"," * @param {String/Object} key path, or object"," * @param {Object} value, or undefined if first parameter is an object"," * @param {Boolean} whether to apply transformations: cast, setters (true) "," * @param {Boolean} whether to mark dirty (true)"," * @param {Boolean} whether this is an initialization"," * @api public"," */","","Document.prototype.set = function (path, val) {"," if (typeof path != 'string'){"," var prefix = val ? val + '.' : '';"," for (var i in path){"," if (!(this.schema.path(prefix + i) instanceof MixedSchema)"," &amp;&amp; path[i].constructor == Object) {"," this.set(path[i], prefix + i);"," } else {"," this.set(prefix + i, path[i]);"," }"," }"," } else {"," // TODO: do actual checking to see if the value changed"," var schema = this.schema.path(path)"," , parts = path.split('.')"," , obj = this.doc"," , self = this;",""," if (this.schema.pathType(path) === 'virtual') {"," schema = this.schema.virtualpath(path);"," schema.applySetters(val, this);"," return this;"," }",""," this.activePaths.modify(path);",""," if ( (!schema || val === null || val === undefined) || "," this.try(function(){"," val = schema.applySetters(schema.cast(val, self), self);"," })"," ){"," for (var i = 0, l = parts.length; i &lt; l; i++){"," if (i + 1 == l)"," obj[parts[i]] = val;"," else {"," obj = obj[parts[i]];"," }"," }"," }"," }",""," return this;","};","","Document.prototype._markModified = function (path) {"," this.activePaths.modify(path);","};","","/**"," * Gets a raw value from a path (no getters)"," *"," * @param {String} path"," * @api private"," */","","Document.prototype.getValue = function (path) {"," var parts = path.split('.')"," , obj = this.doc;",""," for (var i = 0, l = parts.length; i &lt; l-1; i++) {"," obj = obj[parts[i]];"," if (!obj) return obj;"," }"," return obj[parts[l-1]];","};","","/**"," * Sets a raw value for a path (no casting, setters, transformations)"," *"," * @param {String} path"," * @param {Object} value"," * @api private"," */","","Document.prototype.setValue = function (path, val) {"," var parts = path.split('.')"," , obj = this.doc;",""," for (var i = 0, l = parts.length; i &lt; l-1; i++) obj = obj[parts[i]];"," obj[parts[l-1]] = val;",""," return this;","};","","/**"," * Triggers casting on a specific path"," *"," * @param {String} path"," * @api public"," */","","Document.prototype.doCast = function (path) {"," var schema = this.schema.path(path);"," if (schema)"," this.setValue(path, this.getValue(path));","};","","/**"," * Gets a path"," *"," * @param {String} key path"," * @api public"," */","","Document.prototype.get = function (path) {"," var obj"," , schema = this.schema.path(path) || this.schema.virtualpath(path)"," , pieces = path.split('.');",""," obj = this.doc;"," for (var i = 0, l = pieces.length; i &lt; l; i++)"," obj = obj[pieces[i]];"," "," if (schema)"," obj = schema.applyGetters(obj, this);"," // TODO Cache obj",""," return obj;","};","","/**"," * Commits a path, marking as modified if needed. Useful for mixed keys"," *"," * @api public"," */","","Document.prototype.commit = function (path) {"," // TODO: do actual checking to see if the value changed"," this.activePaths.modify(path);","};","","/**"," * Captures an exception that will be bubbled to `save`"," *"," * @param {Function} function to execute"," * @param {Object} scope"," */","","Document.prototype.try = function (fn, scope) {"," var res;"," try {"," fn.call(scope);"," res = true;"," } catch(e){"," this.error(e);"," res = false;"," };"," return res;","};","","/**"," * Checks if a path is modified"," *"," * @param {String} path"," */","","Document.prototype.isModified = function (path) {"," return (path in this.activePaths.states.modify);","};","","/**"," * Checks if a certain path was initialized"," *"," * @param {String} path"," */","","Document.prototype.isInit = function (path) {"," return (path in this.activePaths.states.init);","};","","/**"," * Validation middleware"," *"," * @param {Function} next"," * @api private"," */","","Document.prototype.validate = function (next) {"," var total = 0"," , self = this"," , validating = {}"," , didErr = false;",""," if (!this.activePaths.some('init', 'modify')) return next();",""," function validatePath (path) {"," if (validating[path]) return;"," total++;"," process.nextTick(function(){"," self.schema.path(path).doValidate(self.getValue(path), function(err){"," if (err) {"," didErr = true;"," return next(err);"," }"," --total || next();"," }, self);"," });"," validating[path] = true;"," }",""," this.activePaths.forEach('init', 'modify', function (path) {"," if (!didErr) validatePath(path);"," });",""," return this;","};","","/**"," * Returns if the document has been modified"," *"," * @return {Boolean}"," * @api public"," */","","Document.prototype.__defineGetter__('modified', function () {"," return this.activePaths.some('modified');","});","","/**"," * We override the schema setter to compile accessors"," *"," * @api private"," */","","function compile (tree, proto, prefix) {"," for (var i in tree)"," define(i, ((tree[i].constructor == Object"," &amp;&amp; Object.keys(tree[i]).length)"," &amp;&amp; (!tree[i].type || tree[i].__nested)"," ? tree[i]"," : null)"," , proto"," , prefix);","};","","function define (prop, subprops, prototype, prefix) {"," var prefix = prefix || ''"," , path = (prefix ? prefix + '.' : '') + prop;",""," if (subprops) {"," // if prop hasn't been defined"," prototype.__defineGetter__(prop, function () {"," if (!this.__getters)"," this.__getters = {};",""," if (!this.__getters[path]){"," var nested = function(){};"," nested.prototype = this;"," compile(subprops, nested.prototype, path);"," this.__getters[path] = new nested();"," }",""," return this.__getters[path];"," });"," } else {"," prototype.__defineGetter__(prop, function () {"," return this.get(path);"," });",""," prototype.__defineSetter__(prop, function (v) {"," return this.set(path, v);"," });"," }","};","","Document.prototype.__defineSetter__('schema', function (schema) {"," compile(schema.tree, this);"," this._schema = schema;","});","","/**"," * We override the schema getter to return the internal reference"," *"," * @api private"," */","","Document.prototype.__defineGetter__('schema', function () {"," return this._schema;","});","","/**"," * Register default hooks"," *"," * @api private"," */","","Document.prototype.registerHooks = function () {"," var self = this;",""," this.pre('save', function checkForExistingErrors (next) {"," if (self.saveError){"," next(self.saveError);"," self.saveError = null;"," } else {"," next();"," }"," });",""," this.pre('save', function validation (next) {"," return self.validate.call(self, next);"," });","};","","/**"," * Registers an error"," * TODO: handle multiple"," *"," * @param {Error} error"," * @api private"," */","","Document.prototype.error = function (err) {"," this.saveError = err;"," return this;","};","","/**"," * Executes methods queued from the Schema definition"," *"," * @api private"," */","","Document.prototype.doQueue = function () {"," if (this.schema &amp;&amp; this.schema.callQueue)"," for (var i = 0, l = this.schema.callQueue.length; i &lt; l; i++)"," this[this.schema.callQueue[i][0]].apply(this, this.schema.callQueue[i][1]);"," return this;","};","","/**"," * Gets the document"," *"," * @todo Should we apply getters?"," * @return {Object} plain object"," * @api public"," */","","Document.prototype.toObject = function () {"," return clone(this.doc);","};","","/**"," * Returns a JSON string for the document"," *"," * @return {String} JSON representation"," * @api public"," */","","Document.prototype.toJSON = function () {"," return JSON.stringify(this.toObject());","};","","/**"," * Wrap methods for hooks. Should be called on implemented classes (eg: Model)"," * Takes multiple method names as arguments."," *"," * @api private"," */","","function noop () {};","","Document.registerHooks = function () {"," for (var i = 0, l = arguments.length; i &lt; l; i++){"," this.prototype[arguments[i]] = (function(methodName, oldFn){"," return function () {"," var self = this"," , args = arguments;",""," function error (err){"," var lastArg = args[args.length-1];"," if (typeof lastArg == 'function')"," lastArg.call(self, err);"," }"," var pres = this.pres[methodName];"," if (!pres) return oldFn.apply(this, args);",""," var pres = this.pres[methodName]"," , chain = pres.serial.map(function (fn, i) {"," return function (err) {"," if (arguments.callee._hookCalled) return;",""," if (err instanceof Error)"," error(err);"," else"," fn.call(self, chain[i+1] || parallel);",""," arguments.callee._hookCalled = true;"," };"," });",""," chain.length ? chain[0]() : parallel();",""," function parallel (err) {"," if (err instanceof Error)"," return error(err);",""," // chain determines execution, callbacks completeness"," var complete = pres.parallel.length;"," if (!complete) return oldFn.apply(self, args);"," "," function done (err) {"," if (err instanceof Error)"," return error(err);"," --complete || oldFn.apply(self, args);"," }",""," var chain = pres.parallel.map(function (fn, i) {"," return function (err) {"," if (arguments.callee._hookCalled) return;"," if (err) return error(err);"," fn.call(self, chain[i+1] || noop, function (err) {"," if (arguments.callee._hookCalled) return;"," done(err);"," arguments.callee._hookCalled = true;"," });"," arguments.callee._hookCalled = true;"," };"," });"," "," chain[0]();"," }"," };"," })(arguments[i], this.prototype[arguments[i]]);"," }","};","","/**"," * Module exports."," */","","module.exports = Document;","","/**"," * Document Error"," *"," * @param text"," */","","function DocumentError () {"," MongooseError.call(this, msg);"," MongooseError.captureStackTrace(this, arguments.callee);"," this.name = 'DocumentError';","};","","/**"," * Inherits from MongooseError."," */","","DocumentError.prototype.__proto__ = MongooseError.prototype;","","exports.Error = DocumentError;"];

@@ -6,5 +6,2 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/index.js'][6] = 0;
_$jscoverage['mongoose/index.js'][19] = 0;
_$jscoverage['mongoose/index.js'][20] = 0;
_$jscoverage['mongoose/index.js'][21] = 0;
_$jscoverage['mongoose/index.js'][22] = 0;

@@ -15,19 +12,19 @@ _$jscoverage['mongoose/index.js'][23] = 0;

_$jscoverage['mongoose/index.js'][26] = 0;
_$jscoverage['mongoose/index.js'][40] = 0;
_$jscoverage['mongoose/index.js'][42] = 0;
_$jscoverage['mongoose/index.js'][27] = 0;
_$jscoverage['mongoose/index.js'][28] = 0;
_$jscoverage['mongoose/index.js'][29] = 0;
_$jscoverage['mongoose/index.js'][43] = 0;
_$jscoverage['mongoose/index.js'][44] = 0;
_$jscoverage['mongoose/index.js'][45] = 0;
_$jscoverage['mongoose/index.js'][68] = 0;
_$jscoverage['mongoose/index.js'][69] = 0;
_$jscoverage['mongoose/index.js'][70] = 0;
_$jscoverage['mongoose/index.js'][46] = 0;
_$jscoverage['mongoose/index.js'][47] = 0;
_$jscoverage['mongoose/index.js'][48] = 0;
_$jscoverage['mongoose/index.js'][71] = 0;
_$jscoverage['mongoose/index.js'][72] = 0;
_$jscoverage['mongoose/index.js'][73] = 0;
_$jscoverage['mongoose/index.js'][83] = 0;
_$jscoverage['mongoose/index.js'][84] = 0;
_$jscoverage['mongoose/index.js'][85] = 0;
_$jscoverage['mongoose/index.js'][95] = 0;
_$jscoverage['mongoose/index.js'][96] = 0;
_$jscoverage['mongoose/index.js'][97] = 0;
_$jscoverage['mongoose/index.js'][74] = 0;
_$jscoverage['mongoose/index.js'][75] = 0;
_$jscoverage['mongoose/index.js'][76] = 0;
_$jscoverage['mongoose/index.js'][86] = 0;
_$jscoverage['mongoose/index.js'][87] = 0;
_$jscoverage['mongoose/index.js'][88] = 0;
_$jscoverage['mongoose/index.js'][98] = 0;

@@ -37,118 +34,124 @@ _$jscoverage['mongoose/index.js'][99] = 0;

_$jscoverage['mongoose/index.js'][101] = 0;
_$jscoverage['mongoose/index.js'][102] = 0;
_$jscoverage['mongoose/index.js'][103] = 0;
_$jscoverage['mongoose/index.js'][104] = 0;
_$jscoverage['mongoose/index.js'][117] = 0;
_$jscoverage['mongoose/index.js'][119] = 0;
_$jscoverage['mongoose/index.js'][107] = 0;
_$jscoverage['mongoose/index.js'][120] = 0;
_$jscoverage['mongoose/index.js'][121] = 0;
_$jscoverage['mongoose/index.js'][122] = 0;
_$jscoverage['mongoose/index.js'][123] = 0;
_$jscoverage['mongoose/index.js'][124] = 0;
_$jscoverage['mongoose/index.js'][127] = 0;
_$jscoverage['mongoose/index.js'][128] = 0;
_$jscoverage['mongoose/index.js'][129] = 0;
_$jscoverage['mongoose/index.js'][130] = 0;
_$jscoverage['mongoose/index.js'][131] = 0;
_$jscoverage['mongoose/index.js'][132] = 0;
_$jscoverage['mongoose/index.js'][133] = 0;
_$jscoverage['mongoose/index.js'][134] = 0;
_$jscoverage['mongoose/index.js'][135] = 0;
_$jscoverage['mongoose/index.js'][137] = 0;
_$jscoverage['mongoose/index.js'][138] = 0;
_$jscoverage['mongoose/index.js'][141] = 0;
_$jscoverage['mongoose/index.js'][142] = 0;
_$jscoverage['mongoose/index.js'][144] = 0;
_$jscoverage['mongoose/index.js'][145] = 0;
_$jscoverage['mongoose/index.js'][151] = 0;
_$jscoverage['mongoose/index.js'][152] = 0;
_$jscoverage['mongoose/index.js'][147] = 0;
_$jscoverage['mongoose/index.js'][148] = 0;
_$jscoverage['mongoose/index.js'][154] = 0;
_$jscoverage['mongoose/index.js'][155] = 0;
_$jscoverage['mongoose/index.js'][157] = 0;
_$jscoverage['mongoose/index.js'][169] = 0;
_$jscoverage['mongoose/index.js'][170] = 0;
_$jscoverage['mongoose/index.js'][171] = 0;
_$jscoverage['mongoose/index.js'][180] = 0;
_$jscoverage['mongoose/index.js'][181] = 0;
_$jscoverage['mongoose/index.js'][190] = 0;
_$jscoverage['mongoose/index.js'][192] = 0;
_$jscoverage['mongoose/index.js'][158] = 0;
_$jscoverage['mongoose/index.js'][160] = 0;
_$jscoverage['mongoose/index.js'][172] = 0;
_$jscoverage['mongoose/index.js'][173] = 0;
_$jscoverage['mongoose/index.js'][174] = 0;
_$jscoverage['mongoose/index.js'][183] = 0;
_$jscoverage['mongoose/index.js'][184] = 0;
_$jscoverage['mongoose/index.js'][193] = 0;
_$jscoverage['mongoose/index.js'][195] = 0;
_$jscoverage['mongoose/index.js'][196] = 0;
_$jscoverage['mongoose/index.js'][197] = 0;
_$jscoverage['mongoose/index.js'][198] = 0;
_$jscoverage['mongoose/index.js'][205] = 0;
_$jscoverage['mongoose/index.js'][213] = 0;
_$jscoverage['mongoose/index.js'][221] = 0;
_$jscoverage['mongoose/index.js'][229] = 0;
_$jscoverage['mongoose/index.js'][237] = 0;
_$jscoverage['mongoose/index.js'][245] = 0;
_$jscoverage['mongoose/index.js'][253] = 0;
_$jscoverage['mongoose/index.js'][261] = 0;
_$jscoverage['mongoose/index.js'][269] = 0;
_$jscoverage['mongoose/index.js'][277] = 0;
_$jscoverage['mongoose/index.js'][285] = 0;
_$jscoverage['mongoose/index.js'][293] = 0;
_$jscoverage['mongoose/index.js'][301] = 0;
_$jscoverage['mongoose/index.js'][199] = 0;
_$jscoverage['mongoose/index.js'][200] = 0;
_$jscoverage['mongoose/index.js'][201] = 0;
_$jscoverage['mongoose/index.js'][208] = 0;
_$jscoverage['mongoose/index.js'][216] = 0;
_$jscoverage['mongoose/index.js'][224] = 0;
_$jscoverage['mongoose/index.js'][232] = 0;
_$jscoverage['mongoose/index.js'][240] = 0;
_$jscoverage['mongoose/index.js'][248] = 0;
_$jscoverage['mongoose/index.js'][256] = 0;
_$jscoverage['mongoose/index.js'][264] = 0;
_$jscoverage['mongoose/index.js'][272] = 0;
_$jscoverage['mongoose/index.js'][280] = 0;
_$jscoverage['mongoose/index.js'][288] = 0;
_$jscoverage['mongoose/index.js'][296] = 0;
_$jscoverage['mongoose/index.js'][304] = 0;
_$jscoverage['mongoose/index.js'][312] = 0;
_$jscoverage['mongoose/index.js'][320] = 0;
_$jscoverage['mongoose/index.js'][328] = 0;
}
_$jscoverage['mongoose/index.js'][6]++;
var Schema = require("./schema"), SchemaType = require("./schematype"), SchemaTypes = Schema.Types, Types = require("./types"), Model = require("./model"), utils = require("./utils");
_$jscoverage['mongoose/index.js'][19]++;
var Schema = require("./schema"), SchemaType = require("./schematype"), VirtualType = require("./virtualtype"), SchemaTypes = Schema.Types, Types = require("./types"), Query = require("./query"), Promise = require("./promise"), Model = require("./model"), utils = require("./utils");
_$jscoverage['mongoose/index.js'][22]++;
function Mongoose() {
_$jscoverage['mongoose/index.js'][20]++;
_$jscoverage['mongoose/index.js'][23]++;
this.connections = [];
_$jscoverage['mongoose/index.js'][21]++;
_$jscoverage['mongoose/index.js'][24]++;
this.plugins = [];
_$jscoverage['mongoose/index.js'][22]++;
_$jscoverage['mongoose/index.js'][25]++;
this.models = {};
_$jscoverage['mongoose/index.js'][23]++;
_$jscoverage['mongoose/index.js'][26]++;
this.modelSchemas = {};
_$jscoverage['mongoose/index.js'][24]++;
_$jscoverage['mongoose/index.js'][27]++;
this.options = {};
_$jscoverage['mongoose/index.js'][25]++;
_$jscoverage['mongoose/index.js'][28]++;
this.createConnection();
}
_$jscoverage['mongoose/index.js'][26]++;
_$jscoverage['mongoose/index.js'][29]++;
;
_$jscoverage['mongoose/index.js'][40]++;
_$jscoverage['mongoose/index.js'][43]++;
Mongoose.prototype.set = Mongoose.prototype.get = (function (key, value) {
_$jscoverage['mongoose/index.js'][42]++;
_$jscoverage['mongoose/index.js'][45]++;
if (arguments.length == 1) {
_$jscoverage['mongoose/index.js'][43]++;
_$jscoverage['mongoose/index.js'][46]++;
return this.options[key];
}
_$jscoverage['mongoose/index.js'][44]++;
_$jscoverage['mongoose/index.js'][47]++;
this.options[key] = value;
_$jscoverage['mongoose/index.js'][45]++;
_$jscoverage['mongoose/index.js'][48]++;
return this;
});
_$jscoverage['mongoose/index.js'][68]++;
_$jscoverage['mongoose/index.js'][71]++;
Mongoose.prototype.createConnection = (function () {
_$jscoverage['mongoose/index.js'][69]++;
_$jscoverage['mongoose/index.js'][72]++;
var conn = new Connection(this);
_$jscoverage['mongoose/index.js'][70]++;
_$jscoverage['mongoose/index.js'][73]++;
this.connections.push(conn);
_$jscoverage['mongoose/index.js'][71]++;
_$jscoverage['mongoose/index.js'][74]++;
if (arguments.length) {
_$jscoverage['mongoose/index.js'][72]++;
_$jscoverage['mongoose/index.js'][75]++;
conn.open.apply(conn, arguments);
}
_$jscoverage['mongoose/index.js'][73]++;
_$jscoverage['mongoose/index.js'][76]++;
return conn;
});
_$jscoverage['mongoose/index.js'][83]++;
_$jscoverage['mongoose/index.js'][86]++;
Mongoose.prototype.connect = (function () {
_$jscoverage['mongoose/index.js'][84]++;
_$jscoverage['mongoose/index.js'][87]++;
this.connection.open.apply(this.connection, arguments);
_$jscoverage['mongoose/index.js'][85]++;
_$jscoverage['mongoose/index.js'][88]++;
return this;
});
_$jscoverage['mongoose/index.js'][95]++;
_$jscoverage['mongoose/index.js'][98]++;
Mongoose.prototype.disconnect = (function (fn) {
_$jscoverage['mongoose/index.js'][96]++;
_$jscoverage['mongoose/index.js'][99]++;
var count = this.connections.length;
_$jscoverage['mongoose/index.js'][97]++;
_$jscoverage['mongoose/index.js'][100]++;
this.connections.forEach((function (conn) {
_$jscoverage['mongoose/index.js'][98]++;
_$jscoverage['mongoose/index.js'][101]++;
conn.close((function (err) {
_$jscoverage['mongoose/index.js'][99]++;
_$jscoverage['mongoose/index.js'][102]++;
if (err) {
_$jscoverage['mongoose/index.js'][99]++;
_$jscoverage['mongoose/index.js'][102]++;
return fn(err);
}
_$jscoverage['mongoose/index.js'][100]++;
_$jscoverage['mongoose/index.js'][103]++;
if (fn) {
_$jscoverage['mongoose/index.js'][101]++;
_$jscoverage['mongoose/index.js'][104]++;
--count || fn();

@@ -158,26 +161,26 @@ }

}));
_$jscoverage['mongoose/index.js'][104]++;
_$jscoverage['mongoose/index.js'][107]++;
return this;
});
_$jscoverage['mongoose/index.js'][117]++;
_$jscoverage['mongoose/index.js'][120]++;
Mongoose.prototype.model = (function (name, schema, collection, skipInit) {
_$jscoverage['mongoose/index.js'][119]++;
_$jscoverage['mongoose/index.js'][122]++;
if (! (schema instanceof Schema)) {
_$jscoverage['mongoose/index.js'][120]++;
_$jscoverage['mongoose/index.js'][123]++;
collection = schema;
_$jscoverage['mongoose/index.js'][121]++;
_$jscoverage['mongoose/index.js'][124]++;
schema = false;
}
_$jscoverage['mongoose/index.js'][124]++;
_$jscoverage['mongoose/index.js'][127]++;
collection = collection || utils.toCollectionName(name);
_$jscoverage['mongoose/index.js'][127]++;
_$jscoverage['mongoose/index.js'][130]++;
if (schema) {
_$jscoverage['mongoose/index.js'][128]++;
_$jscoverage['mongoose/index.js'][131]++;
if (! this.modelSchemas[name]) {
_$jscoverage['mongoose/index.js'][129]++;
_$jscoverage['mongoose/index.js'][132]++;
this.modelSchemas[name] = schema;
_$jscoverage['mongoose/index.js'][130]++;
_$jscoverage['mongoose/index.js'][133]++;
for (var i = 0, l = this.plugins.length; i < l; i++) {
_$jscoverage['mongoose/index.js'][131]++;
schema.plugin(this.plugins[i]);
_$jscoverage['mongoose/index.js'][134]++;
schema.plugin(this.plugins[i][0], this.plugins[i][1]);
}

@@ -187,87 +190,93 @@ }

else {
_$jscoverage['mongoose/index.js'][134]++;
_$jscoverage['mongoose/index.js'][137]++;
if (! this.modelSchemas[name]) {
_$jscoverage['mongoose/index.js'][135]++;
_$jscoverage['mongoose/index.js'][138]++;
throw new Error("Schema hasn't been registered for model \"" + name + "\".\n" + "Use Mongoose.define(name, schema)");
}
_$jscoverage['mongoose/index.js'][138]++;
_$jscoverage['mongoose/index.js'][141]++;
var conn = this.connection, model;
_$jscoverage['mongoose/index.js'][141]++;
_$jscoverage['mongoose/index.js'][144]++;
if (! this.models[collection]) {
_$jscoverage['mongoose/index.js'][142]++;
_$jscoverage['mongoose/index.js'][145]++;
this.models[collection] = {};
}
_$jscoverage['mongoose/index.js'][144]++;
_$jscoverage['mongoose/index.js'][147]++;
if (! this.models[collection][name]) {
_$jscoverage['mongoose/index.js'][145]++;
_$jscoverage['mongoose/index.js'][148]++;
model = Model.compile(name, this.modelSchemas[name], collection, conn, this);
_$jscoverage['mongoose/index.js'][151]++;
_$jscoverage['mongoose/index.js'][154]++;
if (! skipInit) {
_$jscoverage['mongoose/index.js'][152]++;
_$jscoverage['mongoose/index.js'][155]++;
model.init();
}
_$jscoverage['mongoose/index.js'][154]++;
_$jscoverage['mongoose/index.js'][157]++;
this.models[collection][name] = model;
}
_$jscoverage['mongoose/index.js'][155]++;
_$jscoverage['mongoose/index.js'][158]++;
;
_$jscoverage['mongoose/index.js'][157]++;
_$jscoverage['mongoose/index.js'][160]++;
return this.models[collection][name];
}
});
_$jscoverage['mongoose/index.js'][169]++;
Mongoose.prototype.plugin = (function (fn) {
_$jscoverage['mongoose/index.js'][170]++;
this.plugins.push(fn);
_$jscoverage['mongoose/index.js'][171]++;
_$jscoverage['mongoose/index.js'][172]++;
Mongoose.prototype.plugin = (function (fn, opts) {
_$jscoverage['mongoose/index.js'][173]++;
this.plugins.push([fn, opts]);
_$jscoverage['mongoose/index.js'][174]++;
return this;
});
_$jscoverage['mongoose/index.js'][180]++;
_$jscoverage['mongoose/index.js'][183]++;
Mongoose.prototype.__defineGetter__("connection", (function () {
_$jscoverage['mongoose/index.js'][181]++;
_$jscoverage['mongoose/index.js'][184]++;
return this.connections[0];
}));
_$jscoverage['mongoose/index.js'][190]++;
_$jscoverage['mongoose/index.js'][193]++;
var compat = false;
_$jscoverage['mongoose/index.js'][192]++;
_$jscoverage['mongoose/index.js'][195]++;
exports.__defineGetter__("compat", (function () {
_$jscoverage['mongoose/index.js'][193]++;
_$jscoverage['mongoose/index.js'][196]++;
return compat;
}));
_$jscoverage['mongoose/index.js'][196]++;
_$jscoverage['mongoose/index.js'][199]++;
exports.__defineSetter__("compat", (function (v) {
_$jscoverage['mongoose/index.js'][197]++;
_$jscoverage['mongoose/index.js'][200]++;
compat = v;
_$jscoverage['mongoose/index.js'][198]++;
_$jscoverage['mongoose/index.js'][201]++;
if (v) {
_$jscoverage['mongoose/index.js'][198]++;
_$jscoverage['mongoose/index.js'][201]++;
require("./compat");
}
}));
_$jscoverage['mongoose/index.js'][205]++;
_$jscoverage['mongoose/index.js'][208]++;
var driver = global.MONGOOSE_DRIVER_PATH || "./drivers/node-mongodb-native";
_$jscoverage['mongoose/index.js'][213]++;
_$jscoverage['mongoose/index.js'][216]++;
var Connection = require(driver + "/connection");
_$jscoverage['mongoose/index.js'][221]++;
_$jscoverage['mongoose/index.js'][224]++;
var Collection = require(driver + "/collection");
_$jscoverage['mongoose/index.js'][229]++;
_$jscoverage['mongoose/index.js'][232]++;
module.exports = exports = new Mongoose();
_$jscoverage['mongoose/index.js'][237]++;
_$jscoverage['mongoose/index.js'][240]++;
exports.Collection = Collection;
_$jscoverage['mongoose/index.js'][245]++;
_$jscoverage['mongoose/index.js'][248]++;
exports.Connection = Connection;
_$jscoverage['mongoose/index.js'][253]++;
_$jscoverage['mongoose/index.js'][256]++;
exports.version = "1.0.0";
_$jscoverage['mongoose/index.js'][261]++;
_$jscoverage['mongoose/index.js'][264]++;
exports.Mongoose = Mongoose;
_$jscoverage['mongoose/index.js'][269]++;
_$jscoverage['mongoose/index.js'][272]++;
exports.Schema = Schema;
_$jscoverage['mongoose/index.js'][277]++;
_$jscoverage['mongoose/index.js'][280]++;
exports.SchemaType = SchemaType;
_$jscoverage['mongoose/index.js'][285]++;
_$jscoverage['mongoose/index.js'][288]++;
exports.VirtualType = VirtualType;
_$jscoverage['mongoose/index.js'][296]++;
exports.SchemaTypes = SchemaTypes;
_$jscoverage['mongoose/index.js'][293]++;
_$jscoverage['mongoose/index.js'][304]++;
exports.Types = Types;
_$jscoverage['mongoose/index.js'][301]++;
_$jscoverage['mongoose/index.js'][312]++;
exports.Query = Query;
_$jscoverage['mongoose/index.js'][320]++;
exports.Promise = Promise;
_$jscoverage['mongoose/index.js'][328]++;
exports.Error = require("./error");
_$jscoverage['mongoose/index.js'].source = ["","/**"," * Module dependencies."," */","","var Schema = require('./schema')"," , SchemaType = require('./schematype')"," , SchemaTypes = Schema.Types"," , Types = require('./types')"," , Model = require('./model')"," , utils = require('./utils');","","/**"," * Mongoose constructor. Most apps will only use one instance."," *"," * @api public"," */","","function Mongoose () {"," this.connections = [];"," this.plugins = [];"," this.models = {};"," this.modelSchemas = {};"," this.options = {};"," this.createConnection(); // default connection","};","","/**"," * Sets/gets mongoose options"," *"," * Examples:"," * mongoose.set('test') // returns the 'test' value"," * mongoose.set('test', value) // sets the 'test' value"," *"," * @param {String} key"," * @param {String} value"," * @api public"," */","","Mongoose.prototype.set =","Mongoose.prototype.get = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Creates a Connection instance."," *"," * Examples:"," *"," * // with mongodb:// URI"," * db = mongoose.createConnection('mongodb://localhost:port/database');"," *"," * // with [host, database_name[, port] signature "," * db = mongoose.createConnection('localhost', 'database', port)"," *"," * // initialize now, connect later"," * db = mongoose.createConnection();"," * db.open('localhost', 'database', port);"," *"," * @param {String} mongodb:// URI"," * @return {Connection} the created Connection object"," * @api public"," */","","Mongoose.prototype.createConnection = function () {"," var conn = new Connection(this);"," this.connections.push(conn);"," if (arguments.length)"," conn.open.apply(conn, arguments);"," return conn;","};","","/**"," * Connects the default mongoose connection"," *"," * @see {Mongoose#createConnection}"," * @api public"," */","","Mongoose.prototype.connect = function (){"," this.connection.open.apply(this.connection, arguments);"," return this;","};","","/**"," * Disconnects from all connections."," *"," * @param {Function} optional callback"," * @api public"," */","","Mongoose.prototype.disconnect = function (fn) {"," var count = this.connections.length;"," this.connections.forEach(function(conn){"," conn.close(function(err){"," if (err) return fn(err);"," if (fn)"," --count || fn();"," });"," });"," return this;","};","","/**"," * Defines a model or retrieves it"," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name (optional, induced from model name)"," * @param {Boolean} whether to skip initialization (defaults to false)"," * @api public"," */","","Mongoose.prototype.model = function (name, schema, collection, skipInit) {"," // normalize collection"," if (!(schema instanceof Schema)){"," collection = schema;"," schema = false;"," }",""," collection = collection || utils.toCollectionName(name);"," "," // look up models for the collection"," if (schema){"," if (!this.modelSchemas[name]) {"," this.modelSchemas[name] = schema;"," for (var i = 0, l = this.plugins.length; i &lt; l; i++)"," schema.plugin(this.plugins[i]);"," }"," } else {"," if (!this.modelSchemas[name])"," throw new Error('Schema hasn\\'t been registered for model \"' + name + '\".\\n'"," + 'Use Mongoose.define(name, schema)');",""," var conn = this.connection"," , model;",""," if (!this.models[collection])"," this.models[collection] = {};",""," if (!this.models[collection][name]){"," model = Model.compile(name"," , this.modelSchemas[name]"," , collection"," , conn"," , this);",""," if (!skipInit)"," model.init();",""," this.models[collection][name] = model;"," };",""," return this.models[collection][name];"," }","};","","/**"," * Declares a plugin executed on Schemas. Equivalent to calling `.plugin(fn)`"," * on each Schema you create."," *"," * @param {Function} plugin callback"," * @api public"," */","","Mongoose.prototype.plugin = function (fn) {"," this.plugins.push(fn);"," return this;","};","","/**"," * Default connection"," *"," * @api public"," */","","Mongoose.prototype.__defineGetter__('connection', function(){"," return this.connections[0];","});","","/**"," * Compat flag."," *"," * @api public"," */","","var compat = false;","","exports.__defineGetter__('compat', function(){"," return compat;","});","","exports.__defineSetter__('compat', function(v){"," compat = v;"," if (v) require('./compat');","});","","/**"," * Driver depentend APIs"," */","","var driver = global.MONGOOSE_DRIVER_PATH || './drivers/node-mongodb-native';","","/**"," * Connection"," *"," * @api public"," */","","var Connection = require(driver + '/connection');","","/**"," * Collection"," *"," * @api public"," */","","var Collection = require(driver + '/collection');","","/**"," * Export default singleton."," * "," * @api public"," */","","module.exports = exports = new Mongoose();","","/**"," * Collection"," *"," * @api public"," */","","exports.Collection = Collection;","","/**"," * Connection"," *"," * @api public"," */","","exports.Connection = Connection;","","/**"," * Exports Mongoose version"," *"," * @param version"," */","","exports.version = '1.0.0';","","/**"," * Export Mongoose constructor"," *"," * @api public"," */","","exports.Mongoose = Mongoose;","","/**"," * Export Schema constructor"," *"," * @api public"," */","","exports.Schema = Schema;","","/**"," * Export SchemaType constructor."," *"," * @api public"," */","","exports.SchemaType = SchemaType;","","/**"," * Export Schema types"," *"," * @api public"," */","","exports.SchemaTypes = SchemaTypes;","","/**"," * Export types"," *"," * @api public"," */","","exports.Types = Types;","","/**"," * Export MongooseError"," *"," * @api public"," */","","exports.Error = require('./error');"];
_$jscoverage['mongoose/index.js'].source = ["","/**"," * Module dependencies."," */","","var Schema = require('./schema')"," , SchemaType = require('./schematype')"," , VirtualType = require('./virtualtype')"," , SchemaTypes = Schema.Types"," , Types = require('./types')"," , Query = require('./query')"," , Promise = require('./promise')"," , Model = require('./model')"," , utils = require('./utils');","","/**"," * Mongoose constructor. Most apps will only use one instance."," *"," * @api public"," */","","function Mongoose () {"," this.connections = [];"," this.plugins = [];"," this.models = {};"," this.modelSchemas = {};"," this.options = {};"," this.createConnection(); // default connection","};","","/**"," * Sets/gets mongoose options"," *"," * Examples:"," * mongoose.set('test') // returns the 'test' value"," * mongoose.set('test', value) // sets the 'test' value"," *"," * @param {String} key"," * @param {String} value"," * @api public"," */","","Mongoose.prototype.set =","Mongoose.prototype.get = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Creates a Connection instance."," *"," * Examples:"," *"," * // with mongodb:// URI"," * db = mongoose.createConnection('mongodb://localhost:port/database');"," *"," * // with [host, database_name[, port] signature "," * db = mongoose.createConnection('localhost', 'database', port)"," *"," * // initialize now, connect later"," * db = mongoose.createConnection();"," * db.open('localhost', 'database', port);"," *"," * @param {String} mongodb:// URI"," * @return {Connection} the created Connection object"," * @api public"," */","","Mongoose.prototype.createConnection = function () {"," var conn = new Connection(this);"," this.connections.push(conn);"," if (arguments.length)"," conn.open.apply(conn, arguments);"," return conn;","};","","/**"," * Connects the default mongoose connection"," *"," * @see {Mongoose#createConnection}"," * @api public"," */","","Mongoose.prototype.connect = function (){"," this.connection.open.apply(this.connection, arguments);"," return this;","};","","/**"," * Disconnects from all connections."," *"," * @param {Function} optional callback"," * @api public"," */","","Mongoose.prototype.disconnect = function (fn) {"," var count = this.connections.length;"," this.connections.forEach(function(conn){"," conn.close(function(err){"," if (err) return fn(err);"," if (fn)"," --count || fn();"," });"," });"," return this;","};","","/**"," * Defines a model or retrieves it"," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name (optional, induced from model name)"," * @param {Boolean} whether to skip initialization (defaults to false)"," * @api public"," */","","Mongoose.prototype.model = function (name, schema, collection, skipInit) {"," // normalize collection"," if (!(schema instanceof Schema)){"," collection = schema;"," schema = false;"," }",""," collection = collection || utils.toCollectionName(name);"," "," // look up models for the collection"," if (schema){"," if (!this.modelSchemas[name]) {"," this.modelSchemas[name] = schema;"," for (var i = 0, l = this.plugins.length; i &lt; l; i++)"," schema.plugin(this.plugins[i][0], this.plugins[i][1]);"," }"," } else {"," if (!this.modelSchemas[name])"," throw new Error('Schema hasn\\'t been registered for model \"' + name + '\".\\n'"," + 'Use Mongoose.define(name, schema)');",""," var conn = this.connection"," , model;",""," if (!this.models[collection])"," this.models[collection] = {};",""," if (!this.models[collection][name]){"," model = Model.compile(name"," , this.modelSchemas[name]"," , collection"," , conn"," , this);",""," if (!skipInit)"," model.init();",""," this.models[collection][name] = model;"," };",""," return this.models[collection][name];"," }","};","","/**"," * Declares a plugin executed on Schemas. Equivalent to calling `.plugin(fn)`"," * on each Schema you create."," *"," * @param {Function} plugin callback"," * @api public"," */","","Mongoose.prototype.plugin = function (fn, opts) {"," this.plugins.push([fn, opts]);"," return this;","};","","/**"," * Default connection"," *"," * @api public"," */","","Mongoose.prototype.__defineGetter__('connection', function(){"," return this.connections[0];","});","","/**"," * Compat flag."," *"," * @api public"," */","","var compat = false;","","exports.__defineGetter__('compat', function(){"," return compat;","});","","exports.__defineSetter__('compat', function(v){"," compat = v;"," if (v) require('./compat');","});","","/**"," * Driver depentend APIs"," */","","var driver = global.MONGOOSE_DRIVER_PATH || './drivers/node-mongodb-native';","","/**"," * Connection"," *"," * @api public"," */","","var Connection = require(driver + '/connection');","","/**"," * Collection"," *"," * @api public"," */","","var Collection = require(driver + '/collection');","","/**"," * Export default singleton."," * "," * @api public"," */","","module.exports = exports = new Mongoose();","","/**"," * Collection"," *"," * @api public"," */","","exports.Collection = Collection;","","/**"," * Connection"," *"," * @api public"," */","","exports.Connection = Connection;","","/**"," * Exports Mongoose version"," *"," * @param version"," */","","exports.version = '1.0.0';","","/**"," * Export Mongoose constructor"," *"," * @api public"," */","","exports.Mongoose = Mongoose;","","/**"," * Export Schema constructor"," *"," * @api public"," */","","exports.Schema = Schema;","","/**"," * Export SchemaType constructor."," *"," * @api public"," */","","exports.SchemaType = SchemaType;","","/**"," * Export VirtualType constructor."," *"," * @api public"," */","","exports.VirtualType = VirtualType;","","/**"," * Export Schema types"," *"," * @api public"," */","","exports.SchemaTypes = SchemaTypes;","","/**"," * Export types"," *"," * @api public"," */","","exports.Types = Types;","","/**"," * Export Query"," *"," * @api public"," */","","exports.Query = Query;","","/**"," * Export Promise"," *"," * @api public"," */","","exports.Promise = Promise;","","/**"," * Export MongooseError"," *"," * @api public"," */","","exports.Error = require('./error');"];

@@ -16,65 +16,69 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/model.js'][67] = 0;
_$jscoverage['mongoose/model.js'][70] = 0;
_$jscoverage['mongoose/model.js'][73] = 0;
_$jscoverage['mongoose/model.js'][74] = 0;
_$jscoverage['mongoose/model.js'][68] = 0;
_$jscoverage['mongoose/model.js'][71] = 0;
_$jscoverage['mongoose/model.js'][75] = 0;
_$jscoverage['mongoose/model.js'][76] = 0;
_$jscoverage['mongoose/model.js'][77] = 0;
_$jscoverage['mongoose/model.js'][78] = 0;
_$jscoverage['mongoose/model.js'][79] = 0;
_$jscoverage['mongoose/model.js'][82] = 0;
_$jscoverage['mongoose/model.js'][83] = 0;
_$jscoverage['mongoose/model.js'][84] = 0;
_$jscoverage['mongoose/model.js'][85] = 0;
_$jscoverage['mongoose/model.js'][86] = 0;
_$jscoverage['mongoose/model.js'][87] = 0;
_$jscoverage['mongoose/model.js'][90] = 0;
_$jscoverage['mongoose/model.js'][94] = 0;
_$jscoverage['mongoose/model.js'][96] = 0;
_$jscoverage['mongoose/model.js'][99] = 0;
_$jscoverage['mongoose/model.js'][106] = 0;
_$jscoverage['mongoose/model.js'][107] = 0;
_$jscoverage['mongoose/model.js'][109] = 0;
_$jscoverage['mongoose/model.js'][110] = 0;
_$jscoverage['mongoose/model.js'][112] = 0;
_$jscoverage['mongoose/model.js'][111] = 0;
_$jscoverage['mongoose/model.js'][113] = 0;
_$jscoverage['mongoose/model.js'][116] = 0;
_$jscoverage['mongoose/model.js'][117] = 0;
_$jscoverage['mongoose/model.js'][115] = 0;
_$jscoverage['mongoose/model.js'][118] = 0;
_$jscoverage['mongoose/model.js'][119] = 0;
_$jscoverage['mongoose/model.js'][123] = 0;
_$jscoverage['mongoose/model.js'][132] = 0;
_$jscoverage['mongoose/model.js'][134] = 0;
_$jscoverage['mongoose/model.js'][137] = 0;
_$jscoverage['mongoose/model.js'][141] = 0;
_$jscoverage['mongoose/model.js'][121] = 0;
_$jscoverage['mongoose/model.js'][122] = 0;
_$jscoverage['mongoose/model.js'][124] = 0;
_$jscoverage['mongoose/model.js'][135] = 0;
_$jscoverage['mongoose/model.js'][136] = 0;
_$jscoverage['mongoose/model.js'][138] = 0;
_$jscoverage['mongoose/model.js'][139] = 0;
_$jscoverage['mongoose/model.js'][142] = 0;
_$jscoverage['mongoose/model.js'][143] = 0;
_$jscoverage['mongoose/model.js'][146] = 0;
_$jscoverage['mongoose/model.js'][144] = 0;
_$jscoverage['mongoose/model.js'][145] = 0;
_$jscoverage['mongoose/model.js'][149] = 0;
_$jscoverage['mongoose/model.js'][151] = 0;
_$jscoverage['mongoose/model.js'][152] = 0;
_$jscoverage['mongoose/model.js'][153] = 0;
_$jscoverage['mongoose/model.js'][154] = 0;
_$jscoverage['mongoose/model.js'][155] = 0;
_$jscoverage['mongoose/model.js'][156] = 0;
_$jscoverage['mongoose/model.js'][157] = 0;
_$jscoverage['mongoose/model.js'][158] = 0;
_$jscoverage['mongoose/model.js'][159] = 0;
_$jscoverage['mongoose/model.js'][161] = 0;
_$jscoverage['mongoose/model.js'][168] = 0;
_$jscoverage['mongoose/model.js'][160] = 0;
_$jscoverage['mongoose/model.js'][163] = 0;
_$jscoverage['mongoose/model.js'][167] = 0;
_$jscoverage['mongoose/model.js'][169] = 0;
_$jscoverage['mongoose/model.js'][172] = 0;
_$jscoverage['mongoose/model.js'][175] = 0;
_$jscoverage['mongoose/model.js'][177] = 0;
_$jscoverage['mongoose/model.js'][178] = 0;
_$jscoverage['mongoose/model.js'][179] = 0;
_$jscoverage['mongoose/model.js'][180] = 0;
_$jscoverage['mongoose/model.js'][181] = 0;
_$jscoverage['mongoose/model.js'][182] = 0;
_$jscoverage['mongoose/model.js'][183] = 0;
_$jscoverage['mongoose/model.js'][184] = 0;
_$jscoverage['mongoose/model.js'][185] = 0;
_$jscoverage['mongoose/model.js'][186] = 0;
_$jscoverage['mongoose/model.js'][187] = 0;
_$jscoverage['mongoose/model.js'][194] = 0;
_$jscoverage['mongoose/model.js'][196] = 0;
_$jscoverage['mongoose/model.js'][200] = 0;
_$jscoverage['mongoose/model.js'][201] = 0;
_$jscoverage['mongoose/model.js'][202] = 0;
_$jscoverage['mongoose/model.js'][213] = 0;
_$jscoverage['mongoose/model.js'][221] = 0;
_$jscoverage['mongoose/model.js'][229] = 0;
_$jscoverage['mongoose/model.js'][235] = 0;
_$jscoverage['mongoose/model.js'][236] = 0;
_$jscoverage['mongoose/model.js'][237] = 0;
_$jscoverage['mongoose/model.js'][245] = 0;
_$jscoverage['mongoose/model.js'][251] = 0;
_$jscoverage['mongoose/model.js'][203] = 0;
_$jscoverage['mongoose/model.js'][204] = 0;
_$jscoverage['mongoose/model.js'][211] = 0;
_$jscoverage['mongoose/model.js'][212] = 0;
_$jscoverage['mongoose/model.js'][220] = 0;
_$jscoverage['mongoose/model.js'][222] = 0;
_$jscoverage['mongoose/model.js'][226] = 0;
_$jscoverage['mongoose/model.js'][227] = 0;
_$jscoverage['mongoose/model.js'][228] = 0;
_$jscoverage['mongoose/model.js'][239] = 0;
_$jscoverage['mongoose/model.js'][247] = 0;
_$jscoverage['mongoose/model.js'][255] = 0;
_$jscoverage['mongoose/model.js'][261] = 0;
_$jscoverage['mongoose/model.js'][262] = 0;
_$jscoverage['mongoose/model.js'][263] = 0;
_$jscoverage['mongoose/model.js'][265] = 0;
_$jscoverage['mongoose/model.js'][266] = 0;
_$jscoverage['mongoose/model.js'][267] = 0;
_$jscoverage['mongoose/model.js'][270] = 0;
_$jscoverage['mongoose/model.js'][271] = 0;
_$jscoverage['mongoose/model.js'][274] = 0;
_$jscoverage['mongoose/model.js'][275] = 0;
_$jscoverage['mongoose/model.js'][277] = 0;

@@ -84,77 +88,106 @@ _$jscoverage['mongoose/model.js'][279] = 0;

_$jscoverage['mongoose/model.js'][281] = 0;
_$jscoverage['mongoose/model.js'][282] = 0;
_$jscoverage['mongoose/model.js'][284] = 0;
_$jscoverage['mongoose/model.js'][298] = 0;
_$jscoverage['mongoose/model.js'][299] = 0;
_$jscoverage['mongoose/model.js'][300] = 0;
_$jscoverage['mongoose/model.js'][301] = 0;
_$jscoverage['mongoose/model.js'][302] = 0;
_$jscoverage['mongoose/model.js'][303] = 0;
_$jscoverage['mongoose/model.js'][304] = 0;
_$jscoverage['mongoose/model.js'][305] = 0;
_$jscoverage['mongoose/model.js'][308] = 0;
_$jscoverage['mongoose/model.js'][306] = 0;
_$jscoverage['mongoose/model.js'][309] = 0;
_$jscoverage['mongoose/model.js'][310] = 0;
_$jscoverage['mongoose/model.js'][311] = 0;
_$jscoverage['mongoose/model.js'][312] = 0;
_$jscoverage['mongoose/model.js'][314] = 0;
_$jscoverage['mongoose/model.js'][315] = 0;
_$jscoverage['mongoose/model.js'][330] = 0;
_$jscoverage['mongoose/model.js'][331] = 0;
_$jscoverage['mongoose/model.js'][316] = 0;
_$jscoverage['mongoose/model.js'][319] = 0;
_$jscoverage['mongoose/model.js'][333] = 0;
_$jscoverage['mongoose/model.js'][334] = 0;
_$jscoverage['mongoose/model.js'][335] = 0;
_$jscoverage['mongoose/model.js'][336] = 0;
_$jscoverage['mongoose/model.js'][337] = 0;
_$jscoverage['mongoose/model.js'][338] = 0;
_$jscoverage['mongoose/model.js'][339] = 0;
_$jscoverage['mongoose/model.js'][341] = 0;
_$jscoverage['mongoose/model.js'][344] = 0;
_$jscoverage['mongoose/model.js'][363] = 0;
_$jscoverage['mongoose/model.js'][340] = 0;
_$jscoverage['mongoose/model.js'][343] = 0;
_$jscoverage['mongoose/model.js'][345] = 0;
_$jscoverage['mongoose/model.js'][346] = 0;
_$jscoverage['mongoose/model.js'][349] = 0;
_$jscoverage['mongoose/model.js'][364] = 0;
_$jscoverage['mongoose/model.js'][366] = 0;
_$jscoverage['mongoose/model.js'][367] = 0;
_$jscoverage['mongoose/model.js'][365] = 0;
_$jscoverage['mongoose/model.js'][368] = 0;
_$jscoverage['mongoose/model.js'][369] = 0;
_$jscoverage['mongoose/model.js'][370] = 0;
_$jscoverage['mongoose/model.js'][371] = 0;
_$jscoverage['mongoose/model.js'][372] = 0;
_$jscoverage['mongoose/model.js'][373] = 0;
_$jscoverage['mongoose/model.js'][374] = 0;
_$jscoverage['mongoose/model.js'][376] = 0;
_$jscoverage['mongoose/model.js'][379] = 0;
_$jscoverage['mongoose/model.js'][381] = 0;
_$jscoverage['mongoose/model.js'][378] = 0;
_$jscoverage['mongoose/model.js'][380] = 0;
_$jscoverage['mongoose/model.js'][382] = 0;
_$jscoverage['mongoose/model.js'][383] = 0;
_$jscoverage['mongoose/model.js'][384] = 0;
_$jscoverage['mongoose/model.js'][399] = 0;
_$jscoverage['mongoose/model.js'][400] = 0;
_$jscoverage['mongoose/model.js'][412] = 0;
_$jscoverage['mongoose/model.js'][413] = 0;
_$jscoverage['mongoose/model.js'][386] = 0;
_$jscoverage['mongoose/model.js'][387] = 0;
_$jscoverage['mongoose/model.js'][389] = 0;
_$jscoverage['mongoose/model.js'][390] = 0;
_$jscoverage['mongoose/model.js'][392] = 0;
_$jscoverage['mongoose/model.js'][395] = 0;
_$jscoverage['mongoose/model.js'][414] = 0;
_$jscoverage['mongoose/model.js'][415] = 0;
_$jscoverage['mongoose/model.js'][416] = 0;
_$jscoverage['mongoose/model.js'][419] = 0;
_$jscoverage['mongoose/model.js'][420] = 0;
_$jscoverage['mongoose/model.js'][417] = 0;
_$jscoverage['mongoose/model.js'][418] = 0;
_$jscoverage['mongoose/model.js'][421] = 0;
_$jscoverage['mongoose/model.js'][422] = 0;
_$jscoverage['mongoose/model.js'][424] = 0;
_$jscoverage['mongoose/model.js'][426] = 0;
_$jscoverage['mongoose/model.js'][425] = 0;
_$jscoverage['mongoose/model.js'][427] = 0;
_$jscoverage['mongoose/model.js'][441] = 0;
_$jscoverage['mongoose/model.js'][442] = 0;
_$jscoverage['mongoose/model.js'][444] = 0;
_$jscoverage['mongoose/model.js'][445] = 0;
_$jscoverage['mongoose/model.js'][446] = 0;
_$jscoverage['mongoose/model.js'][428] = 0;
_$jscoverage['mongoose/model.js'][430] = 0;
_$jscoverage['mongoose/model.js'][433] = 0;
_$jscoverage['mongoose/model.js'][435] = 0;
_$jscoverage['mongoose/model.js'][436] = 0;
_$jscoverage['mongoose/model.js'][437] = 0;
_$jscoverage['mongoose/model.js'][438] = 0;
_$jscoverage['mongoose/model.js'][439] = 0;
_$jscoverage['mongoose/model.js'][454] = 0;
_$jscoverage['mongoose/model.js'][455] = 0;
_$jscoverage['mongoose/model.js'][467] = 0;
_$jscoverage['mongoose/model.js'][468] = 0;
_$jscoverage['mongoose/model.js'][470] = 0;
_$jscoverage['mongoose/model.js'][471] = 0;
_$jscoverage['mongoose/model.js'][472] = 0;
_$jscoverage['mongoose/model.js'][474] = 0;
_$jscoverage['mongoose/model.js'][475] = 0;
_$jscoverage['mongoose/model.js'][479] = 0;
_$jscoverage['mongoose/model.js'][494] = 0;
_$jscoverage['mongoose/model.js'][496] = 0;
_$jscoverage['mongoose/model.js'][497] = 0;
_$jscoverage['mongoose/model.js'][498] = 0;
_$jscoverage['mongoose/model.js'][477] = 0;
_$jscoverage['mongoose/model.js'][478] = 0;
_$jscoverage['mongoose/model.js'][480] = 0;
_$jscoverage['mongoose/model.js'][482] = 0;
_$jscoverage['mongoose/model.js'][484] = 0;
_$jscoverage['mongoose/model.js'][485] = 0;
_$jscoverage['mongoose/model.js'][486] = 0;
_$jscoverage['mongoose/model.js'][500] = 0;
_$jscoverage['mongoose/model.js'][501] = 0;
_$jscoverage['mongoose/model.js'][502] = 0;
_$jscoverage['mongoose/model.js'][503] = 0;
_$jscoverage['mongoose/model.js'][504] = 0;
_$jscoverage['mongoose/model.js'][505] = 0;
_$jscoverage['mongoose/model.js'][506] = 0;
_$jscoverage['mongoose/model.js'][509] = 0;
_$jscoverage['mongoose/model.js'][510] = 0;
_$jscoverage['mongoose/model.js'][513] = 0;
_$jscoverage['mongoose/model.js'][514] = 0;
_$jscoverage['mongoose/model.js'][516] = 0;
_$jscoverage['mongoose/model.js'][530] = 0;
_$jscoverage['mongoose/model.js'][531] = 0;
_$jscoverage['mongoose/model.js'][533] = 0;
_$jscoverage['mongoose/model.js'][534] = 0;
_$jscoverage['mongoose/model.js'][538] = 0;
_$jscoverage['mongoose/model.js'][553] = 0;
_$jscoverage['mongoose/model.js'][555] = 0;
_$jscoverage['mongoose/model.js'][556] = 0;
_$jscoverage['mongoose/model.js'][557] = 0;
_$jscoverage['mongoose/model.js'][559] = 0;
_$jscoverage['mongoose/model.js'][560] = 0;
_$jscoverage['mongoose/model.js'][561] = 0;
_$jscoverage['mongoose/model.js'][562] = 0;
_$jscoverage['mongoose/model.js'][563] = 0;
_$jscoverage['mongoose/model.js'][564] = 0;
_$jscoverage['mongoose/model.js'][565] = 0;
_$jscoverage['mongoose/model.js'][568] = 0;
_$jscoverage['mongoose/model.js'][569] = 0;
_$jscoverage['mongoose/model.js'][572] = 0;
_$jscoverage['mongoose/model.js'][573] = 0;
_$jscoverage['mongoose/model.js'][575] = 0;
}

@@ -184,20 +217,32 @@ _$jscoverage['mongoose/model.js'][6]++;

this.collection.insert(this.toObject(), fn);
_$jscoverage['mongoose/model.js'][68]++;
this.isNew = false;
}
else {
_$jscoverage['mongoose/model.js'][70]++;
var self = this, delta;
_$jscoverage['mongoose/model.js'][73]++;
_$jscoverage['mongoose/model.js'][71]++;
var self = this, delta, useSet = this.options.use$SetOnSave;
_$jscoverage['mongoose/model.js'][75]++;
delta = this.activePaths.map("modify", (function (path) {
_$jscoverage['mongoose/model.js'][74]++;
return self.getValue(path);
})).reduce((function (delta, type) {
_$jscoverage['mongoose/model.js'][76]++;
if (type.doAtomics) {
_$jscoverage['mongoose/model.js'][77]++;
return ({path: path, value: self.getValue(path), schema: self.schema.path(path)});
})).reduce((function (delta, data) {
_$jscoverage['mongoose/model.js'][78]++;
var type = data.value, schema = data.schema;
_$jscoverage['mongoose/model.js'][82]++;
if (type._path && type.doAtomics) {
_$jscoverage['mongoose/model.js'][83]++;
type._atomics.forEach((function (op) {
_$jscoverage['mongoose/model.js'][78]++;
var obj = delta[op[0]] = {};
_$jscoverage['mongoose/model.js'][79]++;
_$jscoverage['mongoose/model.js'][84]++;
var obj = delta[op[0]] = delta[op[0]] || {};
_$jscoverage['mongoose/model.js'][85]++;
if (op[0] === "$pull" || op[0] === "$push") {
_$jscoverage['mongoose/model.js'][86]++;
if (op[1].constructor !== Object) {
_$jscoverage['mongoose/model.js'][87]++;
op[1] = schema.cast(op[1])[0];
}
}
_$jscoverage['mongoose/model.js'][90]++;
obj[type._path] = op[1].toObject? op[1].toObject(): Array.isArray(op[1])? op[1].map((function (mem) {
_$jscoverage['mongoose/model.js'][83]++;
_$jscoverage['mongoose/model.js'][94]++;
return mem.toObject? mem.toObject(): mem.valueOf? mem.valueOf(): mem;

@@ -208,79 +253,103 @@ })): op[1].valueOf? op[1].valueOf(): op[1];

else {
_$jscoverage['mongoose/model.js'][94]++;
delta[type._path] = this.doc[type._path];
_$jscoverage['mongoose/model.js'][106]++;
if (type._path) {
_$jscoverage['mongoose/model.js'][107]++;
type = type.valueOf();
}
_$jscoverage['mongoose/model.js'][109]++;
if (useSet) {
_$jscoverage['mongoose/model.js'][110]++;
if (! ("$set" in delta)) {
_$jscoverage['mongoose/model.js'][111]++;
delta.$set = {};
}
_$jscoverage['mongoose/model.js'][113]++;
delta.$set[data.path] = type;
}
else {
_$jscoverage['mongoose/model.js'][115]++;
delta[data.path] = type;
}
}
_$jscoverage['mongoose/model.js'][96]++;
_$jscoverage['mongoose/model.js'][118]++;
return delta;
}), {});
_$jscoverage['mongoose/model.js'][99]++;
this.collection.findAndModify({_id: this.doc._id}, [], delta, {}, fn);
_$jscoverage['mongoose/model.js'][121]++;
if (Object.keys(delta).length) {
_$jscoverage['mongoose/model.js'][122]++;
this.collection.update({_id: this.doc._id}, delta, {}, fn);
}
else {
_$jscoverage['mongoose/model.js'][124]++;
fn(null);
}
}
});
_$jscoverage['mongoose/model.js'][109]++;
_$jscoverage['mongoose/model.js'][135]++;
Model.prototype.remove = (function (fn) {
_$jscoverage['mongoose/model.js'][110]++;
_$jscoverage['mongoose/model.js'][136]++;
if (this.removing || this.removed) {
_$jscoverage['mongoose/model.js'][110]++;
_$jscoverage['mongoose/model.js'][136]++;
return this;
}
_$jscoverage['mongoose/model.js'][112]++;
_$jscoverage['mongoose/model.js'][138]++;
if (! this.removing) {
_$jscoverage['mongoose/model.js'][113]++;
_$jscoverage['mongoose/model.js'][139]++;
var promise = this.removing = new Promise(fn), self = this;
_$jscoverage['mongoose/model.js'][116]++;
_$jscoverage['mongoose/model.js'][142]++;
this.collection.remove({_id: this.doc._id}, (function (err) {
_$jscoverage['mongoose/model.js'][117]++;
_$jscoverage['mongoose/model.js'][143]++;
if (err) {
_$jscoverage['mongoose/model.js'][117]++;
_$jscoverage['mongoose/model.js'][143]++;
return promise.error(err);
}
_$jscoverage['mongoose/model.js'][118]++;
_$jscoverage['mongoose/model.js'][144]++;
promise.complete();
_$jscoverage['mongoose/model.js'][119]++;
_$jscoverage['mongoose/model.js'][145]++;
self.emit("remove");
}));
}
_$jscoverage['mongoose/model.js'][123]++;
_$jscoverage['mongoose/model.js'][149]++;
return this;
});
_$jscoverage['mongoose/model.js'][132]++;
_$jscoverage['mongoose/model.js'][158]++;
Model.prototype.registerHooks = (function () {
_$jscoverage['mongoose/model.js'][134]++;
_$jscoverage['mongoose/model.js'][160]++;
this.pre("save", (function (next) {
_$jscoverage['mongoose/model.js'][137]++;
_$jscoverage['mongoose/model.js'][163]++;
var subdocs = 0, error = false, self = this;
_$jscoverage['mongoose/model.js'][141]++;
_$jscoverage['mongoose/model.js'][167]++;
var arrays = this.activePaths.map("init", "modify", (function (i) {
_$jscoverage['mongoose/model.js'][143]++;
_$jscoverage['mongoose/model.js'][169]++;
return self.getValue(i);
})).filter((function (val) {
_$jscoverage['mongoose/model.js'][146]++;
_$jscoverage['mongoose/model.js'][172]++;
return (val && val instanceof DocumentArray && val.length);
}));
_$jscoverage['mongoose/model.js'][149]++;
_$jscoverage['mongoose/model.js'][175]++;
if (! arrays.length) {
_$jscoverage['mongoose/model.js'][149]++;
_$jscoverage['mongoose/model.js'][175]++;
return next();
}
_$jscoverage['mongoose/model.js'][151]++;
_$jscoverage['mongoose/model.js'][177]++;
arrays.forEach((function (array) {
_$jscoverage['mongoose/model.js'][152]++;
_$jscoverage['mongoose/model.js'][178]++;
subdocs += array.length;
_$jscoverage['mongoose/model.js'][153]++;
_$jscoverage['mongoose/model.js'][179]++;
array.forEach((function (value) {
_$jscoverage['mongoose/model.js'][154]++;
_$jscoverage['mongoose/model.js'][180]++;
if (! error) {
_$jscoverage['mongoose/model.js'][155]++;
_$jscoverage['mongoose/model.js'][181]++;
value.save((function (err) {
_$jscoverage['mongoose/model.js'][156]++;
_$jscoverage['mongoose/model.js'][182]++;
if (! error) {
_$jscoverage['mongoose/model.js'][157]++;
_$jscoverage['mongoose/model.js'][183]++;
if (err) {
_$jscoverage['mongoose/model.js'][158]++;
_$jscoverage['mongoose/model.js'][184]++;
error = true;
_$jscoverage['mongoose/model.js'][159]++;
_$jscoverage['mongoose/model.js'][185]++;
next(err);
}
else {
_$jscoverage['mongoose/model.js'][161]++;
_$jscoverage['mongoose/model.js'][187]++;
--subdocs || next();

@@ -294,24 +363,24 @@ }

}));
_$jscoverage['mongoose/model.js'][168]++;
_$jscoverage['mongoose/model.js'][194]++;
Document.prototype.registerHooks.call(this);
});
_$jscoverage['mongoose/model.js'][177]++;
_$jscoverage['mongoose/model.js'][203]++;
Model.prototype.__defineGetter__("options", (function () {
_$jscoverage['mongoose/model.js'][178]++;
_$jscoverage['mongoose/model.js'][204]++;
return this.schema? this.schema.options: {};
}));
_$jscoverage['mongoose/model.js'][185]++;
_$jscoverage['mongoose/model.js'][211]++;
for (var i in EventEmitter.prototype) {
_$jscoverage['mongoose/model.js'][186]++;
_$jscoverage['mongoose/model.js'][212]++;
Model[i] = EventEmitter.prototype[i];
}
_$jscoverage['mongoose/model.js'][194]++;
_$jscoverage['mongoose/model.js'][220]++;
Model.init = (function () {
_$jscoverage['mongoose/model.js'][196]++;
_$jscoverage['mongoose/model.js'][222]++;
var self = this, indexes = this.schema.indexes, count = indexes.length;
_$jscoverage['mongoose/model.js'][200]++;
_$jscoverage['mongoose/model.js'][226]++;
indexes.forEach((function (index) {
_$jscoverage['mongoose/model.js'][201]++;
_$jscoverage['mongoose/model.js'][227]++;
self.collection.ensureIndex(index[0], index[1], (function () {
_$jscoverage['mongoose/model.js'][202]++;
_$jscoverage['mongoose/model.js'][228]++;
--count || self.emit("index");

@@ -321,145 +390,194 @@ }));

});
_$jscoverage['mongoose/model.js'][213]++;
_$jscoverage['mongoose/model.js'][239]++;
Model.schema;
_$jscoverage['mongoose/model.js'][221]++;
_$jscoverage['mongoose/model.js'][247]++;
Model.db;
_$jscoverage['mongoose/model.js'][229]++;
_$jscoverage['mongoose/model.js'][255]++;
Model.collection;
_$jscoverage['mongoose/model.js'][235]++;
_$jscoverage['mongoose/model.js'][261]++;
["db", "collection", "schema", "options"].forEach((function (prop) {
_$jscoverage['mongoose/model.js'][236]++;
_$jscoverage['mongoose/model.js'][262]++;
Model.__defineGetter__(prop, (function () {
_$jscoverage['mongoose/model.js'][237]++;
_$jscoverage['mongoose/model.js'][263]++;
return this.prototype[prop];
}));
}));
_$jscoverage['mongoose/model.js'][245]++;
_$jscoverage['mongoose/model.js'][271]++;
Document.registerHooks.call(Model, "save", "remove", "init");
_$jscoverage['mongoose/model.js'][251]++;
_$jscoverage['mongoose/model.js'][277]++;
module.exports = exports = Model;
_$jscoverage['mongoose/model.js'][263]++;
_$jscoverage['mongoose/model.js'][279]++;
Model.remove = (function (query, callback) {
_$jscoverage['mongoose/model.js'][280]++;
var self = this;
_$jscoverage['mongoose/model.js'][281]++;
this.query(query, {}, callback, (function () {
_$jscoverage['mongoose/model.js'][282]++;
var casted = self.castQuery(this.query), queryComplete = this.queryComplete.bind(this);
_$jscoverage['mongoose/model.js'][284]++;
self.collection.remove(casted, queryComplete);
}));
});
_$jscoverage['mongoose/model.js'][298]++;
Model.query = (function (query, options, callback, onExecute) {
_$jscoverage['mongoose/model.js'][265]++;
_$jscoverage['mongoose/model.js'][300]++;
if ("function" == typeof options) {
_$jscoverage['mongoose/model.js'][266]++;
_$jscoverage['mongoose/model.js'][301]++;
callback = options;
_$jscoverage['mongoose/model.js'][267]++;
_$jscoverage['mongoose/model.js'][302]++;
options = {};
}
_$jscoverage['mongoose/model.js'][270]++;
_$jscoverage['mongoose/model.js'][305]++;
if (! options) {
_$jscoverage['mongoose/model.js'][271]++;
_$jscoverage['mongoose/model.js'][306]++;
options = {};
}
_$jscoverage['mongoose/model.js'][274]++;
_$jscoverage['mongoose/model.js'][309]++;
if (! ("safe" in options)) {
_$jscoverage['mongoose/model.js'][275]++;
_$jscoverage['mongoose/model.js'][310]++;
options.safe = this.options.safe;
}
_$jscoverage['mongoose/model.js'][277]++;
_$jscoverage['mongoose/model.js'][312]++;
var query = new Query(query, options, onExecute);
_$jscoverage['mongoose/model.js'][279]++;
_$jscoverage['mongoose/model.js'][314]++;
if (callback) {
_$jscoverage['mongoose/model.js'][280]++;
_$jscoverage['mongoose/model.js'][315]++;
query.addBack(callback);
_$jscoverage['mongoose/model.js'][281]++;
_$jscoverage['mongoose/model.js'][316]++;
query.run();
}
_$jscoverage['mongoose/model.js'][284]++;
_$jscoverage['mongoose/model.js'][319]++;
return query;
});
_$jscoverage['mongoose/model.js'][298]++;
_$jscoverage['mongoose/model.js'][333]++;
Model.findQuery = (function (query, fields, options, callback, onExecute) {
_$jscoverage['mongoose/model.js'][299]++;
_$jscoverage['mongoose/model.js'][334]++;
if ("function" == typeof fields) {
_$jscoverage['mongoose/model.js'][300]++;
_$jscoverage['mongoose/model.js'][335]++;
callback = fields;
_$jscoverage['mongoose/model.js'][301]++;
_$jscoverage['mongoose/model.js'][336]++;
fields = {};
_$jscoverage['mongoose/model.js'][302]++;
_$jscoverage['mongoose/model.js'][337]++;
options = {};
}
else {
_$jscoverage['mongoose/model.js'][303]++;
_$jscoverage['mongoose/model.js'][338]++;
if ("function" == typeof options) {
_$jscoverage['mongoose/model.js'][304]++;
_$jscoverage['mongoose/model.js'][339]++;
callback = options;
_$jscoverage['mongoose/model.js'][305]++;
_$jscoverage['mongoose/model.js'][340]++;
options = {};
}
}
_$jscoverage['mongoose/model.js'][308]++;
_$jscoverage['mongoose/model.js'][343]++;
var query = new FindQuery(query, fields, options, onExecute);
_$jscoverage['mongoose/model.js'][310]++;
_$jscoverage['mongoose/model.js'][345]++;
if (callback) {
_$jscoverage['mongoose/model.js'][311]++;
query.addBack(callback);
_$jscoverage['mongoose/model.js'][312]++;
query.run();
_$jscoverage['mongoose/model.js'][346]++;
query.run(callback);
}
_$jscoverage['mongoose/model.js'][315]++;
_$jscoverage['mongoose/model.js'][349]++;
return query;
});
_$jscoverage['mongoose/model.js'][330]++;
_$jscoverage['mongoose/model.js'][364]++;
Model.castQuery = (function (query) {
_$jscoverage['mongoose/model.js'][331]++;
var ret = {};
_$jscoverage['mongoose/model.js'][333]++;
_$jscoverage['mongoose/model.js'][365]++;
var ret = {}, self = this;
_$jscoverage['mongoose/model.js'][368]++;
for (var i in query) {
_$jscoverage['mongoose/model.js'][334]++;
_$jscoverage['mongoose/model.js'][369]++;
if (query[i] === null || query[i] === undefined) {
_$jscoverage['mongoose/model.js'][335]++;
_$jscoverage['mongoose/model.js'][370]++;
ret[i] = query[i];
}
else {
_$jscoverage['mongoose/model.js'][337]++;
if (query[i].constructor == Object || query[i].constructor == RegExp || Array.isArray(query[i])) {
_$jscoverage['mongoose/model.js'][339]++;
_$jscoverage['mongoose/model.js'][371]++;
if (query[i].constructor == Object) {
_$jscoverage['mongoose/model.js'][372]++;
ret[i] = query[i];
_$jscoverage['mongoose/model.js'][373]++;
Object.keys(query[i]).filter((function (key) {
_$jscoverage['mongoose/model.js'][374]++;
return key.charAt(0) === "$";
})).forEach((function (key) {
_$jscoverage['mongoose/model.js'][376]++;
var schema = self.schema.path(i);
_$jscoverage['mongoose/model.js'][378]++;
if (key == "$in") {
_$jscoverage['mongoose/model.js'][380]++;
ret[i][key] = ret[i][key].map(schema.cast);
}
else {
_$jscoverage['mongoose/model.js'][382]++;
ret[i][key] = schema.cast(query[i][key]);
}
_$jscoverage['mongoose/model.js'][386]++;
if (ret[i][key]._path) {
_$jscoverage['mongoose/model.js'][387]++;
ret[i][key] = ret[i][key].valueOf();
}
}));
}
else {
_$jscoverage['mongoose/model.js'][341]++;
ret[i] = this.schema.path(i).cast(query[i]);
_$jscoverage['mongoose/model.js'][389]++;
if (query[i].constructor == RegExp || Array.isArray(query[i])) {
_$jscoverage['mongoose/model.js'][390]++;
ret[i] = query[i];
}
else {
_$jscoverage['mongoose/model.js'][392]++;
ret[i] = this.schema.path(i).cast(query[i]);
}
}
}
}
_$jscoverage['mongoose/model.js'][344]++;
_$jscoverage['mongoose/model.js'][395]++;
return ret;
});
_$jscoverage['mongoose/model.js'][363]++;
_$jscoverage['mongoose/model.js'][414]++;
Model.find = (function (query, fields, options, callback) {
_$jscoverage['mongoose/model.js'][364]++;
_$jscoverage['mongoose/model.js'][415]++;
var self = this;
_$jscoverage['mongoose/model.js'][366]++;
_$jscoverage['mongoose/model.js'][417]++;
return this.findQuery(query, fields, options, callback, (function (query) {
_$jscoverage['mongoose/model.js'][367]++;
_$jscoverage['mongoose/model.js'][418]++;
var q = this, casted = self.castQuery(this.query);
_$jscoverage['mongoose/model.js'][370]++;
self.collection.find(casted, this.fields, this.options, (function (err, cursor) {
_$jscoverage['mongoose/model.js'][371]++;
_$jscoverage['mongoose/model.js'][421]++;
if (this.fields) {
_$jscoverage['mongoose/model.js'][422]++;
this.options.fields = this.fields;
}
_$jscoverage['mongoose/model.js'][424]++;
self.collection.find(casted, this.options, (function (err, cursor) {
_$jscoverage['mongoose/model.js'][425]++;
if (err) {
_$jscoverage['mongoose/model.js'][371]++;
_$jscoverage['mongoose/model.js'][425]++;
return q.queryComplete(err);
}
_$jscoverage['mongoose/model.js'][373]++;
_$jscoverage['mongoose/model.js'][427]++;
cursor.toArray((function (err, docs) {
_$jscoverage['mongoose/model.js'][374]++;
_$jscoverage['mongoose/model.js'][428]++;
if (err) {
_$jscoverage['mongoose/model.js'][374]++;
_$jscoverage['mongoose/model.js'][428]++;
return q.queryComplete(err);
}
_$jscoverage['mongoose/model.js'][376]++;
_$jscoverage['mongoose/model.js'][430]++;
var arr = [], count = docs.length;
_$jscoverage['mongoose/model.js'][379]++;
_$jscoverage['mongoose/model.js'][433]++;
if (! count) {
_$jscoverage['mongoose/model.js'][379]++;
_$jscoverage['mongoose/model.js'][433]++;
return q.queryComplete(null, []);
}
_$jscoverage['mongoose/model.js'][381]++;
_$jscoverage['mongoose/model.js'][435]++;
for (var i = 0, l = docs.length; i < l; i++) {
_$jscoverage['mongoose/model.js'][382]++;
_$jscoverage['mongoose/model.js'][436]++;
arr[i] = new self();
_$jscoverage['mongoose/model.js'][383]++;
arr[i].init(docs[i], (function () {
_$jscoverage['mongoose/model.js'][384]++;
_$jscoverage['mongoose/model.js'][437]++;
arr[i].init(docs[i], (function (err) {
_$jscoverage['mongoose/model.js'][438]++;
if (err) {
_$jscoverage['mongoose/model.js'][438]++;
return q.queryComplete(err);
}
_$jscoverage['mongoose/model.js'][439]++;
--count || q.queryComplete(null, arr);

@@ -472,32 +590,42 @@ }));

});
_$jscoverage['mongoose/model.js'][399]++;
_$jscoverage['mongoose/model.js'][454]++;
Model.findById = (function (id, fields, options, callback) {
_$jscoverage['mongoose/model.js'][400]++;
_$jscoverage['mongoose/model.js'][455]++;
return this.findOne({_id: id}, fields, options, callback);
});
_$jscoverage['mongoose/model.js'][412]++;
_$jscoverage['mongoose/model.js'][467]++;
Model.findOne = (function (query, fields, options, callback) {
_$jscoverage['mongoose/model.js'][413]++;
_$jscoverage['mongoose/model.js'][468]++;
var self = this;
_$jscoverage['mongoose/model.js'][415]++;
_$jscoverage['mongoose/model.js'][470]++;
return this.findQuery(query, fields, options, callback, (function () {
_$jscoverage['mongoose/model.js'][416]++;
_$jscoverage['mongoose/model.js'][471]++;
var q = this, casted = self.castQuery(this.query);
_$jscoverage['mongoose/model.js'][419]++;
self.collection.findOne(casted, this.fields, (function (err, doc) {
_$jscoverage['mongoose/model.js'][420]++;
_$jscoverage['mongoose/model.js'][474]++;
if (this.fields) {
_$jscoverage['mongoose/model.js'][475]++;
this.options.fields = this.fields;
}
_$jscoverage['mongoose/model.js'][477]++;
self.collection.findOne(casted, this.options, (function (err, doc) {
_$jscoverage['mongoose/model.js'][478]++;
if (err) {
_$jscoverage['mongoose/model.js'][420]++;
_$jscoverage['mongoose/model.js'][478]++;
return q.queryComplete(err);
}
_$jscoverage['mongoose/model.js'][422]++;
_$jscoverage['mongoose/model.js'][480]++;
if (! doc) {
_$jscoverage['mongoose/model.js'][422]++;
_$jscoverage['mongoose/model.js'][480]++;
return q.queryComplete(null, null);
}
_$jscoverage['mongoose/model.js'][424]++;
_$jscoverage['mongoose/model.js'][482]++;
var casted = new self();
_$jscoverage['mongoose/model.js'][426]++;
casted.init(doc, (function () {
_$jscoverage['mongoose/model.js'][427]++;
_$jscoverage['mongoose/model.js'][484]++;
casted.init(doc, (function (err) {
_$jscoverage['mongoose/model.js'][485]++;
if (err) {
_$jscoverage['mongoose/model.js'][485]++;
return q.queryComplete(err);
}
_$jscoverage['mongoose/model.js'][486]++;
q.queryComplete(null, casted);

@@ -508,62 +636,62 @@ }));

});
_$jscoverage['mongoose/model.js'][441]++;
_$jscoverage['mongoose/model.js'][500]++;
Model.count = (function (query, callback) {
_$jscoverage['mongoose/model.js'][442]++;
_$jscoverage['mongoose/model.js'][501]++;
var self = this;
_$jscoverage['mongoose/model.js'][444]++;
_$jscoverage['mongoose/model.js'][503]++;
return this.query(query, {}, callback, (function () {
_$jscoverage['mongoose/model.js'][445]++;
_$jscoverage['mongoose/model.js'][504]++;
var casted = self.castQuery(this.query);
_$jscoverage['mongoose/model.js'][446]++;
_$jscoverage['mongoose/model.js'][505]++;
self.collection.count(casted, this.queryComplete.bind(this));
}));
});
_$jscoverage['mongoose/model.js'][471]++;
_$jscoverage['mongoose/model.js'][530]++;
Model.update = (function (query, doc, options, callback) {
_$jscoverage['mongoose/model.js'][472]++;
_$jscoverage['mongoose/model.js'][531]++;
var self = this;
_$jscoverage['mongoose/model.js'][474]++;
_$jscoverage['mongoose/model.js'][533]++;
return this.query(query, options, callback, (function () {
_$jscoverage['mongoose/model.js'][475]++;
_$jscoverage['mongoose/model.js'][534]++;
var castQuery = self.castQuery(this.query), castDoc = self.castQuery(doc), queryComplete = this.queryComplete.bind(this);
_$jscoverage['mongoose/model.js'][479]++;
_$jscoverage['mongoose/model.js'][538]++;
self.collection.update(castQuery, castDoc, this.options, queryComplete);
}));
});
_$jscoverage['mongoose/model.js'][494]++;
_$jscoverage['mongoose/model.js'][553]++;
Model.compile = (function (name, schema, collectionName, connection, base) {
_$jscoverage['mongoose/model.js'][496]++;
_$jscoverage['mongoose/model.js'][555]++;
function model() {
_$jscoverage['mongoose/model.js'][497]++;
_$jscoverage['mongoose/model.js'][556]++;
Model.apply(this, arguments);
}
_$jscoverage['mongoose/model.js'][498]++;
_$jscoverage['mongoose/model.js'][557]++;
;
_$jscoverage['mongoose/model.js'][500]++;
_$jscoverage['mongoose/model.js'][559]++;
model.name = name;
_$jscoverage['mongoose/model.js'][501]++;
_$jscoverage['mongoose/model.js'][560]++;
model.__proto__ = Model;
_$jscoverage['mongoose/model.js'][502]++;
_$jscoverage['mongoose/model.js'][561]++;
model.prototype.__proto__ = Model.prototype;
_$jscoverage['mongoose/model.js'][503]++;
_$jscoverage['mongoose/model.js'][562]++;
model.prototype.base = base;
_$jscoverage['mongoose/model.js'][504]++;
_$jscoverage['mongoose/model.js'][563]++;
model.prototype.schema = schema;
_$jscoverage['mongoose/model.js'][505]++;
_$jscoverage['mongoose/model.js'][564]++;
model.prototype.db = connection;
_$jscoverage['mongoose/model.js'][506]++;
_$jscoverage['mongoose/model.js'][565]++;
model.prototype.collection = connection.collection(collectionName);
_$jscoverage['mongoose/model.js'][509]++;
for (var i in schema._methods) {
_$jscoverage['mongoose/model.js'][510]++;
model.prototype[i] = schema._methods[i];
_$jscoverage['mongoose/model.js'][568]++;
for (var i in schema.methods) {
_$jscoverage['mongoose/model.js'][569]++;
model.prototype[i] = schema.methods[i];
}
_$jscoverage['mongoose/model.js'][513]++;
for (var i in schema._statics) {
_$jscoverage['mongoose/model.js'][514]++;
model[i] = schema._statics[i];
_$jscoverage['mongoose/model.js'][572]++;
for (var i in schema.statics) {
_$jscoverage['mongoose/model.js'][573]++;
model[i] = schema.statics[i];
}
_$jscoverage['mongoose/model.js'][516]++;
_$jscoverage['mongoose/model.js'][575]++;
return model;
});
_$jscoverage['mongoose/model.js'].source = ["","/**"," * Module dependencies."," */","","var Document = require('./document')"," , DocumentArray = require('./types/documentarray')"," , MongooseError = require('./error')"," , Query = require('./query').Query"," , FindQuery = require('./query').FindQuery"," , EventEmitter = require('./utils').EventEmitter"," , Promise = require('./promise');","","/**"," * Model constructor"," *"," * @param {Object} values to set"," * @api public"," */","","function Model (doc) {"," Document.call(this, doc);","};","","/**"," * Inherits from Document."," */","","Model.prototype.__proto__ = Document.prototype;","","/**"," * Connection the model uses. Set by the Connection or if absent set to the"," * default mongoose connection;"," *"," * @api public"," */","","Model.prototype.db;","","/**"," * Collection the model uses. Set by Mongoose instance"," *"," * @api public"," */","","Model.prototype.collection;","","/**"," * Model name."," *"," * @api public"," */","","Model.prototype.name;","","/**"," * Saves the document."," *"," * @see Model#registerHooks"," * @param {Function} callback"," * @api public"," */","","Model.prototype.save = function (fn) {"," if (this.isNew) {"," // send entire doc"," this.collection.insert(this.toObject(), fn);"," } else {"," // send delta"," var self = this"," , delta;",""," delta = this.activePaths.map('modify', function (path) {"," return self.getValue(path);"," }).reduce( function (delta, type) {"," if (type.doAtomics) {"," type._atomics.forEach( function (op) {"," var obj = delta[op[0]] = {};"," obj[type._path] = op[1].toObject"," ? op[1].toObject() // If the value is an array"," : Array.isArray(op[1])"," ? op[1].map( function (mem) { "," return mem.toObject"," ? mem.toObject()"," : mem.valueOf"," ? mem.valueOf()"," : mem; "," })"," : op[1].valueOf"," ? op[1].valueOf() // Numbers"," : op[1];"," });"," } else {"," delta[type._path] = this.doc[type._path];"," }"," return delta;"," }, {});",""," this.collection.findAndModify({ _id: this.doc._id }, [], delta, {}, fn);"," }","};","","/**"," * Remove the document"," *"," * @param {Function} callback"," */","","Model.prototype.remove = function (fn) {"," if (this.removing || this.removed) return this;",""," if (!this.removing) {"," var promise = this.removing = new Promise(fn)"," , self = this;",""," this.collection.remove({ _id: this.doc._id }, function (err) {"," if (err) return promise.error(err);"," promise.complete();"," self.emit('remove');"," });"," }",""," return this;","};","","/**"," * Register hooks override"," *"," * @api private"," */","","Model.prototype.registerHooks = function () {"," // make sure to pass along all the errors from subdocuments"," this.pre('save', function (next) {"," // we keep the error semaphore to make sure we don't"," // call `save` unnecessarily (we only need 1 error)"," var subdocs = 0"," , error = false"," , self = this;",""," var arrays = this.activePaths"," .map('init', 'modify', function (i) {"," return self.getValue(i);"," })"," .filter(function (val) {"," return (val &amp;&amp; val instanceof DocumentArray &amp;&amp; val.length);"," });",""," if (!arrays.length) return next();",""," arrays.forEach(function (array) {"," subdocs += array.length;"," array.forEach(function (value) {"," if (!error)"," value.save(function (err) {"," if (!error) {"," if (err) {"," error = true;"," next(err);"," } else"," --subdocs || next();"," }"," });"," });"," });"," });",""," Document.prototype.registerHooks.call(this);","};","","/**"," * Access the options defined in the schema"," *"," * @api private"," */","","Model.prototype.__defineGetter__('options', function () {"," return this.schema ? this.schema.options : {};","});","","/**"," * Give the constructor the ability to emit events."," */","","for (var i in EventEmitter.prototype)"," Model[i] = EventEmitter.prototype[i];","","/**"," * Called when the model compiles"," *"," * @api private"," */","","Model.init = function () {"," // build indexes"," var self = this"," , indexes = this.schema.indexes"," , count = indexes.length;",""," indexes.forEach(function (index) {"," self.collection.ensureIndex(index[0], index[1], function(){"," --count || self.emit('index');"," });"," });","};","","/**"," * Document schema "," *"," * @api public"," */","","Model.schema;","","/**"," * Database instance the model uses."," *"," * @api public"," */","","Model.db;","","/**"," * Collection the model uses."," *"," * @api public"," */","","Model.collection;","","/**"," * Define properties that access the prototype."," */","","['db', 'collection', 'schema', 'options'].forEach(function(prop){"," Model.__defineGetter__(prop, function(){"," return this.prototype[prop];"," });","});","","/**"," * Register hooks for some methods."," */","","Document.registerHooks.call(Model, 'save', 'remove', 'init');","","/**"," * Module exports."," */","","module.exports = exports = Model;","","/**"," * Creates a query for the signature `query, options, callback`"," *"," * @param {Object} query"," * @param {Object} options for the query"," * @param {Function} callback"," * @param {Function} function to be called when query executes"," * @api private"," */","","Model.query = function (query, options, callback, onExecute) {"," // determine callback for `query, fields, callback, options` signature"," if ('function' == typeof options) {"," callback = options;"," options = {};"," }",""," if (!options)"," options = {};",""," // merge query defaults from schema options"," if (!('safe' in options))"," options.safe = this.options.safe;",""," var query = new Query(query, options, onExecute);",""," if (callback) {"," query.addBack(callback);"," query.run();"," }",""," return query;","};","","/**"," * Creates a query for the signature `query, fields, callback, options`"," *"," * @param {Object} query"," * @param {Object} fields to get, or array of fields"," * @param {Object} options for the query"," * @param {Function} callback"," * @param {Function} function to be called when query executes"," * @api private"," */","","Model.findQuery = function (query, fields, options, callback, onExecute) {"," if ('function' == typeof fields) {"," callback = fields;"," fields = {};"," options = {};"," } else if ('function' == typeof options) {"," callback = options;"," options = {};"," }",""," var query = new FindQuery(query, fields, options, onExecute);"," "," if (callback) {"," query.addBack(callback);"," query.run();"," }",""," return query;","};","","/**"," * Casts a query"," *"," * Examples:"," * "," * // will return { _id: ObjectId }"," * castQuery({ _id: '4c40f33a37483d8e14000001' })"," * "," * @param {Object} query"," * @api private"," */","","Model.castQuery = function (query) {"," var ret = {};",""," for (var i in query){"," if (query[i] === null || query[i] === undefined)"," ret[i] = query[i]"," // TODO: cast within nested modifiers ($gt, $ne, etc)"," else if (query[i].constructor == Object || query[i].constructor == RegExp"," || Array.isArray(query[i]))"," ret[i] = query[i];"," else"," ret[i] = this.schema.path(i).cast(query[i]);"," }",""," return ret;","};","","/**"," * Finds documents"," *"," * Examples:"," * // retrieve only certain keys"," * MyModel.find({ name: /john/i }, ['name', 'friends'], function () { })"," *"," * // pass options"," * MyModel.find({ name: /john/i }, [], { skip: 10 } )"," *"," * @param {Object} query"," * @param {Object/Function} (optional) fields to hydrate or callback"," * @param {Function} callback"," * @api public"," */","","Model.find = function (query, fields, options, callback) {"," var self = this;",""," return this.findQuery(query, fields, options, callback, function (query) {"," var q = this"," , casted = self.castQuery(this.query);",""," self.collection.find(casted, this.fields, this.options, function (err, cursor) {"," if (err) return q.queryComplete(err);",""," cursor.toArray(function(err, docs){"," if (err) return q.queryComplete(err);",""," var arr = []"," , count = docs.length;",""," if (!count) return q.queryComplete(null, []);",""," for (var i = 0, l = docs.length; i &lt; l; i++){"," arr[i] = new self();"," arr[i].init(docs[i], function () {"," --count || q.queryComplete(null, arr);"," });"," }"," });"," });"," });","};","","/**"," * Finds by id"," *"," * @param {ObjectId/Object} objectid, or a value that can be casted to it"," * @api public"," */","","Model.findById = function (id, fields, options, callback) {"," return this.findOne({ _id: id }, fields, options, callback);","};","","/**"," * Finds one document"," *"," * @param {Object} query"," * @param {Object/Function} (optional) fields to hydrate or callback"," * @param {Function} callback"," * @api public"," */","","Model.findOne = function (query, fields, options, callback) {"," var self = this;",""," return this.findQuery(query, fields, options, callback, function () {"," var q = this"," , casted = self.castQuery(this.query);",""," self.collection.findOne(casted, this.fields, function (err, doc) {"," if (err) return q.queryComplete(err);",""," if (!doc) return q.queryComplete(null, null);"," "," var casted = new self();",""," casted.init(doc, function () {"," q.queryComplete(null, casted);"," });"," });"," });","};","","/**"," * Counts documents"," *"," * @param {Object} query"," * @param {Function} optional callback"," * @api public"," */","","Model.count = function (query, callback) {"," var self = this;",""," return this.query(query, {}, callback, function () {"," var casted = self.castQuery(this.query);"," self.collection.count(casted, this.queryComplete.bind(this));"," });","};","","/**"," * Updates documents."," *"," * Examples:"," *"," * MyModel.update({ age: { $gt: 18 } }, { oldEnough: true }, fn);"," * MyModel.update({ name: 'Tobi' }, { ferret: true }, { multi: true }, fn);"," *"," * Valid options:"," * - safe (boolean) safe mode (defaults to value set in schema (false))"," * - upsert (boolean) whether to create the doc if it doesn't match (false)"," * - multi (boolean) whether multiple documents should be update (false)"," *"," * @param {Object} query"," * @param {Object] doc"," * @param {Object/Function} optional options or callback"," * @param {Function} callback"," * @return {Query}"," * @api public"," */","","Model.update = function (query, doc, options, callback) {"," var self = this;",""," return this.query(query, options, callback, function () {"," var castQuery = self.castQuery(this.query)"," , castDoc = self.castQuery(doc)"," , queryComplete = this.queryComplete.bind(this);",""," self.collection.update(castQuery, castDoc, this.options, queryComplete);"," });","};","","/**"," * Compiler utility."," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name"," * @param {Connection} connection to use"," * @param {Mongoose} mongoose instance"," * @api private"," */","","Model.compile = function (name, schema, collectionName, connection, base) {"," // generate new class"," function model () {"," Model.apply(this, arguments);"," };",""," model.name = name;"," model.__proto__ = Model;"," model.prototype.__proto__ = Model.prototype;"," model.prototype.base = base;"," model.prototype.schema = schema;"," model.prototype.db = connection;"," model.prototype.collection = connection.collection(collectionName);",""," // apply methods"," for (var i in schema._methods)"," model.prototype[i] = schema._methods[i];",""," // apply statics"," for (var i in schema._statics)"," model[i] = schema._statics[i];",""," return model;","};"];
_$jscoverage['mongoose/model.js'].source = ["","/**"," * Module dependencies."," */","","var Document = require('./document')"," , DocumentArray = require('./types/documentarray')"," , MongooseError = require('./error')"," , Query = require('./query').Query"," , FindQuery = require('./query').FindQuery"," , EventEmitter = require('./utils').EventEmitter"," , Promise = require('./promise');","","/**"," * Model constructor"," *"," * @param {Object} values to set"," * @api public"," */","","function Model (doc) {"," Document.call(this, doc);","};","","/**"," * Inherits from Document."," */","","Model.prototype.__proto__ = Document.prototype;","","/**"," * Connection the model uses. Set by the Connection or if absent set to the"," * default mongoose connection;"," *"," * @api public"," */","","Model.prototype.db;","","/**"," * Collection the model uses. Set by Mongoose instance"," *"," * @api public"," */","","Model.prototype.collection;","","/**"," * Model name."," *"," * @api public"," */","","Model.prototype.name;","","/**"," * Saves the document."," *"," * @see Model#registerHooks"," * @param {Function} callback"," * @api public"," */","","Model.prototype.save = function (fn) {"," if (this.isNew) {"," // send entire doc"," this.collection.insert(this.toObject(), fn);"," this.isNew = false;"," } else {"," // send delta"," var self = this"," , delta"," , useSet = this.options['use$SetOnSave'];",""," delta = this.activePaths.map('modify', function (path) {"," return { path: path, value: self.getValue(path), schema: self.schema.path(path) };"," }).reduce( function (delta, data) {"," var type = data.value"," , schema = data.schema;",""," // a MongooseArray or MongooseNumber"," if (type._path &amp;&amp; type.doAtomics) {"," type._atomics.forEach( function (op) {"," var obj = delta[op[0]] = delta[op[0]] || {};"," if (op[0] === '$pull' || op[0] === '$push') {"," if (op[1].constructor !== Object) {"," op[1] = schema.cast(op[1])[0];"," }"," }"," obj[type._path] = op[1].toObject"," ? op[1].toObject() // If the value is an array"," : Array.isArray(op[1])"," ? op[1].map( function (mem) { "," return mem.toObject"," ? mem.toObject()"," : mem.valueOf"," ? mem.valueOf()"," : mem;"," })"," : op[1].valueOf"," ? op[1].valueOf() // Numbers"," : op[1];"," });"," } else {"," // normalize MongooseArray or MongooseNumber"," if (type._path)"," type = type.valueOf();",""," if (useSet) {"," if (!('$set' in delta))"," delta['$set'] = {};",""," delta['$set'][data.path] = type;"," } else"," delta[data.path] = type;"," }",""," return delta;"," }, {});",""," if (Object.keys(delta).length)"," this.collection.update({ _id: this.doc._id }, delta, {}, fn);"," else"," fn(null);"," // TODO Clear 'modify'('dirty') cache"," }","};","","/**"," * Remove the document"," *"," * @param {Function} callback"," */","","Model.prototype.remove = function (fn) {"," if (this.removing || this.removed) return this;",""," if (!this.removing) {"," var promise = this.removing = new Promise(fn)"," , self = this;",""," this.collection.remove({ _id: this.doc._id }, function (err) {"," if (err) return promise.error(err);"," promise.complete();"," self.emit('remove');"," });"," }",""," return this;","};","","/**"," * Register hooks override"," *"," * @api private"," */","","Model.prototype.registerHooks = function () {"," // make sure to pass along all the errors from subdocuments"," this.pre('save', function (next) {"," // we keep the error semaphore to make sure we don't"," // call `save` unnecessarily (we only need 1 error)"," var subdocs = 0"," , error = false"," , self = this;",""," var arrays = this.activePaths"," .map('init', 'modify', function (i) {"," return self.getValue(i);"," })"," .filter(function (val) {"," return (val &amp;&amp; val instanceof DocumentArray &amp;&amp; val.length);"," });",""," if (!arrays.length) return next();",""," arrays.forEach(function (array) {"," subdocs += array.length;"," array.forEach(function (value) {"," if (!error)"," value.save(function (err) {"," if (!error) {"," if (err) {"," error = true;"," next(err);"," } else"," --subdocs || next();"," }"," });"," });"," });"," });",""," Document.prototype.registerHooks.call(this);","};","","/**"," * Access the options defined in the schema"," *"," * @api private"," */","","Model.prototype.__defineGetter__('options', function () {"," return this.schema ? this.schema.options : {};","});","","/**"," * Give the constructor the ability to emit events."," */","","for (var i in EventEmitter.prototype)"," Model[i] = EventEmitter.prototype[i];","","/**"," * Called when the model compiles"," *"," * @api private"," */","","Model.init = function () {"," // build indexes"," var self = this"," , indexes = this.schema.indexes"," , count = indexes.length;",""," indexes.forEach(function (index) {"," self.collection.ensureIndex(index[0], index[1], function(){"," --count || self.emit('index');"," });"," });","};","","/**"," * Document schema "," *"," * @api public"," */","","Model.schema;","","/**"," * Database instance the model uses."," *"," * @api public"," */","","Model.db;","","/**"," * Collection the model uses."," *"," * @api public"," */","","Model.collection;","","/**"," * Define properties that access the prototype."," */","","['db', 'collection', 'schema', 'options'].forEach(function(prop){"," Model.__defineGetter__(prop, function(){"," return this.prototype[prop];"," });","});","","/**"," * Register hooks for some methods."," */","","Document.registerHooks.call(Model, 'save', 'remove', 'init');","","/**"," * Module exports."," */","","module.exports = exports = Model;","","Model.remove = function (query, callback) {"," var self = this;"," this.query(query, {}, callback, function () {"," var casted = self.castQuery(this.query)"," , queryComplete = this.queryComplete.bind(this);"," self.collection.remove(casted, queryComplete);"," });","};","","/**"," * Creates a query for the signature `query, options, callback`"," *"," * @param {Object} query"," * @param {Object} options for the query"," * @param {Function} callback"," * @param {Function} function to be called when query executes"," * @api private"," */","","Model.query = function (query, options, callback, onExecute) {"," // determine callback for `query, fields, callback, options` signature"," if ('function' == typeof options) {"," callback = options;"," options = {};"," }",""," if (!options)"," options = {};",""," // merge query defaults from schema options"," if (!('safe' in options))"," options.safe = this.options.safe;",""," var query = new Query(query, options, onExecute);",""," if (callback) {"," query.addBack(callback);"," query.run();"," }",""," return query;","};","","/**"," * Creates a query for the signature `query, fields, callback, options`"," *"," * @param {Object} query"," * @param {Object} fields to get, or array of fields"," * @param {Object} options for the query"," * @param {Function} callback"," * @param {Function} function to be called when query executes"," * @api private"," */","","Model.findQuery = function (query, fields, options, callback, onExecute) {"," if ('function' == typeof fields) {"," callback = fields;"," fields = {};"," options = {};"," } else if ('function' == typeof options) {"," callback = options;"," options = {};"," }",""," var query = new FindQuery(query, fields, options, onExecute);"," "," if (callback) {"," query.run(callback);"," }",""," return query;","};","","/**"," * Casts a query"," *"," * Examples:"," * "," * // will return { _id: ObjectId }"," * castQuery({ _id: '4c40f33a37483d8e14000001' })"," * "," * @param {Object} query"," * @api private"," */","","Model.castQuery = function (query) {"," var ret = {}"," , self = this;",""," for (var i in query){"," if (query[i] === null || query[i] === undefined)"," ret[i] = query[i]"," else if (query[i].constructor == Object) {"," ret[i] = query[i];"," Object.keys(query[i]).filter( function (key) {"," return key.charAt(0) === '$';"," }).forEach( function (key) {"," var schema = self.schema.path(i);",""," if (key == '$in') {"," // cast array"," ret[i][key] = ret[i][key].map(schema.cast);"," } else"," ret[i][key] = schema.cast(query[i][key]);",""," // Take care of special case of MongooseNumber,"," // with resolves scalar via `valueOf`"," if (ret[i][key]._path)"," ret[i][key] = ret[i][key].valueOf();"," });"," } else if (query[i].constructor == RegExp || Array.isArray(query[i]))"," ret[i] = query[i];"," else"," ret[i] = this.schema.path(i).cast(query[i]);"," }",""," return ret;","};","","/**"," * Finds documents"," *"," * Examples:"," * // retrieve only certain keys"," * MyModel.find({ name: /john/i }, ['name', 'friends'], function () { })"," *"," * // pass options"," * MyModel.find({ name: /john/i }, [], { skip: 10 } )"," *"," * @param {Object} query"," * @param {Object/Function} (optional) fields to hydrate or callback"," * @param {Function} callback"," * @api public"," */","","Model.find = function (query, fields, options, callback) {"," var self = this;",""," return this.findQuery(query, fields, options, callback, function (query) {"," var q = this"," , casted = self.castQuery(this.query);",""," if (this.fields)"," this.options.fields = this.fields;",""," self.collection.find(casted, this.options, function (err, cursor) {"," if (err) return q.queryComplete(err);",""," cursor.toArray(function(err, docs){"," if (err) return q.queryComplete(err);",""," var arr = []"," , count = docs.length;",""," if (!count) return q.queryComplete(null, []);",""," for (var i = 0, l = docs.length; i &lt; l; i++){"," arr[i] = new self();"," arr[i].init(docs[i], function (err) {"," if (err) return q.queryComplete(err);"," --count || q.queryComplete(null, arr);"," });"," }"," });"," });"," });","};","","/**"," * Finds by id"," *"," * @param {ObjectId/Object} objectid, or a value that can be casted to it"," * @api public"," */","","Model.findById = function (id, fields, options, callback) {"," return this.findOne({ _id: id }, fields, options, callback);","};","","/**"," * Finds one document"," *"," * @param {Object} query"," * @param {Object/Function} (optional) fields to hydrate or callback"," * @param {Function} callback"," * @api public"," */","","Model.findOne = function (query, fields, options, callback) {"," var self = this;",""," return this.findQuery(query, fields, options, callback, function () {"," var q = this"," , casted = self.castQuery(this.query);",""," if (this.fields)"," this.options.fields = this.fields;",""," self.collection.findOne(casted, this.options, function (err, doc) {"," if (err) return q.queryComplete(err);",""," if (!doc) return q.queryComplete(null, null);"," "," var casted = new self();",""," casted.init(doc, function (err) {"," if (err) return q.queryComplete(err);"," q.queryComplete(null, casted);"," });"," });"," });","};","","/**"," * Counts documents"," *"," * @param {Object} query"," * @param {Function} optional callback"," * @api public"," */","","Model.count = function (query, callback) {"," var self = this;",""," return this.query(query, {}, callback, function () {"," var casted = self.castQuery(this.query);"," self.collection.count(casted, this.queryComplete.bind(this));"," });","};","","/**"," * Updates documents."," *"," * Examples:"," *"," * MyModel.update({ age: { $gt: 18 } }, { oldEnough: true }, fn);"," * MyModel.update({ name: 'Tobi' }, { ferret: true }, { multi: true }, fn);"," *"," * Valid options:"," * - safe (boolean) safe mode (defaults to value set in schema (false))"," * - upsert (boolean) whether to create the doc if it doesn't match (false)"," * - multi (boolean) whether multiple documents should be update (false)"," *"," * @param {Object} query"," * @param {Object] doc"," * @param {Object/Function} optional options or callback"," * @param {Function} callback"," * @return {Query}"," * @api public"," */","","Model.update = function (query, doc, options, callback) {"," var self = this;",""," return this.query(query, options, callback, function () {"," var castQuery = self.castQuery(this.query)"," , castDoc = self.castQuery(doc)"," , queryComplete = this.queryComplete.bind(this);",""," self.collection.update(castQuery, castDoc, this.options, queryComplete);"," });","};","","/**"," * Compiler utility."," *"," * @param {String} model name"," * @param {Schema} schema object"," * @param {String} collection name"," * @param {Connection} connection to use"," * @param {Mongoose} mongoose instance"," * @api private"," */","","Model.compile = function (name, schema, collectionName, connection, base) {"," // generate new class"," function model () {"," Model.apply(this, arguments);"," };",""," model.name = name;"," model.__proto__ = Model;"," model.prototype.__proto__ = Model.prototype;"," model.prototype.base = base;"," model.prototype.schema = schema;"," model.prototype.db = connection;"," model.prototype.collection = connection.collection(collectionName);",""," // apply methods"," for (var i in schema.methods)"," model.prototype[i] = schema.methods[i];",""," // apply statics"," for (var i in schema.statics)"," model[i] = schema.statics[i];",""," return model;","};"];

@@ -6,3 +6,2 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/query.js'][6] = 0;
_$jscoverage['mongoose/query.js'][14] = 0;
_$jscoverage['mongoose/query.js'][15] = 0;

@@ -14,102 +13,130 @@ _$jscoverage['mongoose/query.js'][16] = 0;

_$jscoverage['mongoose/query.js'][20] = 0;
_$jscoverage['mongoose/query.js'][26] = 0;
_$jscoverage['mongoose/query.js'][34] = 0;
_$jscoverage['mongoose/query.js'][35] = 0;
_$jscoverage['mongoose/query.js'][37] = 0;
_$jscoverage['mongoose/query.js'][21] = 0;
_$jscoverage['mongoose/query.js'][27] = 0;
_$jscoverage['mongoose/query.js'][36] = 0;
_$jscoverage['mongoose/query.js'][38] = 0;
_$jscoverage['mongoose/query.js'][39] = 0;
_$jscoverage['mongoose/query.js'][41] = 0;
_$jscoverage['mongoose/query.js'][45] = 0;
_$jscoverage['mongoose/query.js'][56] = 0;
_$jscoverage['mongoose/query.js'][57] = 0;
_$jscoverage['mongoose/query.js'][58] = 0;
_$jscoverage['mongoose/query.js'][59] = 0;
_$jscoverage['mongoose/query.js'][60] = 0;
_$jscoverage['mongoose/query.js'][70] = 0;
_$jscoverage['mongoose/query.js'][71] = 0;
_$jscoverage['mongoose/query.js'][72] = 0;
_$jscoverage['mongoose/query.js'][73] = 0;
_$jscoverage['mongoose/query.js'][75] = 0;
_$jscoverage['mongoose/query.js'][76] = 0;
_$jscoverage['mongoose/query.js'][42] = 0;
_$jscoverage['mongoose/query.js'][44] = 0;
_$jscoverage['mongoose/query.js'][46] = 0;
_$jscoverage['mongoose/query.js'][47] = 0;
_$jscoverage['mongoose/query.js'][48] = 0;
_$jscoverage['mongoose/query.js'][50] = 0;
_$jscoverage['mongoose/query.js'][54] = 0;
_$jscoverage['mongoose/query.js'][65] = 0;
_$jscoverage['mongoose/query.js'][66] = 0;
_$jscoverage['mongoose/query.js'][67] = 0;
_$jscoverage['mongoose/query.js'][68] = 0;
_$jscoverage['mongoose/query.js'][69] = 0;
_$jscoverage['mongoose/query.js'][79] = 0;
_$jscoverage['mongoose/query.js'][80] = 0;
_$jscoverage['mongoose/query.js'][81] = 0;
_$jscoverage['mongoose/query.js'][82] = 0;
_$jscoverage['mongoose/query.js'][84] = 0;
_$jscoverage['mongoose/query.js'][85] = 0;
_$jscoverage['mongoose/query.js'][86] = 0;
_$jscoverage['mongoose/query.js'][87] = 0;
_$jscoverage['mongoose/query.js'][89] = 0;
_$jscoverage['mongoose/query.js'][91] = 0;
_$jscoverage['mongoose/query.js'][100] = 0;
_$jscoverage['mongoose/query.js'][101] = 0;
_$jscoverage['mongoose/query.js'][102] = 0;
_$jscoverage['mongoose/query.js'][103] = 0;
_$jscoverage['mongoose/query.js'][109] = 0;
_$jscoverage['mongoose/query.js'][124] = 0;
_$jscoverage['mongoose/query.js'][125] = 0;
_$jscoverage['mongoose/query.js'][126] = 0;
_$jscoverage['mongoose/query.js'][127] = 0;
_$jscoverage['mongoose/query.js'][128] = 0;
_$jscoverage['mongoose/query.js'][129] = 0;
_$jscoverage['mongoose/query.js'][130] = 0;
_$jscoverage['mongoose/query.js'][131] = 0;
_$jscoverage['mongoose/query.js'][132] = 0;
_$jscoverage['mongoose/query.js'][95] = 0;
_$jscoverage['mongoose/query.js'][96] = 0;
_$jscoverage['mongoose/query.js'][106] = 0;
_$jscoverage['mongoose/query.js'][107] = 0;
_$jscoverage['mongoose/query.js'][117] = 0;
_$jscoverage['mongoose/query.js'][118] = 0;
_$jscoverage['mongoose/query.js'][133] = 0;
_$jscoverage['mongoose/query.js'][136] = 0;
_$jscoverage['mongoose/query.js'][134] = 0;
_$jscoverage['mongoose/query.js'][135] = 0;
_$jscoverage['mongoose/query.js'][137] = 0;
_$jscoverage['mongoose/query.js'][139] = 0;
_$jscoverage['mongoose/query.js'][140] = 0;
_$jscoverage['mongoose/query.js'][143] = 0;
_$jscoverage['mongoose/query.js'][145] = 0;
_$jscoverage['mongoose/query.js'][152] = 0;
_$jscoverage['mongoose/query.js'][153] = 0;
_$jscoverage['mongoose/query.js'][154] = 0;
_$jscoverage['mongoose/query.js'][156] = 0;
_$jscoverage['mongoose/query.js'][158] = 0;
_$jscoverage['mongoose/query.js'][167] = 0;
_$jscoverage['mongoose/query.js'][168] = 0;
_$jscoverage['mongoose/query.js'][169] = 0;
_$jscoverage['mongoose/query.js'][170] = 0;
_$jscoverage['mongoose/query.js'][176] = 0;
_$jscoverage['mongoose/query.js'][191] = 0;
_$jscoverage['mongoose/query.js'][192] = 0;
_$jscoverage['mongoose/query.js'][193] = 0;
_$jscoverage['mongoose/query.js'][194] = 0;
_$jscoverage['mongoose/query.js'][195] = 0;
_$jscoverage['mongoose/query.js'][196] = 0;
_$jscoverage['mongoose/query.js'][197] = 0;
_$jscoverage['mongoose/query.js'][198] = 0;
_$jscoverage['mongoose/query.js'][199] = 0;
_$jscoverage['mongoose/query.js'][200] = 0;
_$jscoverage['mongoose/query.js'][203] = 0;
_$jscoverage['mongoose/query.js'][210] = 0;
_$jscoverage['mongoose/query.js'][212] = 0;
}
_$jscoverage['mongoose/query.js'][6]++;
var Promise = require("./promise");
_$jscoverage['mongoose/query.js'][14]++;
var Promise = require("./promise"), inGroupsOf = require("./utils").inGroupsOf;
_$jscoverage['mongoose/query.js'][15]++;
function Query(query, options, onExecute) {
_$jscoverage['mongoose/query.js'][15]++;
_$jscoverage['mongoose/query.js'][16]++;
Promise.call(this);
_$jscoverage['mongoose/query.js'][16]++;
_$jscoverage['mongoose/query.js'][17]++;
this.query = query || {};
_$jscoverage['mongoose/query.js'][17]++;
_$jscoverage['mongoose/query.js'][18]++;
this.options = options || {};
_$jscoverage['mongoose/query.js'][18]++;
_$jscoverage['mongoose/query.js'][19]++;
this.onExecute = onExecute;
_$jscoverage['mongoose/query.js'][19]++;
_$jscoverage['mongoose/query.js'][20]++;
this.executed = false;
}
_$jscoverage['mongoose/query.js'][20]++;
_$jscoverage['mongoose/query.js'][21]++;
;
_$jscoverage['mongoose/query.js'][26]++;
_$jscoverage['mongoose/query.js'][27]++;
Query.prototype.__proto__ = Promise.prototype;
_$jscoverage['mongoose/query.js'][34]++;
Query.prototype.run = (function () {
_$jscoverage['mongoose/query.js'][35]++;
_$jscoverage['mongoose/query.js'][36]++;
Query.prototype.exec = Query.prototype.run = (function (fn) {
_$jscoverage['mongoose/query.js'][38]++;
if (this.executed) {
_$jscoverage['mongoose/query.js'][39]++;
return this;
}
_$jscoverage['mongoose/query.js'][41]++;
if (fn) {
_$jscoverage['mongoose/query.js'][42]++;
this.addBack(fn);
}
_$jscoverage['mongoose/query.js'][44]++;
this.executed = true;
_$jscoverage['mongoose/query.js'][37]++;
_$jscoverage['mongoose/query.js'][46]++;
if (this.onExecute) {
_$jscoverage['mongoose/query.js'][38]++;
_$jscoverage['mongoose/query.js'][47]++;
try {
_$jscoverage['mongoose/query.js'][39]++;
_$jscoverage['mongoose/query.js'][48]++;
this.onExecute.call(this);
}
catch (e) {
_$jscoverage['mongoose/query.js'][41]++;
_$jscoverage['mongoose/query.js'][50]++;
this.queryComplete(e);
}
}
_$jscoverage['mongoose/query.js'][45]++;
_$jscoverage['mongoose/query.js'][54]++;
return this;
});
_$jscoverage['mongoose/query.js'][56]++;
_$jscoverage['mongoose/query.js'][65]++;
Query.prototype.set = (function (key, value) {
_$jscoverage['mongoose/query.js'][57]++;
_$jscoverage['mongoose/query.js'][66]++;
if (arguments.length == 1) {
_$jscoverage['mongoose/query.js'][58]++;
_$jscoverage['mongoose/query.js'][67]++;
return this.options[key];
}
_$jscoverage['mongoose/query.js'][59]++;
_$jscoverage['mongoose/query.js'][68]++;
this.options[key] = value;
_$jscoverage['mongoose/query.js'][60]++;
_$jscoverage['mongoose/query.js'][69]++;
return this;
});
_$jscoverage['mongoose/query.js'][70]++;
_$jscoverage['mongoose/query.js'][79]++;
Query.prototype.where = (function (obj, value) {
_$jscoverage['mongoose/query.js'][71]++;
_$jscoverage['mongoose/query.js'][80]++;
if (value == undefined) {
_$jscoverage['mongoose/query.js'][72]++;
_$jscoverage['mongoose/query.js'][81]++;
for (var i in obj) {
_$jscoverage['mongoose/query.js'][73]++;
_$jscoverage['mongoose/query.js'][82]++;
this.query[i] = obj[i];

@@ -119,42 +146,74 @@ }

else {
_$jscoverage['mongoose/query.js'][75]++;
_$jscoverage['mongoose/query.js'][84]++;
this.query[obj] = value;
}
_$jscoverage['mongoose/query.js'][76]++;
_$jscoverage['mongoose/query.js'][85]++;
return this;
});
_$jscoverage['mongoose/query.js'][85]++;
_$jscoverage['mongoose/query.js'][95]++;
Query.prototype.skip = (function (v) {
_$jscoverage['mongoose/query.js'][96]++;
return this.set("skip", v);
});
_$jscoverage['mongoose/query.js'][106]++;
Query.prototype.limit = (function (v) {
_$jscoverage['mongoose/query.js'][107]++;
return this.set("limit", v);
});
_$jscoverage['mongoose/query.js'][117]++;
Query.prototype.timeout = (function (v) {
_$jscoverage['mongoose/query.js'][118]++;
return this.set("timeout", v);
});
_$jscoverage['mongoose/query.js'][133]++;
Query.prototype.sort = (function () {
_$jscoverage['mongoose/query.js'][134]++;
if (! this.options.sort) {
_$jscoverage['mongoose/query.js'][135]++;
this.options.sort = [];
}
_$jscoverage['mongoose/query.js'][137]++;
var args = [].slice.call(arguments), query = this;
_$jscoverage['mongoose/query.js'][139]++;
inGroupsOf(2, args, (function (field, value) {
_$jscoverage['mongoose/query.js'][140]++;
query.options.sort.push([field, value]);
}));
_$jscoverage['mongoose/query.js'][143]++;
return this;
});
_$jscoverage['mongoose/query.js'][152]++;
Query.prototype.queryComplete = (function (err) {
_$jscoverage['mongoose/query.js'][86]++;
_$jscoverage['mongoose/query.js'][153]++;
if (err) {
_$jscoverage['mongoose/query.js'][87]++;
_$jscoverage['mongoose/query.js'][154]++;
this.error(err);
}
else {
_$jscoverage['mongoose/query.js'][89]++;
_$jscoverage['mongoose/query.js'][156]++;
this.complete.apply(this, Array.prototype.slice.call(arguments, 1));
}
_$jscoverage['mongoose/query.js'][91]++;
_$jscoverage['mongoose/query.js'][158]++;
return this;
});
_$jscoverage['mongoose/query.js'][100]++;
_$jscoverage['mongoose/query.js'][167]++;
function FindQuery(query, fields, options, onExecute) {
_$jscoverage['mongoose/query.js'][101]++;
_$jscoverage['mongoose/query.js'][168]++;
this.fields = fields || {};
_$jscoverage['mongoose/query.js'][102]++;
_$jscoverage['mongoose/query.js'][169]++;
Query.call(this, query, options, onExecute);
}
_$jscoverage['mongoose/query.js'][103]++;
_$jscoverage['mongoose/query.js'][170]++;
;
_$jscoverage['mongoose/query.js'][109]++;
_$jscoverage['mongoose/query.js'][176]++;
FindQuery.prototype.__proto__ = Query.prototype;
_$jscoverage['mongoose/query.js'][124]++;
_$jscoverage['mongoose/query.js'][191]++;
FindQuery.prototype.select = (function () {
_$jscoverage['mongoose/query.js'][125]++;
_$jscoverage['mongoose/query.js'][192]++;
for (var i = 0, l = arguments.length; i < l; i++) {
_$jscoverage['mongoose/query.js'][126]++;
_$jscoverage['mongoose/query.js'][193]++;
if (Array.isArray(arguments[i])) {
_$jscoverage['mongoose/query.js'][127]++;
_$jscoverage['mongoose/query.js'][194]++;
for (var a = 0, l = arguments[i].length; a < l; a++) {
_$jscoverage['mongoose/query.js'][128]++;
_$jscoverage['mongoose/query.js'][195]++;
this.fields[arguments[i][a]] = 1;

@@ -164,7 +223,7 @@ }

else {
_$jscoverage['mongoose/query.js'][129]++;
_$jscoverage['mongoose/query.js'][196]++;
if ("object" == typeof arguments[i]) {
_$jscoverage['mongoose/query.js'][130]++;
_$jscoverage['mongoose/query.js'][197]++;
for (var a in arguments[i]) {
_$jscoverage['mongoose/query.js'][131]++;
_$jscoverage['mongoose/query.js'][198]++;
this.fields[a] = arguments[i][a];

@@ -174,5 +233,5 @@ }

else {
_$jscoverage['mongoose/query.js'][132]++;
_$jscoverage['mongoose/query.js'][199]++;
if ("string" == typeof arguments[i]) {
_$jscoverage['mongoose/query.js'][133]++;
_$jscoverage['mongoose/query.js'][200]++;
this.fields[arguments[i]] = 1;

@@ -183,9 +242,9 @@ }

}
_$jscoverage['mongoose/query.js'][136]++;
_$jscoverage['mongoose/query.js'][203]++;
return this;
});
_$jscoverage['mongoose/query.js'][143]++;
_$jscoverage['mongoose/query.js'][210]++;
exports.Query = Query;
_$jscoverage['mongoose/query.js'][145]++;
_$jscoverage['mongoose/query.js'][212]++;
exports.FindQuery = FindQuery;
_$jscoverage['mongoose/query.js'].source = ["","/**"," * Module dependencies."," */","","var Promise = require('./promise');","","/**"," * Query constructor"," *"," * @api private"," */","","function Query (query, options, onExecute) {"," Promise.call(this);"," this.query = query || {};"," this.options = options || {};"," this.onExecute = onExecute;"," this.executed = false;","};","","/**"," * Inherits from Promise."," */","","Query.prototype.__proto__ = Promise.prototype;","","/**"," * Runs the Query"," *"," * @api private"," */","","Query.prototype.run = function () {"," this.executed = true;"," "," if (this.onExecute) {"," try {"," this.onExecute.call(this);"," } catch (e) {"," this.queryComplete(e);"," }"," }",""," return this;","};","","/**"," * Sets an option"," *"," * @param {String} key"," * @param {Object} optional value"," * @api public"," */","","Query.prototype.set = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Add conditions to query"," *"," * @param {Object} query"," * @api public"," */","","Query.prototype.where = function (obj, value) {"," if (value == undefined)"," for (var i in obj)"," this.query[i] = obj[i];"," else"," this.query[obj] = value;"," return this;","};","","/**"," * Resolves the promise from a driver response"," *"," * @api private"," */","","Query.prototype.queryComplete = function (err) {"," if (err)"," this.error(err);"," else"," this.complete.apply(this, Array.prototype.slice.call(arguments, 1));",""," return this;","};","","/**"," * Find Query constructor (for queries that retrieve docs)"," *"," * @api private"," */","","function FindQuery (query, fields, options, onExecute) {"," this.fields = fields || {};"," Query.call(this, query, options, onExecute);","};","","/**"," * Inherits from Query."," */","","FindQuery.prototype.__proto__ = Query.prototype;","","/**"," * Specifies fields to return"," *"," * Examples:"," *"," * // these three are equivalent"," * query.select('field', 'field2')"," * query.select({ field: 1, field2: 1 })"," * query.select(('field', 'field2');"," *"," * @api public"," */","","FindQuery.prototype.select = function () {"," for (var i = 0, l = arguments.length; i &lt; l; i++) {"," if (Array.isArray(arguments[i])) {"," for (var a = 0, l = arguments[i].length; a &lt; l; a++)"," this.fields[arguments[i][a]] = 1;"," } else if ('object' == typeof arguments[i]) {"," for (var a in arguments[i])"," this.fields[a] = arguments[i][a];"," } else if ('string' == typeof arguments[i]) {"," this.fields[arguments[i]] = 1;"," }"," }"," return this;","};","","/**"," * Module exports"," */","","exports.Query = Query;","","exports.FindQuery = FindQuery;"];
_$jscoverage['mongoose/query.js'].source = ["","/**"," * Module dependencies."," */","","var Promise = require('./promise')"," , inGroupsOf = require('./utils').inGroupsOf;","","/**"," * Query constructor"," *"," * @api private"," */","","function Query (query, options, onExecute) {"," Promise.call(this);"," this.query = query || {};"," this.options = options || {};"," this.onExecute = onExecute;"," this.executed = false;","};","","/**"," * Inherits from Promise."," */","","Query.prototype.__proto__ = Promise.prototype;","","/**"," * Runs the Query"," *"," * @param {Function} optional back"," * @api private"," */","","Query.prototype.exec = ","Query.prototype.run = function (fn) {"," if (this.executed)"," return this;",""," if (fn)"," this.addBack(fn);",""," this.executed = true;"," "," if (this.onExecute) {"," try {"," this.onExecute.call(this);"," } catch (e) {"," this.queryComplete(e);"," }"," }",""," return this;","};","","/**"," * Sets an option"," *"," * @param {String} key"," * @param {Object} optional value"," * @api public"," */","","Query.prototype.set = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Add conditions to query"," *"," * @param {Object} query"," * @api public"," */","","Query.prototype.where = function (obj, value) {"," if (value == undefined)"," for (var i in obj)"," this.query[i] = obj[i];"," else"," this.query[obj] = value;"," return this;","};","","/**"," * Sets the `skip` option"," *"," * @param {Number} value"," * @api public"," */","","Query.prototype.skip = function (v) {"," return this.set('skip', v);","};","","/**"," * Sets the `limit` option"," *"," * @param {Number} value"," * @api public"," */","","Query.prototype.limit = function (v) {"," return this.set('limit', v);","};","","/**"," * Sets the `timeout` option"," *"," * @param {Number} value"," * @api public"," */","","Query.prototype.timeout = function (v) {"," return this.set('timeout', v);","};","","/**"," * Sets the sort"," *"," * Examples:"," * query.sort('test', 1)"," * query.sort('field', -1)"," * query.sort('field', -1, 'test', 1)"," *"," * @param {Object} fields"," * @api public"," */","","Query.prototype.sort = function () {"," if (!this.options.sort)"," this.options.sort = [];",""," var args = [].slice.call(arguments)"," , query = this;"," inGroupsOf(2, args, function (field, value) {"," query.options.sort.push([field, value]);"," });",""," return this;","};","","/**"," * Resolves the promise from a driver response"," *"," * @api private"," */","","Query.prototype.queryComplete = function (err) {"," if (err)"," this.error(err);"," else"," this.complete.apply(this, Array.prototype.slice.call(arguments, 1));",""," return this;","};","","/**"," * Find Query constructor (for queries that retrieve docs)"," *"," * @api private"," */","","function FindQuery (query, fields, options, onExecute) {"," this.fields = fields || {};"," Query.call(this, query, options, onExecute);","};","","/**"," * Inherits from Query."," */","","FindQuery.prototype.__proto__ = Query.prototype;","","/**"," * Specifies fields to return"," *"," * Examples:"," *"," * // these three are equivalent"," * query.select('field', 'field2')"," * query.select({ field: 1, field2: 1 })"," * query.select(('field', 'field2');"," *"," * @api public"," */","","FindQuery.prototype.select = function () {"," for (var i = 0, l = arguments.length; i &lt; l; i++) {"," if (Array.isArray(arguments[i])) {"," for (var a = 0, l = arguments[i].length; a &lt; l; a++)"," this.fields[arguments[i][a]] = 1;"," } else if ('object' == typeof arguments[i]) {"," for (var a in arguments[i])"," this.fields[a] = arguments[i][a];"," } else if ('string' == typeof arguments[i]) {"," this.fields[arguments[i]] = 1;"," }"," }"," return this;","};","","/**"," * Module exports"," */","","exports.Query = Query;","","exports.FindQuery = FindQuery;"];

@@ -6,3 +6,2 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schema.js'][6] = 0;
_$jscoverage['mongoose/schema.js'][17] = 0;
_$jscoverage['mongoose/schema.js'][18] = 0;

@@ -17,136 +16,169 @@ _$jscoverage['mongoose/schema.js'][19] = 0;

_$jscoverage['mongoose/schema.js'][26] = 0;
_$jscoverage['mongoose/schema.js'][27] = 0;
_$jscoverage['mongoose/schema.js'][28] = 0;
_$jscoverage['mongoose/schema.js'][31] = 0;
_$jscoverage['mongoose/schema.js'][37] = 0;
_$jscoverage['mongoose/schema.js'][52] = 0;
_$jscoverage['mongoose/schema.js'][68] = 0;
_$jscoverage['mongoose/schema.js'][78] = 0;
_$jscoverage['mongoose/schema.js'][79] = 0;
_$jscoverage['mongoose/schema.js'][80] = 0;
_$jscoverage['mongoose/schema.js'][82] = 0;
_$jscoverage['mongoose/schema.js'][83] = 0;
_$jscoverage['mongoose/schema.js'][85] = 0;
_$jscoverage['mongoose/schema.js'][86] = 0;
_$jscoverage['mongoose/schema.js'][29] = 0;
_$jscoverage['mongoose/schema.js'][35] = 0;
_$jscoverage['mongoose/schema.js'][36] = 0;
_$jscoverage['mongoose/schema.js'][38] = 0;
_$jscoverage['mongoose/schema.js'][39] = 0;
_$jscoverage['mongoose/schema.js'][40] = 0;
_$jscoverage['mongoose/schema.js'][46] = 0;
_$jscoverage['mongoose/schema.js'][61] = 0;
_$jscoverage['mongoose/schema.js'][77] = 0;
_$jscoverage['mongoose/schema.js'][87] = 0;
_$jscoverage['mongoose/schema.js'][88] = 0;
_$jscoverage['mongoose/schema.js'][101] = 0;
_$jscoverage['mongoose/schema.js'][102] = 0;
_$jscoverage['mongoose/schema.js'][103] = 0;
_$jscoverage['mongoose/schema.js'][105] = 0;
_$jscoverage['mongoose/schema.js'][106] = 0;
_$jscoverage['mongoose/schema.js'][108] = 0;
_$jscoverage['mongoose/schema.js'][110] = 0;
_$jscoverage['mongoose/schema.js'][112] = 0;
_$jscoverage['mongoose/schema.js'][89] = 0;
_$jscoverage['mongoose/schema.js'][91] = 0;
_$jscoverage['mongoose/schema.js'][92] = 0;
_$jscoverage['mongoose/schema.js'][94] = 0;
_$jscoverage['mongoose/schema.js'][95] = 0;
_$jscoverage['mongoose/schema.js'][96] = 0;
_$jscoverage['mongoose/schema.js'][98] = 0;
_$jscoverage['mongoose/schema.js'][100] = 0;
_$jscoverage['mongoose/schema.js'][113] = 0;
_$jscoverage['mongoose/schema.js'][114] = 0;
_$jscoverage['mongoose/schema.js'][115] = 0;
_$jscoverage['mongoose/schema.js'][117] = 0;
_$jscoverage['mongoose/schema.js'][119] = 0;
_$jscoverage['mongoose/schema.js'][118] = 0;
_$jscoverage['mongoose/schema.js'][120] = 0;
_$jscoverage['mongoose/schema.js'][122] = 0;
_$jscoverage['mongoose/schema.js'][123] = 0;
_$jscoverage['mongoose/schema.js'][124] = 0;
_$jscoverage['mongoose/schema.js'][126] = 0;
_$jscoverage['mongoose/schema.js'][128] = 0;
_$jscoverage['mongoose/schema.js'][129] = 0;
_$jscoverage['mongoose/schema.js'][131] = 0;
_$jscoverage['mongoose/schema.js'][132] = 0;
_$jscoverage['mongoose/schema.js'][133] = 0;
_$jscoverage['mongoose/schema.js'][134] = 0;
_$jscoverage['mongoose/schema.js'][135] = 0;
_$jscoverage['mongoose/schema.js'][146] = 0;
_$jscoverage['mongoose/schema.js'][147] = 0;
_$jscoverage['mongoose/schema.js'][148] = 0;
_$jscoverage['mongoose/schema.js'][159] = 0;
_$jscoverage['mongoose/schema.js'][160] = 0;
_$jscoverage['mongoose/schema.js'][171] = 0;
_$jscoverage['mongoose/schema.js'][172] = 0;
_$jscoverage['mongoose/schema.js'][182] = 0;
_$jscoverage['mongoose/schema.js'][183] = 0;
_$jscoverage['mongoose/schema.js'][184] = 0;
_$jscoverage['mongoose/schema.js'][195] = 0;
_$jscoverage['mongoose/schema.js'][196] = 0;
_$jscoverage['mongoose/schema.js'][197] = 0;
_$jscoverage['mongoose/schema.js'][207] = 0;
_$jscoverage['mongoose/schema.js'][208] = 0;
_$jscoverage['mongoose/schema.js'][209] = 0;
_$jscoverage['mongoose/schema.js'][210] = 0;
_$jscoverage['mongoose/schema.js'][211] = 0;
_$jscoverage['mongoose/schema.js'][222] = 0;
_$jscoverage['mongoose/schema.js'][223] = 0;
_$jscoverage['mongoose/schema.js'][224] = 0;
_$jscoverage['mongoose/schema.js'][234] = 0;
_$jscoverage['mongoose/schema.js'][235] = 0;
_$jscoverage['mongoose/schema.js'][236] = 0;
_$jscoverage['mongoose/schema.js'][237] = 0;
_$jscoverage['mongoose/schema.js'][238] = 0;
_$jscoverage['mongoose/schema.js'][251] = 0;
_$jscoverage['mongoose/schema.js'][252] = 0;
_$jscoverage['mongoose/schema.js'][253] = 0;
_$jscoverage['mongoose/schema.js'][264] = 0;
_$jscoverage['mongoose/schema.js'][265] = 0;
_$jscoverage['mongoose/schema.js'][266] = 0;
_$jscoverage['mongoose/schema.js'][267] = 0;
_$jscoverage['mongoose/schema.js'][268] = 0;
_$jscoverage['mongoose/schema.js'][149] = 0;
_$jscoverage['mongoose/schema.js'][150] = 0;
_$jscoverage['mongoose/schema.js'][151] = 0;
_$jscoverage['mongoose/schema.js'][162] = 0;
_$jscoverage['mongoose/schema.js'][163] = 0;
_$jscoverage['mongoose/schema.js'][164] = 0;
_$jscoverage['mongoose/schema.js'][165] = 0;
_$jscoverage['mongoose/schema.js'][176] = 0;
_$jscoverage['mongoose/schema.js'][177] = 0;
_$jscoverage['mongoose/schema.js'][178] = 0;
_$jscoverage['mongoose/schema.js'][189] = 0;
_$jscoverage['mongoose/schema.js'][190] = 0;
_$jscoverage['mongoose/schema.js'][201] = 0;
_$jscoverage['mongoose/schema.js'][202] = 0;
_$jscoverage['mongoose/schema.js'][212] = 0;
_$jscoverage['mongoose/schema.js'][213] = 0;
_$jscoverage['mongoose/schema.js'][214] = 0;
_$jscoverage['mongoose/schema.js'][225] = 0;
_$jscoverage['mongoose/schema.js'][226] = 0;
_$jscoverage['mongoose/schema.js'][227] = 0;
_$jscoverage['mongoose/schema.js'][228] = 0;
_$jscoverage['mongoose/schema.js'][230] = 0;
_$jscoverage['mongoose/schema.js'][231] = 0;
_$jscoverage['mongoose/schema.js'][242] = 0;
_$jscoverage['mongoose/schema.js'][243] = 0;
_$jscoverage['mongoose/schema.js'][244] = 0;
_$jscoverage['mongoose/schema.js'][245] = 0;
_$jscoverage['mongoose/schema.js'][247] = 0;
_$jscoverage['mongoose/schema.js'][248] = 0;
_$jscoverage['mongoose/schema.js'][261] = 0;
_$jscoverage['mongoose/schema.js'][262] = 0;
_$jscoverage['mongoose/schema.js'][263] = 0;
_$jscoverage['mongoose/schema.js'][274] = 0;
_$jscoverage['mongoose/schema.js'][275] = 0;
_$jscoverage['mongoose/schema.js'][276] = 0;
_$jscoverage['mongoose/schema.js'][277] = 0;
_$jscoverage['mongoose/schema.js'][278] = 0;
_$jscoverage['mongoose/schema.js'][280] = 0;
_$jscoverage['mongoose/schema.js'][281] = 0;
_$jscoverage['mongoose/schema.js'][282] = 0;
_$jscoverage['mongoose/schema.js'][283] = 0;
_$jscoverage['mongoose/schema.js'][284] = 0;
_$jscoverage['mongoose/schema.js'][285] = 0;
_$jscoverage['mongoose/schema.js'][287] = 0;
_$jscoverage['mongoose/schema.js'][288] = 0;
_$jscoverage['mongoose/schema.js'][292] = 0;
_$jscoverage['mongoose/schema.js'][293] = 0;
_$jscoverage['mongoose/schema.js'][295] = 0;
_$jscoverage['mongoose/schema.js'][296] = 0;
_$jscoverage['mongoose/schema.js'][297] = 0;
_$jscoverage['mongoose/schema.js'][298] = 0;
_$jscoverage['mongoose/schema.js'][299] = 0;
_$jscoverage['mongoose/schema.js'][300] = 0;
_$jscoverage['mongoose/schema.js'][301] = 0;
_$jscoverage['mongoose/schema.js'][304] = 0;
_$jscoverage['mongoose/schema.js'][306] = 0;
_$jscoverage['mongoose/schema.js'][307] = 0;
_$jscoverage['mongoose/schema.js'][308] = 0;
_$jscoverage['mongoose/schema.js'][310] = 0;
_$jscoverage['mongoose/schema.js'][309] = 0;
_$jscoverage['mongoose/schema.js'][316] = 0;
_$jscoverage['mongoose/schema.js'][318] = 0;
_$jscoverage['mongoose/schema.js'][328] = 0;
_$jscoverage['mongoose/schema.js'][329] = 0;
_$jscoverage['mongoose/schema.js'][330] = 0;
_$jscoverage['mongoose/schema.js'][342] = 0;
_$jscoverage['mongoose/schema.js'][343] = 0;
_$jscoverage['mongoose/schema.js'][352] = 0;
_$jscoverage['mongoose/schema.js'][353] = 0;
_$jscoverage['mongoose/schema.js'][361] = 0;
_$jscoverage['mongoose/schema.js'][363] = 0;
_$jscoverage['mongoose/schema.js'][365] = 0;
}
_$jscoverage['mongoose/schema.js'][6]++;
var EventEmitter = require("events").EventEmitter, Types = require("./schema/"), utils = require("./utils");
_$jscoverage['mongoose/schema.js'][17]++;
var EventEmitter = require("events").EventEmitter, Types = require("./schema/index"), VirtualType = require("./virtualtype"), utils = require("./utils");
_$jscoverage['mongoose/schema.js'][18]++;
function Schema(obj, options) {
_$jscoverage['mongoose/schema.js'][18]++;
_$jscoverage['mongoose/schema.js'][19]++;
this.paths = {};
_$jscoverage['mongoose/schema.js'][19]++;
this.inherits = {};
_$jscoverage['mongoose/schema.js'][20]++;
this.callQueue = [];
this.virtuals = {};
_$jscoverage['mongoose/schema.js'][21]++;
this._indexes = [];
this.inherits = {};
_$jscoverage['mongoose/schema.js'][22]++;
this._methods = {};
this.callQueue = [];
_$jscoverage['mongoose/schema.js'][23]++;
this._statics = {};
this._indexes = [];
_$jscoverage['mongoose/schema.js'][24]++;
this.methods = {};
_$jscoverage['mongoose/schema.js'][25]++;
this.statics = {};
_$jscoverage['mongoose/schema.js'][26]++;
this.tree = {};
_$jscoverage['mongoose/schema.js'][25]++;
_$jscoverage['mongoose/schema.js'][29]++;
this.options = utils.options({safe: false, "use$SetOnSave": true}, options);
_$jscoverage['mongoose/schema.js'][35]++;
if (obj) {
_$jscoverage['mongoose/schema.js'][26]++;
_$jscoverage['mongoose/schema.js'][36]++;
this.add(obj);
}
_$jscoverage['mongoose/schema.js'][27]++;
this.add({_id: ObjectId});
_$jscoverage['mongoose/schema.js'][28]++;
this.options = utils.options({safe: false}, options);
_$jscoverage['mongoose/schema.js'][38]++;
if (! this.paths._id) {
_$jscoverage['mongoose/schema.js'][39]++;
this.add({_id: ObjectId});
}
}
_$jscoverage['mongoose/schema.js'][31]++;
_$jscoverage['mongoose/schema.js'][40]++;
;
_$jscoverage['mongoose/schema.js'][37]++;
_$jscoverage['mongoose/schema.js'][46]++;
Schema.prototype.__proto__ = EventEmitter.prototype;
_$jscoverage['mongoose/schema.js'][52]++;
_$jscoverage['mongoose/schema.js'][61]++;
Schema.prototype.paths;
_$jscoverage['mongoose/schema.js'][68]++;
_$jscoverage['mongoose/schema.js'][77]++;
Schema.prototype.tree;
_$jscoverage['mongoose/schema.js'][78]++;
_$jscoverage['mongoose/schema.js'][87]++;
Schema.prototype.add = (function (obj, prefix) {
_$jscoverage['mongoose/schema.js'][79]++;
_$jscoverage['mongoose/schema.js'][88]++;
prefix = prefix || "";
_$jscoverage['mongoose/schema.js'][80]++;
_$jscoverage['mongoose/schema.js'][89]++;
for (var i in obj) {
_$jscoverage['mongoose/schema.js'][82]++;
_$jscoverage['mongoose/schema.js'][91]++;
if (! prefix && ! this.tree[i]) {
_$jscoverage['mongoose/schema.js'][83]++;
_$jscoverage['mongoose/schema.js'][92]++;
this.tree[i] = obj[i];
}
_$jscoverage['mongoose/schema.js'][85]++;
_$jscoverage['mongoose/schema.js'][94]++;
if (obj[i].constructor == Object && (! obj[i].type || obj[i].__nested)) {
_$jscoverage['mongoose/schema.js'][86]++;
this.add(obj[i], i + ".");
_$jscoverage['mongoose/schema.js'][95]++;
if (Object.keys(obj[i]).length) {
_$jscoverage['mongoose/schema.js'][96]++;
this.add(obj[i], i + ".");
}
else {
_$jscoverage['mongoose/schema.js'][98]++;
this.path(prefix + i, obj[i]);
}
}
else {
_$jscoverage['mongoose/schema.js'][88]++;
_$jscoverage['mongoose/schema.js'][100]++;
this.path(prefix + i, obj[i]);

@@ -156,163 +188,215 @@ }

});
_$jscoverage['mongoose/schema.js'][101]++;
_$jscoverage['mongoose/schema.js'][113]++;
Schema.prototype.path = (function (path, obj) {
_$jscoverage['mongoose/schema.js'][102]++;
_$jscoverage['mongoose/schema.js'][114]++;
if (obj == undefined) {
_$jscoverage['mongoose/schema.js'][103]++;
_$jscoverage['mongoose/schema.js'][115]++;
return this.paths[path];
}
_$jscoverage['mongoose/schema.js'][105]++;
_$jscoverage['mongoose/schema.js'][117]++;
if (obj.constructor != Object) {
_$jscoverage['mongoose/schema.js'][106]++;
_$jscoverage['mongoose/schema.js'][118]++;
obj = {type: obj};
}
_$jscoverage['mongoose/schema.js'][108]++;
var type = obj.type;
_$jscoverage['mongoose/schema.js'][110]++;
if (Array.isArray(type) || type == Array) {
_$jscoverage['mongoose/schema.js'][112]++;
var cast = type == Array? obj.cast: type[0];
_$jscoverage['mongoose/schema.js'][114]++;
if (cast instanceof Schema) {
_$jscoverage['mongoose/schema.js'][115]++;
this.paths[path] = new Types.DocumentArray(path, cast, obj);
_$jscoverage['mongoose/schema.js'][120]++;
var type = obj.type || {};
_$jscoverage['mongoose/schema.js'][122]++;
if (type.constructor == Object) {
_$jscoverage['mongoose/schema.js'][123]++;
this.paths[path] = new Types.Mixed(path, obj);
}
else {
_$jscoverage['mongoose/schema.js'][124]++;
if (Array.isArray(type) || type == Array) {
_$jscoverage['mongoose/schema.js'][126]++;
var cast = type == Array? obj.cast: type[0];
_$jscoverage['mongoose/schema.js'][128]++;
if (cast instanceof Schema) {
_$jscoverage['mongoose/schema.js'][129]++;
this.paths[path] = new Types.DocumentArray(path, cast, obj);
}
else {
_$jscoverage['mongoose/schema.js'][131]++;
this.paths[path] = new Types.Array(path, cast, obj);
}
}
else {
_$jscoverage['mongoose/schema.js'][117]++;
this.paths[path] = new Types.Array(path, cast, obj);
_$jscoverage['mongoose/schema.js'][133]++;
this.paths[path] = new Types[type.name](path, obj);
}
}
else {
_$jscoverage['mongoose/schema.js'][119]++;
this.paths[path] = new Types[type.name](path, obj);
}
_$jscoverage['mongoose/schema.js'][135]++;
return this;
});
_$jscoverage['mongoose/schema.js'][131]++;
_$jscoverage['mongoose/schema.js'][147]++;
Schema.prototype.eachPath = (function (fn) {
_$jscoverage['mongoose/schema.js'][132]++;
_$jscoverage['mongoose/schema.js'][148]++;
for (var k in this.paths) {
_$jscoverage['mongoose/schema.js'][133]++;
_$jscoverage['mongoose/schema.js'][149]++;
if (this.paths.hasOwnProperty(k)) {
_$jscoverage['mongoose/schema.js'][134]++;
_$jscoverage['mongoose/schema.js'][150]++;
fn(k, this.paths[k]);
}
}
_$jscoverage['mongoose/schema.js'][135]++;
_$jscoverage['mongoose/schema.js'][151]++;
return this;
});
_$jscoverage['mongoose/schema.js'][146]++;
_$jscoverage['mongoose/schema.js'][162]++;
Schema.prototype.pathType = (function (path) {
_$jscoverage['mongoose/schema.js'][163]++;
if (path in this.paths) {
_$jscoverage['mongoose/schema.js'][163]++;
return "real";
}
_$jscoverage['mongoose/schema.js'][164]++;
if (path in this.virtuals) {
_$jscoverage['mongoose/schema.js'][164]++;
return "virtual";
}
_$jscoverage['mongoose/schema.js'][165]++;
return "adhocOrUndefined";
});
_$jscoverage['mongoose/schema.js'][176]++;
Schema.prototype.queue = (function (name, args) {
_$jscoverage['mongoose/schema.js'][147]++;
_$jscoverage['mongoose/schema.js'][177]++;
this.callQueue.push([name, args]);
_$jscoverage['mongoose/schema.js'][148]++;
_$jscoverage['mongoose/schema.js'][178]++;
return this;
});
_$jscoverage['mongoose/schema.js'][159]++;
_$jscoverage['mongoose/schema.js'][189]++;
Schema.prototype.pre = (function () {
_$jscoverage['mongoose/schema.js'][160]++;
_$jscoverage['mongoose/schema.js'][190]++;
return this.queue("pre", arguments);
});
_$jscoverage['mongoose/schema.js'][171]++;
_$jscoverage['mongoose/schema.js'][201]++;
Schema.prototype.post = (function (method, fn) {
_$jscoverage['mongoose/schema.js'][172]++;
_$jscoverage['mongoose/schema.js'][202]++;
return this.queue("on", arguments);
});
_$jscoverage['mongoose/schema.js'][182]++;
Schema.prototype.plugin = (function (fn) {
_$jscoverage['mongoose/schema.js'][183]++;
fn(this);
_$jscoverage['mongoose/schema.js'][184]++;
_$jscoverage['mongoose/schema.js'][212]++;
Schema.prototype.plugin = (function (fn, opts) {
_$jscoverage['mongoose/schema.js'][213]++;
fn(this, opts);
_$jscoverage['mongoose/schema.js'][214]++;
return this;
});
_$jscoverage['mongoose/schema.js'][195]++;
_$jscoverage['mongoose/schema.js'][225]++;
Schema.prototype.method = (function (name, fn) {
_$jscoverage['mongoose/schema.js'][196]++;
this._methods[name] = fn;
_$jscoverage['mongoose/schema.js'][197]++;
return this;
});
_$jscoverage['mongoose/schema.js'][207]++;
Schema.prototype.methods = (function (obj) {
_$jscoverage['mongoose/schema.js'][208]++;
if (obj) {
_$jscoverage['mongoose/schema.js'][209]++;
for (var i in obj) {
_$jscoverage['mongoose/schema.js'][210]++;
this._methods[i] = obj[i];
_$jscoverage['mongoose/schema.js'][226]++;
if ("string" != typeof name) {
_$jscoverage['mongoose/schema.js'][227]++;
for (var i in name) {
_$jscoverage['mongoose/schema.js'][228]++;
this.methods[i] = name[i];
}
}
_$jscoverage['mongoose/schema.js'][211]++;
else {
_$jscoverage['mongoose/schema.js'][230]++;
this.methods[name] = fn;
}
_$jscoverage['mongoose/schema.js'][231]++;
return this;
});
_$jscoverage['mongoose/schema.js'][222]++;
_$jscoverage['mongoose/schema.js'][242]++;
Schema.prototype["static"] = (function (name, fn) {
_$jscoverage['mongoose/schema.js'][223]++;
this._statics[name] = fn;
_$jscoverage['mongoose/schema.js'][224]++;
return this;
});
_$jscoverage['mongoose/schema.js'][234]++;
Schema.prototype.statics = (function (obj) {
_$jscoverage['mongoose/schema.js'][235]++;
if (obj) {
_$jscoverage['mongoose/schema.js'][236]++;
for (var i in obj) {
_$jscoverage['mongoose/schema.js'][237]++;
this._statics[i] = obj[i];
_$jscoverage['mongoose/schema.js'][243]++;
if ("string" != typeof name) {
_$jscoverage['mongoose/schema.js'][244]++;
for (var i in name) {
_$jscoverage['mongoose/schema.js'][245]++;
this.statics[i] = name[i];
}
}
_$jscoverage['mongoose/schema.js'][238]++;
else {
_$jscoverage['mongoose/schema.js'][247]++;
this.statics[name] = fn;
}
_$jscoverage['mongoose/schema.js'][248]++;
return this;
});
_$jscoverage['mongoose/schema.js'][251]++;
_$jscoverage['mongoose/schema.js'][261]++;
Schema.prototype.index = (function (fields, options) {
_$jscoverage['mongoose/schema.js'][252]++;
_$jscoverage['mongoose/schema.js'][262]++;
this._indexes.push([fields, options || {}]);
_$jscoverage['mongoose/schema.js'][253]++;
_$jscoverage['mongoose/schema.js'][263]++;
return this;
});
_$jscoverage['mongoose/schema.js'][264]++;
_$jscoverage['mongoose/schema.js'][274]++;
Schema.prototype.set = (function (key, value) {
_$jscoverage['mongoose/schema.js'][265]++;
_$jscoverage['mongoose/schema.js'][275]++;
if (arguments.length == 1) {
_$jscoverage['mongoose/schema.js'][266]++;
_$jscoverage['mongoose/schema.js'][276]++;
return this.options[key];
}
_$jscoverage['mongoose/schema.js'][267]++;
_$jscoverage['mongoose/schema.js'][277]++;
this.options[key] = value;
_$jscoverage['mongoose/schema.js'][268]++;
_$jscoverage['mongoose/schema.js'][278]++;
return this;
});
_$jscoverage['mongoose/schema.js'][277]++;
_$jscoverage['mongoose/schema.js'][287]++;
Schema.prototype.__defineGetter__("indexes", (function () {
_$jscoverage['mongoose/schema.js'][278]++;
var index, indexes = [];
_$jscoverage['mongoose/schema.js'][280]++;
for (var i in this.paths) {
_$jscoverage['mongoose/schema.js'][281]++;
index = this.paths[i]._index;
_$jscoverage['mongoose/schema.js'][282]++;
if (index !== false && index !== null) {
_$jscoverage['mongoose/schema.js'][283]++;
var field = {};
_$jscoverage['mongoose/schema.js'][284]++;
field[i] = 1;
_$jscoverage['mongoose/schema.js'][285]++;
indexes.push([field, index.constructor == Object? index: {}]);
}
_$jscoverage['mongoose/schema.js'][288]++;
var index, indexes = [], seenSchemas = [];
_$jscoverage['mongoose/schema.js'][292]++;
function collectIndexes(paths, prefix) {
_$jscoverage['mongoose/schema.js'][293]++;
prefix = prefix || "";
_$jscoverage['mongoose/schema.js'][295]++;
for (var i in paths) {
_$jscoverage['mongoose/schema.js'][296]++;
if (paths[i]) {
_$jscoverage['mongoose/schema.js'][297]++;
if (paths[i] instanceof Types.DocumentArray) {
_$jscoverage['mongoose/schema.js'][299]++;
if (! (~ seenSchemas.indexOf(paths[i].schema))) {
_$jscoverage['mongoose/schema.js'][300]++;
seenSchemas.push(paths[i].schema);
_$jscoverage['mongoose/schema.js'][301]++;
collectIndexes(paths[i].schema.paths, i + ".");
}
}
else {
_$jscoverage['mongoose/schema.js'][304]++;
index = paths[i]._index;
_$jscoverage['mongoose/schema.js'][306]++;
if (index !== false && index !== null) {
_$jscoverage['mongoose/schema.js'][307]++;
var field = {};
_$jscoverage['mongoose/schema.js'][308]++;
field[prefix + i] = 1;
_$jscoverage['mongoose/schema.js'][309]++;
indexes.push([field, index.constructor == Object? index: {}]);
}
}
}
}
_$jscoverage['mongoose/schema.js'][288]++;
}
_$jscoverage['mongoose/schema.js'][316]++;
collectIndexes(this.paths);
_$jscoverage['mongoose/schema.js'][318]++;
return indexes.concat(this._indexes);
}));
_$jscoverage['mongoose/schema.js'][297]++;
_$jscoverage['mongoose/schema.js'][328]++;
Schema.prototype.virtual = (function (name) {
_$jscoverage['mongoose/schema.js'][329]++;
var virtuals = this.virtuals || (this.virtuals = {});
_$jscoverage['mongoose/schema.js'][330]++;
return virtuals[name] || (virtuals[name] = this.tree[name] = new VirtualType());
});
_$jscoverage['mongoose/schema.js'][342]++;
Schema.prototype.virtualpath = (function (name) {
_$jscoverage['mongoose/schema.js'][343]++;
return this.virtuals[name];
});
_$jscoverage['mongoose/schema.js'][352]++;
function ObjectId() {
_$jscoverage['mongoose/schema.js'][298]++;
_$jscoverage['mongoose/schema.js'][353]++;
throw new Error("This is an abstract interface. Its only purpose is to mark fields as ObjectId in the schema creation.");
}
_$jscoverage['mongoose/schema.js'][306]++;
_$jscoverage['mongoose/schema.js'][361]++;
module.exports = exports = Schema;
_$jscoverage['mongoose/schema.js'][308]++;
_$jscoverage['mongoose/schema.js'][363]++;
exports.Types = Types;
_$jscoverage['mongoose/schema.js'][310]++;
_$jscoverage['mongoose/schema.js'][365]++;
exports.ObjectId = ObjectId;
_$jscoverage['mongoose/schema.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , Types = require('./schema/')"," , utils = require('./utils');","","/**"," * Schema constructor."," *"," * @param {Object} definition"," * @api public"," */","","function Schema (obj, options) {"," this.paths = {};"," this.inherits = {};"," this.callQueue = [];"," this._indexes = [];"," this._methods = {};"," this._statics = {};"," this.tree = {};"," if (obj)"," this.add(obj);"," this.add({ _id: ObjectId });"," this.options = utils.options({"," safe: false"," }, options);","};","","/**"," * Inherit from EventEmitter."," */","","Schema.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Schema by paths"," *"," * Example (embedded doc):"," * {"," * 'test' : SchemaType,"," * , 'test.test' : SchemaType,"," * , 'first_name' : SchemaType"," * }"," *"," * @api private"," */","","Schema.prototype.paths;","","/**"," * Schema as a tree"," *"," * Example:"," * {"," * '_id' : ObjectId"," * , 'nested' : {"," * 'key': String"," * }"," * }"," *"," * @api private"," */","","Schema.prototype.tree;","","/**"," * Sets the keys"," *"," * @param {Object} keys"," * @param {String} prefix"," * @api public"," */","","Schema.prototype.add = function (obj, prefix) {"," prefix = prefix || '';"," for (var i in obj){"," // make sure set of keys are in `tree`"," if (!prefix &amp;&amp; !this.tree[i])"," this.tree[i] = obj[i];",""," if (obj[i].constructor == Object &amp;&amp; (!obj[i].type || obj[i].__nested))"," this.add(obj[i], i + '.');"," else"," this.path(prefix + i, obj[i]);"," }","};","","/**"," * Sets a path (if arity 2)"," * Gets a path (if arity 1)"," *"," * @param {String} path"," * @param {Object} constructor"," * @api public"," */","","Schema.prototype.path = function (path, obj) {"," if (obj == undefined)"," return this.paths[path];",""," if (obj.constructor != Object)"," obj = { type: obj };",""," var type = obj.type;",""," if (Array.isArray(type) || type == Array){"," // if it was specified through { type } look for `cast`"," var cast = type == Array ? obj.cast : type[0];",""," if (cast instanceof Schema)"," this.paths[path] = new Types.DocumentArray(path, cast, obj);"," else "," this.paths[path] = new Types.Array(path, cast, obj);"," } else"," this.paths[path] = new Types[type.name](path, obj);","};","","/**"," * Iterates through the schema's paths, passing the path string and type object"," * to the callback."," *"," * @param {Function} callback function - fn(pathstring, type)"," * @return {Schema} this for chaining"," * @api public"," */","","Schema.prototype.eachPath = function (fn) {"," for (var k in this.paths)"," if (this.paths.hasOwnProperty(k))"," fn(k, this.paths[k]);"," return this;","};","","/**"," * Adds a method call to the queue"," *"," * @param {String} method name"," * @param {Array} arguments"," * @api private"," */","","Schema.prototype.queue = function(name, args){"," this.callQueue.push([name, args]);"," return this;","};","","/**"," * Defines a pre for the document"," *"," * @param {String} method"," * @param {Function} callback"," * @api public"," */","","Schema.prototype.pre = function(){"," return this.queue('pre', arguments);","};","","/**"," * Defines a post for the document"," *"," * @param {String} method"," * @param {Function} callback"," * @api public"," */","","Schema.prototype.post = function(method, fn){"," return this.queue('on', arguments);","};","","/**"," * Registers a plugin for this schema"," *"," * @param {Function} plugin callback"," * @api public"," */","","Schema.prototype.plugin = function (fn) {"," fn(this);"," return this;","};","","/**"," * Adds a method"," *"," * @param {String} method name"," * @param {Function} handler"," * @api public"," */","","Schema.prototype.method = function (name, fn) {"," this._methods[name] = fn;"," return this;","};","","/**"," * Adds several methods"," *"," * @param {Object} handlers by name"," * @api public"," */","","Schema.prototype.methods = function (obj) {"," if (obj)"," for (var i in obj)"," this._methods[i] = obj[i];"," return this;","};","","/**"," * Defines a static method"," *"," * @param {String} name"," * @param {Function} handler"," * @api public"," */","","Schema.prototype.static = function(name, fn) {"," this._statics[name] = fn;"," return this;","};","","/**"," * Adds several statics"," *"," * @param {Object} handlers by name"," * @api public"," */","","Schema.prototype.statics = function (obj) {"," if (obj)"," for (var i in obj)"," this._statics[i] = obj[i];"," return this;","};","","/**"," * Defines an index (most likely compound)"," * Example:"," * schema.index({ first: 1, last: -1 }, true })"," *"," * @param {Object} field"," * @param {Object} optional options object"," * @api public"," */","","Schema.prototype.index = function (fields, options) {"," this._indexes.push([fields, options || {}]);"," return this;","};","","/**"," * Sets/gets an option"," *"," * @param {String} key"," * @param {Object} optional value"," * @api public"," */","","Schema.prototype.set = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Compiles indexes from fields and schema-level indexes"," *"," * @api public"," */","","Schema.prototype.__defineGetter__('indexes', function () {"," var index"," , indexes = [];"," for (var i in this.paths){"," index = this.paths[i]._index;"," if (index !== false &amp;&amp; index !== null){"," var field = {};"," field[i] = 1;"," indexes.push([field, index.constructor == Object ? index : {} ]);"," }"," }"," return indexes.concat(this._indexes);","});","","/**"," * ObjectId schema identifier. Not an actual ObjectId, only used for Schemas."," *"," * @api public"," */","","function ObjectId () {"," throw new Error('This is an abstract interface. Its only purpose is to mark '"," + 'fields as ObjectId in the schema creation.');","}","","/**"," * Module exports."," */","","module.exports = exports = Schema;","","exports.Types = Types;","","exports.ObjectId = ObjectId;"];
_$jscoverage['mongoose/schema.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , Types = require('./schema/index')"," , VirtualType = require('./virtualtype')"," , utils = require('./utils');","","/**"," * Schema constructor."," *"," * @param {Object} definition"," * @api public"," */","","function Schema (obj, options) {"," this.paths = {};"," this.virtuals = {};"," this.inherits = {};"," this.callQueue = [];"," this._indexes = [];"," this.methods = {};"," this.statics = {};"," this.tree = {};",""," // set options"," this.options = utils.options({"," safe: false"," , 'use$SetOnSave': true"," }, options);",""," // build paths"," if (obj)"," this.add(obj);",""," if (!this.paths['_id'])"," this.add({ _id: ObjectId });","};","","/**"," * Inherit from EventEmitter."," */","","Schema.prototype.__proto__ = EventEmitter.prototype;","","/**"," * Schema by paths"," *"," * Example (embedded doc):"," * {"," * 'test' : SchemaType,"," * , 'test.test' : SchemaType,"," * , 'first_name' : SchemaType"," * }"," *"," * @api private"," */","","Schema.prototype.paths;","","/**"," * Schema as a tree"," *"," * Example:"," * {"," * '_id' : ObjectId"," * , 'nested' : {"," * 'key': String"," * }"," * }"," *"," * @api private"," */","","Schema.prototype.tree;","","/**"," * Sets the keys"," *"," * @param {Object} keys"," * @param {String} prefix"," * @api public"," */","","Schema.prototype.add = function (obj, prefix) {"," prefix = prefix || '';"," for (var i in obj){"," // make sure set of keys are in `tree`"," if (!prefix &amp;&amp; !this.tree[i])"," this.tree[i] = obj[i];",""," if (obj[i].constructor == Object &amp;&amp; (!obj[i].type || obj[i].__nested)) {"," if (Object.keys(obj[i]).length)"," this.add(obj[i], i + '.');"," else"," this.path(prefix + i, obj[i]); // mixed type"," } else"," this.path(prefix + i, obj[i]);"," }","};","","/**"," * Sets a path (if arity 2)"," * Gets a path (if arity 1)"," *"," * @param {String} path"," * @param {Object} constructor"," * @api public"," */","","Schema.prototype.path = function (path, obj) {"," if (obj == undefined)"," return this.paths[path];",""," if (obj.constructor != Object)"," obj = { type: obj };",""," var type = obj.type || {}; // defaults to mixed",""," if (type.constructor == Object)"," this.paths[path] = new Types.Mixed(path, obj);"," else if (Array.isArray(type) || type == Array){"," // if it was specified through { type } look for `cast`"," var cast = type == Array ? obj.cast : type[0];",""," if (cast instanceof Schema)"," this.paths[path] = new Types.DocumentArray(path, cast, obj);"," else "," this.paths[path] = new Types.Array(path, cast, obj);"," } else"," this.paths[path] = new Types[type.name](path, obj);",""," return this;","};","","/**"," * Iterates through the schema's paths, passing the path string and type object"," * to the callback."," *"," * @param {Function} callback function - fn(pathstring, type)"," * @return {Schema} this for chaining"," * @api public"," */","","Schema.prototype.eachPath = function (fn) {"," for (var k in this.paths)"," if (this.paths.hasOwnProperty(k))"," fn(k, this.paths[k]);"," return this;","};","","/**"," * Given a path, returns whether it is a real, virtual, or"," * ad-hoc/undefined path"," *"," * @param {String} path"," * @return {String}"," * @api public"," */","Schema.prototype.pathType = function (path) {"," if (path in this.paths) return 'real';"," if (path in this.virtuals) return 'virtual';"," return 'adhocOrUndefined';","};","","/**"," * Adds a method call to the queue"," *"," * @param {String} method name"," * @param {Array} arguments"," * @api private"," */","","Schema.prototype.queue = function(name, args){"," this.callQueue.push([name, args]);"," return this;","};","","/**"," * Defines a pre for the document"," *"," * @param {String} method"," * @param {Function} callback"," * @api public"," */","","Schema.prototype.pre = function(){"," return this.queue('pre', arguments);","};","","/**"," * Defines a post for the document"," *"," * @param {String} method"," * @param {Function} callback"," * @api public"," */","","Schema.prototype.post = function(method, fn){"," return this.queue('on', arguments);","};","","/**"," * Registers a plugin for this schema"," *"," * @param {Function} plugin callback"," * @api public"," */","","Schema.prototype.plugin = function (fn, opts) {"," fn(this, opts);"," return this;","};","","/**"," * Adds a method"," *"," * @param {String} method name"," * @param {Function} handler"," * @api public"," */","","Schema.prototype.method = function (name, fn) {"," if ('string' != typeof name)"," for (var i in name)"," this.methods[i] = name[i];"," else"," this.methods[name] = fn;"," return this;","};","","/**"," * Defines a static method"," *"," * @param {String} name"," * @param {Function} handler"," * @api public"," */","","Schema.prototype.static = function(name, fn) {"," if ('string' != typeof name)"," for (var i in name)"," this.statics[i] = name[i];"," else"," this.statics[name] = fn;"," return this;","};","","/**"," * Defines an index (most likely compound)"," * Example:"," * schema.index({ first: 1, last: -1 })"," *"," * @param {Object} field"," * @param {Object} optional options object"," * @api public"," */","","Schema.prototype.index = function (fields, options) {"," this._indexes.push([fields, options || {}]);"," return this;","};","","/**"," * Sets/gets an option"," *"," * @param {String} key"," * @param {Object} optional value"," * @api public"," */","","Schema.prototype.set = function (key, value) {"," if (arguments.length == 1)"," return this.options[key];"," this.options[key] = value;"," return this;","};","","/**"," * Compiles indexes from fields and schema-level indexes"," *"," * @api public"," */","","Schema.prototype.__defineGetter__('indexes', function () {"," var index"," , indexes = []"," , seenSchemas = [];",""," function collectIndexes (paths, prefix) {"," prefix = prefix || '';",""," for (var i in paths){"," if (paths[i]) {"," if (paths[i] instanceof Types.DocumentArray) {"," // avoid recursion"," if (!(~seenSchemas.indexOf(paths[i].schema))) {"," seenSchemas.push(paths[i].schema);"," collectIndexes(paths[i].schema.paths, i + '.');"," }"," } else {"," index = paths[i]._index;",""," if (index !== false &amp;&amp; index !== null){"," var field = {};"," field[prefix + i] = 1;"," indexes.push([field, index.constructor == Object ? index : {} ]);"," }"," }"," }"," }"," }",""," collectIndexes(this.paths);",""," return indexes.concat(this._indexes);","});","","/**"," * Retrieves or creates the virtual type with the given name."," *"," * @param {String} name"," * @return {VirtualType}"," */","","Schema.prototype.virtual = function (name) {"," var virtuals = this.virtuals || (this.virtuals = {})"," return virtuals[name] || (virtuals[name] = this.tree[name] = new VirtualType()); ","};","","/**"," * Fetches the virtual type with the given name."," * Should be distinct from virtual because virtual auto-defines a new VirtualType"," * if the path doesn't exist."," *"," * @param {String} name"," * @return {VirtualType}"," */","","Schema.prototype.virtualpath = function (name) {"," return this.virtuals[name];","};","","/**"," * ObjectId schema identifier. Not an actual ObjectId, only used for Schemas."," *"," * @api public"," */","","function ObjectId () {"," throw new Error('This is an abstract interface. Its only purpose is to mark '"," + 'fields as ObjectId in the schema creation.');","}","","/**"," * Module exports."," */","","module.exports = exports = Schema;","","exports.Types = Types;","","exports.ObjectId = ObjectId;"];

@@ -6,78 +6,84 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schema/array.js'][5] = 0;
_$jscoverage['mongoose/schema/array.js'][24] = 0;
_$jscoverage['mongoose/schema/array.js'][25] = 0;
_$jscoverage['mongoose/schema/array.js'][27] = 0;
_$jscoverage['mongoose/schema/array.js'][26] = 0;
_$jscoverage['mongoose/schema/array.js'][28] = 0;
_$jscoverage['mongoose/schema/array.js'][31] = 0;
_$jscoverage['mongoose/schema/array.js'][33] = 0;
_$jscoverage['mongoose/schema/array.js'][29] = 0;
_$jscoverage['mongoose/schema/array.js'][32] = 0;
_$jscoverage['mongoose/schema/array.js'][34] = 0;
_$jscoverage['mongoose/schema/array.js'][36] = 0;
_$jscoverage['mongoose/schema/array.js'][42] = 0;
_$jscoverage['mongoose/schema/array.js'][50] = 0;
_$jscoverage['mongoose/schema/array.js'][35] = 0;
_$jscoverage['mongoose/schema/array.js'][37] = 0;
_$jscoverage['mongoose/schema/array.js'][43] = 0;
_$jscoverage['mongoose/schema/array.js'][51] = 0;
_$jscoverage['mongoose/schema/array.js'][62] = 0;
_$jscoverage['mongoose/schema/array.js'][52] = 0;
_$jscoverage['mongoose/schema/array.js'][63] = 0;
_$jscoverage['mongoose/schema/array.js'][64] = 0;
_$jscoverage['mongoose/schema/array.js'][65] = 0;
_$jscoverage['mongoose/schema/array.js'][67] = 0;
_$jscoverage['mongoose/schema/array.js'][69] = 0;
_$jscoverage['mongoose/schema/array.js'][66] = 0;
_$jscoverage['mongoose/schema/array.js'][68] = 0;
_$jscoverage['mongoose/schema/array.js'][70] = 0;
_$jscoverage['mongoose/schema/array.js'][71] = 0;
_$jscoverage['mongoose/schema/array.js'][72] = 0;
_$jscoverage['mongoose/schema/array.js'][75] = 0;
_$jscoverage['mongoose/schema/array.js'][77] = 0;
_$jscoverage['mongoose/schema/array.js'][79] = 0;
_$jscoverage['mongoose/schema/array.js'][73] = 0;
_$jscoverage['mongoose/schema/array.js'][76] = 0;
_$jscoverage['mongoose/schema/array.js'][80] = 0;
_$jscoverage['mongoose/schema/array.js'][82] = 0;
_$jscoverage['mongoose/schema/array.js'][89] = 0;
_$jscoverage['mongoose/schema/array.js'][85] = 0;
_$jscoverage['mongoose/schema/array.js'][96] = 0;
_$jscoverage['mongoose/schema/array.js'][97] = 0;
_$jscoverage['mongoose/schema/array.js'][98] = 0;
_$jscoverage['mongoose/schema/array.js'][100] = 0;
_$jscoverage['mongoose/schema/array.js'][102] = 0;
_$jscoverage['mongoose/schema/array.js'][109] = 0;
}
_$jscoverage['mongoose/schema/array.js'][5]++;
var SchemaType = require("../schematype"), CastError = SchemaType.CastError, Types = {Boolean: require("./boolean"), Date: require("./date"), Number: require("./number"), String: require("./string"), ObjectId: require("./objectid")}, MongooseArray = require("../types").Array;
_$jscoverage['mongoose/schema/array.js'][24]++;
var SchemaType = require("../schematype"), CastError = SchemaType.CastError, ArrayNumberSchema = (function () {
}), Types = {Boolean: require("./boolean"), Date: require("./date"), Number: ArrayNumberSchema, String: require("./string"), ObjectId: require("./objectid")}, MongooseArray = require("../types").Array;
_$jscoverage['mongoose/schema/array.js'][25]++;
function SchemaArray(key, cast, options) {
_$jscoverage['mongoose/schema/array.js'][25]++;
_$jscoverage['mongoose/schema/array.js'][26]++;
SchemaType.call(this, key, options);
_$jscoverage['mongoose/schema/array.js'][27]++;
_$jscoverage['mongoose/schema/array.js'][28]++;
if (cast) {
_$jscoverage['mongoose/schema/array.js'][28]++;
_$jscoverage['mongoose/schema/array.js'][29]++;
this.caster = cast.name in Types? Types[cast.name]: cast;
}
_$jscoverage['mongoose/schema/array.js'][31]++;
_$jscoverage['mongoose/schema/array.js'][32]++;
var self = this;
_$jscoverage['mongoose/schema/array.js'][33]++;
_$jscoverage['mongoose/schema/array.js'][34]++;
this["default"]((function () {
_$jscoverage['mongoose/schema/array.js'][34]++;
_$jscoverage['mongoose/schema/array.js'][35]++;
return new MongooseArray([], self.path, this);
}));
}
_$jscoverage['mongoose/schema/array.js'][36]++;
_$jscoverage['mongoose/schema/array.js'][37]++;
;
_$jscoverage['mongoose/schema/array.js'][42]++;
_$jscoverage['mongoose/schema/array.js'][43]++;
SchemaArray.prototype.__proto__ = SchemaType.prototype;
_$jscoverage['mongoose/schema/array.js'][50]++;
_$jscoverage['mongoose/schema/array.js'][51]++;
SchemaArray.prototype.checkRequired = (function (value) {
_$jscoverage['mongoose/schema/array.js'][51]++;
_$jscoverage['mongoose/schema/array.js'][52]++;
return ! ! (value && value.length);
});
_$jscoverage['mongoose/schema/array.js'][62]++;
_$jscoverage['mongoose/schema/array.js'][63]++;
SchemaArray.prototype.cast = (function (value, doc) {
_$jscoverage['mongoose/schema/array.js'][63]++;
_$jscoverage['mongoose/schema/array.js'][64]++;
if (Array.isArray(value)) {
_$jscoverage['mongoose/schema/array.js'][64]++;
_$jscoverage['mongoose/schema/array.js'][65]++;
if (! (value instanceof MongooseArray)) {
_$jscoverage['mongoose/schema/array.js'][65]++;
_$jscoverage['mongoose/schema/array.js'][66]++;
value = new MongooseArray(value, this.path, doc);
}
_$jscoverage['mongoose/schema/array.js'][67]++;
_$jscoverage['mongoose/schema/array.js'][68]++;
var caster = this.caster;
_$jscoverage['mongoose/schema/array.js'][69]++;
_$jscoverage['mongoose/schema/array.js'][70]++;
if (caster) {
_$jscoverage['mongoose/schema/array.js'][70]++;
_$jscoverage['mongoose/schema/array.js'][71]++;
for (var i = 0, l = value.length; i < l; i++) {
_$jscoverage['mongoose/schema/array.js'][71]++;
_$jscoverage['mongoose/schema/array.js'][72]++;
try {
_$jscoverage['mongoose/schema/array.js'][72]++;
_$jscoverage['mongoose/schema/array.js'][73]++;
value[i] = caster.prototype.cast.call(null, value[i]);
}
catch (e) {
_$jscoverage['mongoose/schema/array.js'][75]++;
_$jscoverage['mongoose/schema/array.js'][76]++;
throw new CastError(e.type, value);

@@ -87,12 +93,27 @@ }

}
_$jscoverage['mongoose/schema/array.js'][77]++;
;
_$jscoverage['mongoose/schema/array.js'][79]++;
_$jscoverage['mongoose/schema/array.js'][80]++;
return value;
}
_$jscoverage['mongoose/schema/array.js'][82]++;
else {
_$jscoverage['mongoose/schema/array.js'][82]++;
return this.cast([value], doc);
}
_$jscoverage['mongoose/schema/array.js'][85]++;
throw new CastError("array", value, caster);
});
_$jscoverage['mongoose/schema/array.js'][89]++;
_$jscoverage['mongoose/schema/array.js'][96]++;
ArrayNumberSchema.prototype.cast = (function (value) {
_$jscoverage['mongoose/schema/array.js'][97]++;
if (! isNaN(value)) {
_$jscoverage['mongoose/schema/array.js'][98]++;
if (value instanceof Number || typeof value == "number" || (value.toString && value.toString() == Number(value))) {
_$jscoverage['mongoose/schema/array.js'][100]++;
return Number(value);
}
}
_$jscoverage['mongoose/schema/array.js'][102]++;
throw new CastError("number", value);
});
_$jscoverage['mongoose/schema/array.js'][109]++;
module.exports = SchemaArray;
_$jscoverage['mongoose/schema/array.js'].source = ["/**"," * Module dependencies."," */","","var SchemaType = require('../schematype')"," , CastError = SchemaType.CastError"," , Types = {"," Boolean: require('./boolean')"," , Date: require('./date')"," , Number: require('./number')"," , String: require('./string')"," , ObjectId: require('./objectid')"," }"," , MongooseArray = require('../types').Array;","","/**"," * Array SchemaType constructor"," *"," * @param {String} key"," * @param {SchemaType} cast"," * @api private"," */","","function SchemaArray (key, cast, options) {"," SchemaType.call(this, key, options);",""," if (cast) {"," this.caster = cast.name in Types ? Types[cast.name] : cast;"," }",""," var self = this;",""," this.default(function(){"," return new MongooseArray([], self.path, this);"," });","};","","/**"," * Inherits from SchemaType."," */","","SchemaArray.prototype.__proto__ = SchemaType.prototype;","","/**"," * Check required"," *"," * @api private"," */","","SchemaArray.prototype.checkRequired = function (value) {"," return !!(value &amp;&amp; value.length);","};","","/**"," * Casts contents"," *"," * @param {Object} value"," * @param {Document} document that triggers the casting"," * @api private"," */","","SchemaArray.prototype.cast = function (value, doc) {"," if (Array.isArray(value)){"," if (!(value instanceof MongooseArray))"," value = new MongooseArray(value, this.path, doc);",""," var caster = this.caster;",""," if (caster)"," for (var i = 0, l = value.length; i &lt; l; i++){"," try {"," value[i] = caster.prototype.cast.call(null, value[i]);"," } catch(e){"," // rethrow"," throw new CastError(e.type, value);"," }"," };",""," return value;"," }",""," throw new CastError('array', value, caster);","};","","/**"," * Module exports."," */","","module.exports = SchemaArray;"];
_$jscoverage['mongoose/schema/array.js'].source = ["/**"," * Module dependencies."," */","","var SchemaType = require('../schematype')"," , CastError = SchemaType.CastError"," , ArrayNumberSchema = function () {}"," , Types = {"," Boolean: require('./boolean')"," , Date: require('./date')"," , Number: ArrayNumberSchema"," , String: require('./string')"," , ObjectId: require('./objectid')"," }"," , MongooseArray = require('../types').Array;","","/**"," * Array SchemaType constructor"," *"," * @param {String} key"," * @param {SchemaType} cast"," * @api private"," */","","function SchemaArray (key, cast, options) {"," SchemaType.call(this, key, options);",""," if (cast) {"," this.caster = cast.name in Types ? Types[cast.name] : cast;"," }",""," var self = this;",""," this.default(function(){"," return new MongooseArray([], self.path, this);"," });","};","","/**"," * Inherits from SchemaType."," */","","SchemaArray.prototype.__proto__ = SchemaType.prototype;","","/**"," * Check required"," *"," * @api private"," */","","SchemaArray.prototype.checkRequired = function (value) {"," return !!(value &amp;&amp; value.length);","};","","/**"," * Casts contents"," *"," * @param {Object} value"," * @param {Document} document that triggers the casting"," * @api private"," */","","SchemaArray.prototype.cast = function (value, doc) {"," if (Array.isArray(value)){"," if (!(value instanceof MongooseArray))"," value = new MongooseArray(value, this.path, doc);",""," var caster = this.caster;",""," if (caster)"," for (var i = 0, l = value.length; i &lt; l; i++) {"," try {"," value[i] = caster.prototype.cast.call(null, value[i]);"," } catch(e){"," // rethrow"," throw new CastError(e.type, value);"," }"," }",""," return value;"," } else {"," return this.cast([value], doc);"," }",""," throw new CastError('array', value, caster);","};","","/**"," * Number casting for arrays (equivalent, but without MongoseNumber)"," *"," * @see GH-176"," * @param {Object} value"," * @api private"," */","","ArrayNumberSchema.prototype.cast = function (value) {"," if (!isNaN(value)) {"," if (value instanceof Number || typeof value == 'number' ||"," (value.toString &amp;&amp; value.toString() == Number(value)))"," return Number(value);"," }"," throw new CastError('number', value);","};","","/**"," * Module exports."," */","","module.exports = SchemaArray;"];

@@ -16,28 +16,30 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schema/documentarray.js'][36] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][38] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][44] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][52] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][37] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][39] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][45] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][53] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][54] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][55] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][57] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][60] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][62] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][56] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][58] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][61] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][63] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][64] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][66] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][65] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][67] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][68] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][70] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][85] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][69] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][71] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][86] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][87] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][88] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][90] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][89] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][91] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][92] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][93] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][96] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][94] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][97] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][99] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][106] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][102] = 0;
_$jscoverage['mongoose/schema/documentarray.js'][109] = 0;
}

@@ -64,44 +66,46 @@ _$jscoverage['mongoose/schema/documentarray.js'][6]++;

_$jscoverage['mongoose/schema/documentarray.js'][35]++;
this.schema = schema;
_$jscoverage['mongoose/schema/documentarray.js'][36]++;
this["default"]((function () {
_$jscoverage['mongoose/schema/documentarray.js'][36]++;
_$jscoverage['mongoose/schema/documentarray.js'][37]++;
return new MongooseDocumentArray([], self.path, this);
}));
}
_$jscoverage['mongoose/schema/documentarray.js'][38]++;
_$jscoverage['mongoose/schema/documentarray.js'][39]++;
;
_$jscoverage['mongoose/schema/documentarray.js'][44]++;
_$jscoverage['mongoose/schema/documentarray.js'][45]++;
DocumentArray.prototype.__proto__ = ArrayType.prototype;
_$jscoverage['mongoose/schema/documentarray.js'][52]++;
_$jscoverage['mongoose/schema/documentarray.js'][53]++;
DocumentArray.prototype.doValidate = (function (array, fn, scope) {
_$jscoverage['mongoose/schema/documentarray.js'][53]++;
_$jscoverage['mongoose/schema/documentarray.js'][54]++;
var self = this;
_$jscoverage['mongoose/schema/documentarray.js'][54]++;
_$jscoverage['mongoose/schema/documentarray.js'][55]++;
SchemaType.prototype.doValidate.call(this, array, (function (err) {
_$jscoverage['mongoose/schema/documentarray.js'][55]++;
_$jscoverage['mongoose/schema/documentarray.js'][56]++;
if (err) {
_$jscoverage['mongoose/schema/documentarray.js'][55]++;
_$jscoverage['mongoose/schema/documentarray.js'][56]++;
return fn(err);
}
_$jscoverage['mongoose/schema/documentarray.js'][57]++;
_$jscoverage['mongoose/schema/documentarray.js'][58]++;
var count = array.length, error = false;
_$jscoverage['mongoose/schema/documentarray.js'][60]++;
_$jscoverage['mongoose/schema/documentarray.js'][61]++;
if (! count) {
_$jscoverage['mongoose/schema/documentarray.js'][60]++;
_$jscoverage['mongoose/schema/documentarray.js'][61]++;
return fn();
}
_$jscoverage['mongoose/schema/documentarray.js'][62]++;
_$jscoverage['mongoose/schema/documentarray.js'][63]++;
array.forEach((function (doc, index) {
_$jscoverage['mongoose/schema/documentarray.js'][63]++;
_$jscoverage['mongoose/schema/documentarray.js'][64]++;
doc.validate((function (err) {
_$jscoverage['mongoose/schema/documentarray.js'][64]++;
_$jscoverage['mongoose/schema/documentarray.js'][65]++;
if (err && ! error) {
_$jscoverage['mongoose/schema/documentarray.js'][66]++;
_$jscoverage['mongoose/schema/documentarray.js'][67]++;
err.key = self.key + "." + index + "." + err.key;
_$jscoverage['mongoose/schema/documentarray.js'][67]++;
_$jscoverage['mongoose/schema/documentarray.js'][68]++;
fn(err);
_$jscoverage['mongoose/schema/documentarray.js'][68]++;
_$jscoverage['mongoose/schema/documentarray.js'][69]++;
error = true;
}
else {
_$jscoverage['mongoose/schema/documentarray.js'][70]++;
_$jscoverage['mongoose/schema/documentarray.js'][71]++;
--count || fn();

@@ -113,29 +117,33 @@ }

});
_$jscoverage['mongoose/schema/documentarray.js'][85]++;
_$jscoverage['mongoose/schema/documentarray.js'][86]++;
DocumentArray.prototype.cast = (function (value, doc) {
_$jscoverage['mongoose/schema/documentarray.js'][86]++;
_$jscoverage['mongoose/schema/documentarray.js'][87]++;
if (Array.isArray(value)) {
_$jscoverage['mongoose/schema/documentarray.js'][87]++;
_$jscoverage['mongoose/schema/documentarray.js'][88]++;
if (! (value instanceof MongooseDocumentArray)) {
_$jscoverage['mongoose/schema/documentarray.js'][88]++;
_$jscoverage['mongoose/schema/documentarray.js'][89]++;
value = new MongooseDocumentArray(value, this.path, doc);
}
_$jscoverage['mongoose/schema/documentarray.js'][90]++;
_$jscoverage['mongoose/schema/documentarray.js'][91]++;
for (var i = 0, l = value.length; i < l; i++) {
_$jscoverage['mongoose/schema/documentarray.js'][91]++;
_$jscoverage['mongoose/schema/documentarray.js'][92]++;
if (! (value[i] instanceof Subdocument)) {
_$jscoverage['mongoose/schema/documentarray.js'][92]++;
_$jscoverage['mongoose/schema/documentarray.js'][93]++;
var doc = new this.caster(null, value);
_$jscoverage['mongoose/schema/documentarray.js'][93]++;
_$jscoverage['mongoose/schema/documentarray.js'][94]++;
value[i] = doc.init(value[i]);
}
}
_$jscoverage['mongoose/schema/documentarray.js'][96]++;
_$jscoverage['mongoose/schema/documentarray.js'][97]++;
return value;
}
_$jscoverage['mongoose/schema/documentarray.js'][99]++;
throw new CastError("documentarray", value, caster);
else {
_$jscoverage['mongoose/schema/documentarray.js'][99]++;
return this.cast([value], doc);
}
_$jscoverage['mongoose/schema/documentarray.js'][102]++;
throw new CastError("documentarray", value, this.caster);
});
_$jscoverage['mongoose/schema/documentarray.js'][106]++;
_$jscoverage['mongoose/schema/documentarray.js'][109]++;
module.exports = DocumentArray;
_$jscoverage['mongoose/schema/documentarray.js'].source = ["","/**"," * Module dependencies."," */","","var SchemaType = require('../schematype')"," , ArrayType = require('./array')"," , MongooseDocumentArray = require('../types/documentarray')"," , Subdocument = require('../types/document')"," , CastError = SchemaType.CastError"," , Document = require('../document');","","/**"," * SubdocsArray SchemaType constructor"," *"," * @param {String} key"," * @param {Schema} schema"," * @param {Object} options"," * @api private"," */","","function DocumentArray (key, schema, options) {"," // compile an embedded document for this schema"," function EmbeddedDocument () {"," Subdocument.apply(this, arguments);"," };",""," EmbeddedDocument.prototype.__proto__ = Subdocument.prototype;"," EmbeddedDocument.prototype.schema = schema;",""," ArrayType.call(this, key, EmbeddedDocument, options);",""," var self = this;",""," this.default(function(){"," return new MongooseDocumentArray([], self.path, this);"," });","};","","/**"," * Inherits from ArrayType."," */","","DocumentArray.prototype.__proto__ = ArrayType.prototype;","","/**"," * Performs local validations first, then validations on each embedded doc"," *"," * @api private"," */","","DocumentArray.prototype.doValidate = function (array, fn, scope) {"," var self = this;"," SchemaType.prototype.doValidate.call(this, array, function(err){"," if (err) return fn(err);"," "," var count = array.length"," , error = false;",""," if (!count) return fn();",""," array.forEach(function(doc, index){"," doc.validate(function(err){"," if (err &amp;&amp; !error){"," // rewrite they key"," err.key = self.key + '.' + index + '.' + err.key;"," fn(err);"," error = true;"," } else {"," --count || fn();"," }"," });"," });"," }, scope);","};","","/**"," * Casts contents"," *"," * @param {Object} value"," * @param {Document} document that triggers the casting"," * @api private"," */","","DocumentArray.prototype.cast = function (value, doc) {"," if (Array.isArray(value)){"," if (!(value instanceof MongooseDocumentArray))"," value = new MongooseDocumentArray(value, this.path, doc);",""," for (var i = 0, l = value.length; i &lt; l; i++)"," if (!(value[i] instanceof Subdocument)){"," var doc = new this.caster(null, value);"," value[i] = doc.init(value[i]);"," }",""," return value;"," }",""," throw new CastError('documentarray', value, caster);","};","","/**"," * Module exports."," */","","module.exports = DocumentArray;"];
_$jscoverage['mongoose/schema/documentarray.js'].source = ["","/**"," * Module dependencies."," */","","var SchemaType = require('../schematype')"," , ArrayType = require('./array')"," , MongooseDocumentArray = require('../types/documentarray')"," , Subdocument = require('../types/document')"," , CastError = SchemaType.CastError"," , Document = require('../document');","","/**"," * SubdocsArray SchemaType constructor"," *"," * @param {String} key"," * @param {Schema} schema"," * @param {Object} options"," * @api private"," */","","function DocumentArray (key, schema, options) {"," // compile an embedded document for this schema"," function EmbeddedDocument () {"," Subdocument.apply(this, arguments);"," };",""," EmbeddedDocument.prototype.__proto__ = Subdocument.prototype;"," EmbeddedDocument.prototype.schema = schema;",""," ArrayType.call(this, key, EmbeddedDocument, options);",""," var self = this;",""," this.schema = schema;"," this.default(function(){"," return new MongooseDocumentArray([], self.path, this);"," });","};","","/**"," * Inherits from ArrayType."," */","","DocumentArray.prototype.__proto__ = ArrayType.prototype;","","/**"," * Performs local validations first, then validations on each embedded doc"," *"," * @api private"," */","","DocumentArray.prototype.doValidate = function (array, fn, scope) {"," var self = this;"," SchemaType.prototype.doValidate.call(this, array, function(err){"," if (err) return fn(err);"," "," var count = array.length"," , error = false;",""," if (!count) return fn();",""," array.forEach(function(doc, index){"," doc.validate(function(err){"," if (err &amp;&amp; !error){"," // rewrite they key"," err.key = self.key + '.' + index + '.' + err.key;"," fn(err);"," error = true;"," } else {"," --count || fn();"," }"," });"," });"," }, scope);","};","","/**"," * Casts contents"," *"," * @param {Object} value"," * @param {Document} document that triggers the casting"," * @api private"," */","","DocumentArray.prototype.cast = function (value, doc) {"," if (Array.isArray(value)){"," if (!(value instanceof MongooseDocumentArray))"," value = new MongooseDocumentArray(value, this.path, doc);",""," for (var i = 0, l = value.length; i &lt; l; i++)"," if (!(value[i] instanceof Subdocument)){"," var doc = new this.caster(null, value);"," value[i] = doc.init(value[i]);"," }",""," return value;"," } else {"," return this.cast([value], doc);"," }",""," throw new CastError('documentarray', value, this.caster);","};","","/**"," * Module exports."," */","","module.exports = DocumentArray;"];

@@ -6,23 +6,26 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schema/index.js'][6] = 0;
_$jscoverage['mongoose/schema/index.js'][7] = 0;
_$jscoverage['mongoose/schema/index.js'][8] = 0;
_$jscoverage['mongoose/schema/index.js'][9] = 0;
_$jscoverage['mongoose/schema/index.js'][10] = 0;
_$jscoverage['mongoose/schema/index.js'][11] = 0;
_$jscoverage['mongoose/schema/index.js'][12] = 0;
_$jscoverage['mongoose/schema/index.js'][14] = 0;
_$jscoverage['mongoose/schema/index.js'][16] = 0;
_$jscoverage['mongoose/schema/index.js'][18] = 0;
_$jscoverage['mongoose/schema/index.js'][20] = 0;
}
_$jscoverage['mongoose/schema/index.js'][6]++;
exports.String = require("./string");
_$jscoverage['mongoose/schema/index.js'][7]++;
_$jscoverage['mongoose/schema/index.js'][8]++;
exports.Number = require("./number");
_$jscoverage['mongoose/schema/index.js'][8]++;
_$jscoverage['mongoose/schema/index.js'][10]++;
exports.Boolean = require("./boolean");
_$jscoverage['mongoose/schema/index.js'][9]++;
_$jscoverage['mongoose/schema/index.js'][12]++;
exports.DocumentArray = require("./documentarray");
_$jscoverage['mongoose/schema/index.js'][10]++;
_$jscoverage['mongoose/schema/index.js'][14]++;
exports.Array = require("./array");
_$jscoverage['mongoose/schema/index.js'][11]++;
_$jscoverage['mongoose/schema/index.js'][16]++;
exports.Date = require("./date");
_$jscoverage['mongoose/schema/index.js'][12]++;
_$jscoverage['mongoose/schema/index.js'][18]++;
exports.ObjectId = require("./objectid");
_$jscoverage['mongoose/schema/index.js'].source = ["","/**"," * Module exports."," */","","exports.String = require('./string');","exports.Number = require('./number');","exports.Boolean = require('./boolean');","exports.DocumentArray = require('./documentarray');","exports.Array = require('./array');","exports.Date = require('./date');","exports.ObjectId = require('./objectid');"];
_$jscoverage['mongoose/schema/index.js'][20]++;
exports.Mixed = require("./mixed");
_$jscoverage['mongoose/schema/index.js'].source = ["","/**"," * Module exports."," */","","exports.String = require('./string');","","exports.Number = require('./number');","","exports.Boolean = require('./boolean');","","exports.DocumentArray = require('./documentarray');","","exports.Array = require('./array');","","exports.Date = require('./date');","","exports.ObjectId = require('./objectid');","","exports.Mixed = require('./mixed');"];

@@ -31,5 +31,6 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schema/number.js'][86] = 0;
_$jscoverage['mongoose/schema/number.js'][88] = 0;
_$jscoverage['mongoose/schema/number.js'][90] = 0;
_$jscoverage['mongoose/schema/number.js'][97] = 0;
_$jscoverage['mongoose/schema/number.js'][87] = 0;
_$jscoverage['mongoose/schema/number.js'][89] = 0;
_$jscoverage['mongoose/schema/number.js'][91] = 0;
_$jscoverage['mongoose/schema/number.js'][98] = 0;
}

@@ -99,12 +100,17 @@ _$jscoverage['mongoose/schema/number.js'][6]++;

_$jscoverage['mongoose/schema/number.js'][86]++;
if ("string" === typeof value) {
_$jscoverage['mongoose/schema/number.js'][86]++;
value = Number(value);
}
_$jscoverage['mongoose/schema/number.js'][87]++;
if (value instanceof Number || typeof value == "number" || (value.toString && value.toString() == Number(value))) {
_$jscoverage['mongoose/schema/number.js'][88]++;
_$jscoverage['mongoose/schema/number.js'][89]++;
return new MongooseNumber(value, this.path, doc);
}
}
_$jscoverage['mongoose/schema/number.js'][90]++;
_$jscoverage['mongoose/schema/number.js'][91]++;
throw new CastError("number", value);
});
_$jscoverage['mongoose/schema/number.js'][97]++;
_$jscoverage['mongoose/schema/number.js'][98]++;
module.exports = SchemaNumber;
_$jscoverage['mongoose/schema/number.js'].source = ["","/**"," * Module requirements."," */","","var SchemaType = require('../schematype')"," , CastError = SchemaType.CastError"," , MongooseNumber = require('../types/number');","","/**"," * Number SchemaType constructor."," *"," * @param {String} key"," * @param {Object} options"," * @api private"," */","","function SchemaNumber (key, options) {"," SchemaType.call(this, key, options);","};","","/**"," * Inherits from SchemaType."," */","","SchemaNumber.prototype.__proto__ = SchemaType.prototype;","","/**"," * Required validator for number"," *"," * @api private"," */","","SchemaNumber.prototype.checkRequired = function (value) {"," return typeof value == 'number' || value instanceof Number;","};","","/**"," * Sets a maximum number validator"," *"," * @param {Number} minimum number"," * @api public"," */","","SchemaNumber.prototype.min = function (value, message) {"," if (this.minValidator)"," this.validators = this.validators.filter(function(v){"," return v[1] != 'min';"," });"," if (value != null)"," this.validators.push([function(v){"," return v &gt;= value;"," }, 'min']);"," return this;","};","","/**"," * Sets a maximum number validator"," *"," * @param {Number} maximum number"," * @api public"," */","","SchemaNumber.prototype.max = function (value, message) {"," if (this.maxValidator)"," this.validators = this.validators.filter(function(v){"," return v[1] != 'max';"," });"," if (value != null)"," this.validators.push([this.maxValidator = function(v){"," return v &lt;= value;"," }, 'max']);"," return this;","};","","/**"," * Casts to number"," *"," * @param {Object} value to cast"," * @param {Document} document that triggers the casting"," * @api private"," */","","SchemaNumber.prototype.cast = function (value, doc) {"," if (!isNaN(value)){"," if (value instanceof Number || typeof value == 'number' ||"," (value.toString &amp;&amp; value.toString() == Number(value)))"," return new MongooseNumber(value, this.path, doc);"," }"," throw new CastError('number', value);","};","","/**"," * Module exports."," */","","module.exports = SchemaNumber;"];
_$jscoverage['mongoose/schema/number.js'].source = ["","/**"," * Module requirements."," */","","var SchemaType = require('../schematype')"," , CastError = SchemaType.CastError"," , MongooseNumber = require('../types/number');","","/**"," * Number SchemaType constructor."," *"," * @param {String} key"," * @param {Object} options"," * @api private"," */","","function SchemaNumber (key, options) {"," SchemaType.call(this, key, options);","};","","/**"," * Inherits from SchemaType."," */","","SchemaNumber.prototype.__proto__ = SchemaType.prototype;","","/**"," * Required validator for number"," *"," * @api private"," */","","SchemaNumber.prototype.checkRequired = function (value) {"," return typeof value == 'number' || value instanceof Number;","};","","/**"," * Sets a maximum number validator"," *"," * @param {Number} minimum number"," * @api public"," */","","SchemaNumber.prototype.min = function (value, message) {"," if (this.minValidator)"," this.validators = this.validators.filter(function(v){"," return v[1] != 'min';"," });"," if (value != null)"," this.validators.push([function(v){"," return v &gt;= value;"," }, 'min']);"," return this;","};","","/**"," * Sets a maximum number validator"," *"," * @param {Number} maximum number"," * @api public"," */","","SchemaNumber.prototype.max = function (value, message) {"," if (this.maxValidator)"," this.validators = this.validators.filter(function(v){"," return v[1] != 'max';"," });"," if (value != null)"," this.validators.push([this.maxValidator = function(v){"," return v &lt;= value;"," }, 'max']);"," return this;","};","","/**"," * Casts to number"," *"," * @param {Object} value to cast"," * @param {Document} document that triggers the casting"," * @api private"," */","","SchemaNumber.prototype.cast = function (value, doc) {"," if (!isNaN(value)){"," if ('string' === typeof value) value = Number(value);"," if (value instanceof Number || typeof value == 'number' ||"," (value.toString &amp;&amp; value.toString() == Number(value)))"," return new MongooseNumber(value, this.path, doc);"," }"," throw new CastError('number', value);","};","","/**"," * Module exports."," */","","module.exports = SchemaNumber;"];

@@ -27,52 +27,48 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/schematype.js'][67] = 0;
_$jscoverage['mongoose/schematype.js'][77] = 0;
_$jscoverage['mongoose/schematype.js'][68] = 0;
_$jscoverage['mongoose/schematype.js'][78] = 0;
_$jscoverage['mongoose/schematype.js'][79] = 0;
_$jscoverage['mongoose/schematype.js'][89] = 0;
_$jscoverage['mongoose/schematype.js'][80] = 0;
_$jscoverage['mongoose/schematype.js'][90] = 0;
_$jscoverage['mongoose/schematype.js'][91] = 0;
_$jscoverage['mongoose/schematype.js'][92] = 0;
_$jscoverage['mongoose/schematype.js'][102] = 0;
_$jscoverage['mongoose/schematype.js'][103] = 0;
_$jscoverage['mongoose/schematype.js'][104] = 0;
_$jscoverage['mongoose/schematype.js'][114] = 0;
_$jscoverage['mongoose/schematype.js'][115] = 0;
_$jscoverage['mongoose/schematype.js'][116] = 0;
_$jscoverage['mongoose/schematype.js'][117] = 0;
_$jscoverage['mongoose/schematype.js'][118] = 0;
_$jscoverage['mongoose/schematype.js'][119] = 0;
_$jscoverage['mongoose/schematype.js'][122] = 0;
_$jscoverage['mongoose/schematype.js'][124] = 0;
_$jscoverage['mongoose/schematype.js'][134] = 0;
_$jscoverage['mongoose/schematype.js'][127] = 0;
_$jscoverage['mongoose/schematype.js'][128] = 0;
_$jscoverage['mongoose/schematype.js'][130] = 0;
_$jscoverage['mongoose/schematype.js'][131] = 0;
_$jscoverage['mongoose/schematype.js'][132] = 0;
_$jscoverage['mongoose/schematype.js'][135] = 0;
_$jscoverage['mongoose/schematype.js'][136] = 0;
_$jscoverage['mongoose/schematype.js'][138] = 0;
_$jscoverage['mongoose/schematype.js'][140] = 0;
_$jscoverage['mongoose/schematype.js'][141] = 0;
_$jscoverage['mongoose/schematype.js'][143] = 0;
_$jscoverage['mongoose/schematype.js'][145] = 0;
_$jscoverage['mongoose/schematype.js'][146] = 0;
_$jscoverage['mongoose/schematype.js'][137] = 0;
_$jscoverage['mongoose/schematype.js'][147] = 0;
_$jscoverage['mongoose/schematype.js'][148] = 0;
_$jscoverage['mongoose/schematype.js'][149] = 0;
_$jscoverage['mongoose/schematype.js'][151] = 0;
_$jscoverage['mongoose/schematype.js'][153] = 0;
_$jscoverage['mongoose/schematype.js'][154] = 0;
_$jscoverage['mongoose/schematype.js'][156] = 0;
_$jscoverage['mongoose/schematype.js'][158] = 0;
_$jscoverage['mongoose/schematype.js'][159] = 0;
_$jscoverage['mongoose/schematype.js'][160] = 0;
_$jscoverage['mongoose/schematype.js'][161] = 0;
_$jscoverage['mongoose/schematype.js'][162] = 0;
_$jscoverage['mongoose/schematype.js'][163] = 0;
_$jscoverage['mongoose/schematype.js'][164] = 0;
_$jscoverage['mongoose/schematype.js'][166] = 0;
_$jscoverage['mongoose/schematype.js'][172] = 0;
_$jscoverage['mongoose/schematype.js'][173] = 0;
_$jscoverage['mongoose/schematype.js'][174] = 0;
_$jscoverage['mongoose/schematype.js'][175] = 0;
_$jscoverage['mongoose/schematype.js'][176] = 0;
_$jscoverage['mongoose/schematype.js'][177] = 0;
_$jscoverage['mongoose/schematype.js'][178] = 0;
_$jscoverage['mongoose/schematype.js'][179] = 0;
_$jscoverage['mongoose/schematype.js'][180] = 0;
_$jscoverage['mongoose/schematype.js'][181] = 0;
_$jscoverage['mongoose/schematype.js'][182] = 0;
_$jscoverage['mongoose/schematype.js'][184] = 0;
_$jscoverage['mongoose/schematype.js'][190] = 0;
_$jscoverage['mongoose/schematype.js'][191] = 0;
_$jscoverage['mongoose/schematype.js'][192] = 0;
_$jscoverage['mongoose/schematype.js'][193] = 0;
_$jscoverage['mongoose/schematype.js'][194] = 0;
_$jscoverage['mongoose/schematype.js'][195] = 0;
_$jscoverage['mongoose/schematype.js'][196] = 0;
_$jscoverage['mongoose/schematype.js'][200] = 0;
_$jscoverage['mongoose/schematype.js'][202] = 0;
_$jscoverage['mongoose/schematype.js'][203] = 0;
_$jscoverage['mongoose/schematype.js'][204] = 0;
_$jscoverage['mongoose/schematype.js'][205] = 0;
_$jscoverage['mongoose/schematype.js'][207] = 0;
_$jscoverage['mongoose/schematype.js'][197] = 0;
_$jscoverage['mongoose/schematype.js'][208] = 0;
_$jscoverage['mongoose/schematype.js'][212] = 0;
_$jscoverage['mongoose/schematype.js'][209] = 0;
_$jscoverage['mongoose/schematype.js'][213] = 0;

@@ -83,24 +79,32 @@ _$jscoverage['mongoose/schematype.js'][215] = 0;

_$jscoverage['mongoose/schematype.js'][218] = 0;
_$jscoverage['mongoose/schematype.js'][219] = 0;
_$jscoverage['mongoose/schematype.js'][220] = 0;
_$jscoverage['mongoose/schematype.js'][223] = 0;
_$jscoverage['mongoose/schematype.js'][235] = 0;
_$jscoverage['mongoose/schematype.js'][221] = 0;
_$jscoverage['mongoose/schematype.js'][225] = 0;
_$jscoverage['mongoose/schematype.js'][226] = 0;
_$jscoverage['mongoose/schematype.js'][228] = 0;
_$jscoverage['mongoose/schematype.js'][229] = 0;
_$jscoverage['mongoose/schematype.js'][230] = 0;
_$jscoverage['mongoose/schematype.js'][231] = 0;
_$jscoverage['mongoose/schematype.js'][232] = 0;
_$jscoverage['mongoose/schematype.js'][233] = 0;
_$jscoverage['mongoose/schematype.js'][236] = 0;
_$jscoverage['mongoose/schematype.js'][237] = 0;
_$jscoverage['mongoose/schematype.js'][238] = 0;
_$jscoverage['mongoose/schematype.js'][239] = 0;
_$jscoverage['mongoose/schematype.js'][240] = 0;
_$jscoverage['mongoose/schematype.js'][246] = 0;
_$jscoverage['mongoose/schematype.js'][254] = 0;
_$jscoverage['mongoose/schematype.js'][255] = 0;
_$jscoverage['mongoose/schematype.js'][256] = 0;
_$jscoverage['mongoose/schematype.js'][257] = 0;
_$jscoverage['mongoose/schematype.js'][258] = 0;
_$jscoverage['mongoose/schematype.js'][248] = 0;
_$jscoverage['mongoose/schematype.js'][249] = 0;
_$jscoverage['mongoose/schematype.js'][250] = 0;
_$jscoverage['mongoose/schematype.js'][251] = 0;
_$jscoverage['mongoose/schematype.js'][252] = 0;
_$jscoverage['mongoose/schematype.js'][253] = 0;
_$jscoverage['mongoose/schematype.js'][259] = 0;
_$jscoverage['mongoose/schematype.js'][260] = 0;
_$jscoverage['mongoose/schematype.js'][261] = 0;
_$jscoverage['mongoose/schematype.js'][267] = 0;
_$jscoverage['mongoose/schematype.js'][268] = 0;
_$jscoverage['mongoose/schematype.js'][269] = 0;
_$jscoverage['mongoose/schematype.js'][270] = 0;
_$jscoverage['mongoose/schematype.js'][271] = 0;
_$jscoverage['mongoose/schematype.js'][272] = 0;
_$jscoverage['mongoose/schematype.js'][273] = 0;
_$jscoverage['mongoose/schematype.js'][275] = 0;
_$jscoverage['mongoose/schematype.js'][277] = 0;
_$jscoverage['mongoose/schematype.js'][274] = 0;
_$jscoverage['mongoose/schematype.js'][280] = 0;
_$jscoverage['mongoose/schematype.js'][286] = 0;
_$jscoverage['mongoose/schematype.js'][288] = 0;
_$jscoverage['mongoose/schematype.js'][290] = 0;
}

@@ -156,33 +160,42 @@ _$jscoverage['mongoose/schematype.js'][6]++;

this._index = index;
_$jscoverage['mongoose/schematype.js'][68]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][77]++;
_$jscoverage['mongoose/schematype.js'][78]++;
SchemaType.prototype.unique = (function (bool) {
_$jscoverage['mongoose/schematype.js'][79]++;
this._index = bool? {unique: true}: null;
_$jscoverage['mongoose/schematype.js'][80]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][90]++;
SchemaType.prototype.set = (function (fn) {
_$jscoverage['mongoose/schematype.js'][78]++;
_$jscoverage['mongoose/schematype.js'][91]++;
this.setters.push(fn);
_$jscoverage['mongoose/schematype.js'][79]++;
_$jscoverage['mongoose/schematype.js'][92]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][89]++;
_$jscoverage['mongoose/schematype.js'][102]++;
SchemaType.prototype.get = (function (fn) {
_$jscoverage['mongoose/schematype.js'][90]++;
_$jscoverage['mongoose/schematype.js'][103]++;
this.getters.push(fn);
_$jscoverage['mongoose/schematype.js'][91]++;
_$jscoverage['mongoose/schematype.js'][104]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][102]++;
_$jscoverage['mongoose/schematype.js'][115]++;
SchemaType.prototype.validate = (function (obj, error) {
_$jscoverage['mongoose/schematype.js'][103]++;
_$jscoverage['mongoose/schematype.js'][116]++;
this.validators.push([obj, error]);
_$jscoverage['mongoose/schematype.js'][104]++;
_$jscoverage['mongoose/schematype.js'][117]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][114]++;
_$jscoverage['mongoose/schematype.js'][127]++;
SchemaType.prototype.required = (function (required) {
_$jscoverage['mongoose/schematype.js'][115]++;
_$jscoverage['mongoose/schematype.js'][128]++;
var checkRequired = this.checkRequired.bind(this);
_$jscoverage['mongoose/schematype.js'][117]++;
_$jscoverage['mongoose/schematype.js'][130]++;
if (false === required) {
_$jscoverage['mongoose/schematype.js'][118]++;
_$jscoverage['mongoose/schematype.js'][131]++;
this.validators = this.validators.filter((function (v) {
_$jscoverage['mongoose/schematype.js'][119]++;
_$jscoverage['mongoose/schematype.js'][132]++;
return v[0] !== checkRequired;

@@ -192,117 +205,117 @@ }));

else {
_$jscoverage['mongoose/schematype.js'][122]++;
_$jscoverage['mongoose/schematype.js'][135]++;
this.validators.push([checkRequired, "required"]);
}
_$jscoverage['mongoose/schematype.js'][124]++;
_$jscoverage['mongoose/schematype.js'][137]++;
return this;
});
_$jscoverage['mongoose/schematype.js'][134]++;
_$jscoverage['mongoose/schematype.js'][147]++;
SchemaType.prototype.getDefault = (function (scope) {
_$jscoverage['mongoose/schematype.js'][135]++;
_$jscoverage['mongoose/schematype.js'][148]++;
if (this.defaultValue === undefined) {
_$jscoverage['mongoose/schematype.js'][136]++;
_$jscoverage['mongoose/schematype.js'][149]++;
return null;
}
_$jscoverage['mongoose/schematype.js'][138]++;
_$jscoverage['mongoose/schematype.js'][151]++;
var ret;
_$jscoverage['mongoose/schematype.js'][140]++;
_$jscoverage['mongoose/schematype.js'][153]++;
if ("function" == typeof this.defaultValue) {
_$jscoverage['mongoose/schematype.js'][141]++;
_$jscoverage['mongoose/schematype.js'][154]++;
ret = this.defaultValue.call(scope);
}
else {
_$jscoverage['mongoose/schematype.js'][143]++;
_$jscoverage['mongoose/schematype.js'][156]++;
ret = this.defaultValue;
}
_$jscoverage['mongoose/schematype.js'][145]++;
_$jscoverage['mongoose/schematype.js'][158]++;
if (ret !== null && ret !== undefined) {
_$jscoverage['mongoose/schematype.js'][146]++;
_$jscoverage['mongoose/schematype.js'][159]++;
ret = this.cast(ret, scope);
}
_$jscoverage['mongoose/schematype.js'][148]++;
_$jscoverage['mongoose/schematype.js'][161]++;
return ret;
});
_$jscoverage['mongoose/schematype.js'][159]++;
_$jscoverage['mongoose/schematype.js'][172]++;
SchemaType.prototype.applySetters = (function (value, scope) {
_$jscoverage['mongoose/schematype.js'][160]++;
_$jscoverage['mongoose/schematype.js'][173]++;
var v = value;
_$jscoverage['mongoose/schematype.js'][161]++;
_$jscoverage['mongoose/schematype.js'][174]++;
for (var l = this.setters.length - 1; l >= 0; l--) {
_$jscoverage['mongoose/schematype.js'][162]++;
_$jscoverage['mongoose/schematype.js'][175]++;
v = this.setters[l].call(scope, v);
_$jscoverage['mongoose/schematype.js'][163]++;
_$jscoverage['mongoose/schematype.js'][176]++;
if (v === null || v === undefined) {
_$jscoverage['mongoose/schematype.js'][163]++;
_$jscoverage['mongoose/schematype.js'][176]++;
return v;
}
_$jscoverage['mongoose/schematype.js'][164]++;
_$jscoverage['mongoose/schematype.js'][177]++;
v = this.cast(v, scope);
}
_$jscoverage['mongoose/schematype.js'][166]++;
_$jscoverage['mongoose/schematype.js'][179]++;
return v;
});
_$jscoverage['mongoose/schematype.js'][177]++;
_$jscoverage['mongoose/schematype.js'][190]++;
SchemaType.prototype.applyGetters = (function (value, scope) {
_$jscoverage['mongoose/schematype.js'][178]++;
_$jscoverage['mongoose/schematype.js'][191]++;
var v = value;
_$jscoverage['mongoose/schematype.js'][179]++;
_$jscoverage['mongoose/schematype.js'][192]++;
for (var l = this.getters.length - 1; l >= 0; l--) {
_$jscoverage['mongoose/schematype.js'][180]++;
_$jscoverage['mongoose/schematype.js'][193]++;
v = this.getters[l].call(scope, v);
_$jscoverage['mongoose/schematype.js'][181]++;
_$jscoverage['mongoose/schematype.js'][194]++;
if (v === null || v === undefined) {
_$jscoverage['mongoose/schematype.js'][181]++;
_$jscoverage['mongoose/schematype.js'][194]++;
return v;
}
_$jscoverage['mongoose/schematype.js'][182]++;
_$jscoverage['mongoose/schematype.js'][195]++;
v = this.cast(v, scope);
}
_$jscoverage['mongoose/schematype.js'][184]++;
_$jscoverage['mongoose/schematype.js'][197]++;
return v;
});
_$jscoverage['mongoose/schematype.js'][195]++;
_$jscoverage['mongoose/schematype.js'][208]++;
SchemaType.prototype.doValidate = (function (value, fn, scope) {
_$jscoverage['mongoose/schematype.js'][196]++;
_$jscoverage['mongoose/schematype.js'][209]++;
var err = false, path = this.path, count = this.validators.length;
_$jscoverage['mongoose/schematype.js'][200]++;
_$jscoverage['mongoose/schematype.js'][213]++;
if (! count) {
_$jscoverage['mongoose/schematype.js'][200]++;
_$jscoverage['mongoose/schematype.js'][213]++;
return fn(null);
}
_$jscoverage['mongoose/schematype.js'][202]++;
_$jscoverage['mongoose/schematype.js'][215]++;
function validate(val, msg) {
_$jscoverage['mongoose/schematype.js'][203]++;
_$jscoverage['mongoose/schematype.js'][216]++;
if (err) {
_$jscoverage['mongoose/schematype.js'][203]++;
_$jscoverage['mongoose/schematype.js'][216]++;
return;
}
_$jscoverage['mongoose/schematype.js'][204]++;
_$jscoverage['mongoose/schematype.js'][217]++;
if (val === undefined || val) {
_$jscoverage['mongoose/schematype.js'][205]++;
_$jscoverage['mongoose/schematype.js'][218]++;
--count || fn(null);
}
else {
_$jscoverage['mongoose/schematype.js'][207]++;
_$jscoverage['mongoose/schematype.js'][220]++;
fn(new ValidatorError(path, msg));
_$jscoverage['mongoose/schematype.js'][208]++;
_$jscoverage['mongoose/schematype.js'][221]++;
err = true;
}
}
_$jscoverage['mongoose/schematype.js'][212]++;
_$jscoverage['mongoose/schematype.js'][225]++;
this.validators.forEach((function (v) {
_$jscoverage['mongoose/schematype.js'][213]++;
_$jscoverage['mongoose/schematype.js'][226]++;
var validator = v[0], message = v[1];
_$jscoverage['mongoose/schematype.js'][215]++;
_$jscoverage['mongoose/schematype.js'][228]++;
if (validator instanceof RegExp) {
_$jscoverage['mongoose/schematype.js'][216]++;
_$jscoverage['mongoose/schematype.js'][229]++;
validate(validator.test(value), message);
}
else {
_$jscoverage['mongoose/schematype.js'][217]++;
_$jscoverage['mongoose/schematype.js'][230]++;
if ("function" == typeof validator) {
_$jscoverage['mongoose/schematype.js'][218]++;
_$jscoverage['mongoose/schematype.js'][231]++;
if (2 == validator.length) {
_$jscoverage['mongoose/schematype.js'][219]++;
_$jscoverage['mongoose/schematype.js'][232]++;
validator.call(scope, value, (function (val) {
_$jscoverage['mongoose/schematype.js'][220]++;
_$jscoverage['mongoose/schematype.js'][233]++;
validate(val, message);

@@ -312,3 +325,3 @@ }));

else {
_$jscoverage['mongoose/schematype.js'][223]++;
_$jscoverage['mongoose/schematype.js'][236]++;
validate(validator.call(scope, value), message);

@@ -320,42 +333,42 @@ }

});
_$jscoverage['mongoose/schematype.js'][235]++;
_$jscoverage['mongoose/schematype.js'][248]++;
function ValidatorError(path, msg) {
_$jscoverage['mongoose/schematype.js'][236]++;
_$jscoverage['mongoose/schematype.js'][249]++;
MongooseError.call(this, "Validator \"" + msg + "\" failed for path " + path);
_$jscoverage['mongoose/schematype.js'][237]++;
_$jscoverage['mongoose/schematype.js'][250]++;
Error.captureStackTrace(this, arguments.callee);
_$jscoverage['mongoose/schematype.js'][238]++;
_$jscoverage['mongoose/schematype.js'][251]++;
this.name = "ValidatorError";
_$jscoverage['mongoose/schematype.js'][239]++;
_$jscoverage['mongoose/schematype.js'][252]++;
this.path = path;
}
_$jscoverage['mongoose/schematype.js'][240]++;
_$jscoverage['mongoose/schematype.js'][253]++;
;
_$jscoverage['mongoose/schematype.js'][246]++;
_$jscoverage['mongoose/schematype.js'][259]++;
ValidatorError.prototype.__proto__ = MongooseError.prototype;
_$jscoverage['mongoose/schematype.js'][254]++;
_$jscoverage['mongoose/schematype.js'][267]++;
function CastError(type, path, type, value) {
_$jscoverage['mongoose/schematype.js'][255]++;
_$jscoverage['mongoose/schematype.js'][268]++;
MongooseError.call(this, "Cast to " + type + " failed for value \"" + value + "\"");
_$jscoverage['mongoose/schematype.js'][256]++;
_$jscoverage['mongoose/schematype.js'][269]++;
Error.captureStackTrace(this, arguments.callee);
_$jscoverage['mongoose/schematype.js'][257]++;
_$jscoverage['mongoose/schematype.js'][270]++;
this.name = "CastError";
_$jscoverage['mongoose/schematype.js'][258]++;
_$jscoverage['mongoose/schematype.js'][271]++;
this.path = path;
_$jscoverage['mongoose/schematype.js'][259]++;
_$jscoverage['mongoose/schematype.js'][272]++;
this.type = type;
_$jscoverage['mongoose/schematype.js'][260]++;
_$jscoverage['mongoose/schematype.js'][273]++;
this.value = value;
}
_$jscoverage['mongoose/schematype.js'][261]++;
_$jscoverage['mongoose/schematype.js'][274]++;
;
_$jscoverage['mongoose/schematype.js'][267]++;
_$jscoverage['mongoose/schematype.js'][280]++;
CastError.prototype.__proto__ = MongooseError.prototype;
_$jscoverage['mongoose/schematype.js'][273]++;
_$jscoverage['mongoose/schematype.js'][286]++;
module.exports = exports = SchemaType;
_$jscoverage['mongoose/schematype.js'][275]++;
_$jscoverage['mongoose/schematype.js'][288]++;
exports.CastError = CastError;
_$jscoverage['mongoose/schematype.js'][277]++;
_$jscoverage['mongoose/schematype.js'][290]++;
exports.ValidatorError = ValidatorError;
_$jscoverage['mongoose/schematype.js'].source = ["","/**"," * Module dependencies."," */","","var MongooseError = require('./error');","","/**"," * SchemaType constructor"," *"," * @param {String} path"," * @api public"," */","","function SchemaType (path, options) {"," this.path = path;"," this.defaultValue = null;"," this.validators = [];"," this.setters = [];"," this.getters = [];"," this.options = options;"," this._index = null;"," for (var i in options)"," if (this[i] &amp;&amp; 'function' == typeof this[i]){"," var opts = Array.isArray(options[i]) ? options[i] : [options[i]];"," this[i].apply(this, opts);"," }","};","","/**"," * Base schema. Set by Schema when instantiated."," *"," * @api private"," */","","SchemaType.prototype.base;","","/**"," * Sets a default"," *"," * @param {Object} default value"," * @api public"," */","","SchemaType.prototype.default = function (val) {"," if (arguments.length){"," this.defaultValue = val;"," return this;"," }"," return this.defaultValue;","};","","/**"," * Sets index. It can be a boolean or a hash of options"," * Example:"," * Schema.path('my.path').index(true);"," * Schema.path('my.path').index({ unique: true });"," *"," * \"Direction doesn't matter for single key indexes\""," * http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes"," *"," * @param {Object} true/"," * @api public"," */","","SchemaType.prototype.index = function (index) {"," this._index = index;","};","","/**"," * Adds a setter"," *"," * @param {Function} setter"," * @api public"," */","","SchemaType.prototype.set = function (fn) {"," this.setters.push(fn);"," return this;","};","","/**"," * Adds a getter"," *"," * @param {Function} getter"," * @api public"," */","","SchemaType.prototype.get = function (fn) {"," this.getters.push(fn);"," return this;","};","","/**"," * Adds a validator"," *"," * @param {Object} validator"," * @param {String} optional error message"," * @api public"," */","","SchemaType.prototype.validate = function(obj, error){"," this.validators.push([obj, error]);"," return this;","};","","/**"," * Adds a required validator"," *"," * @param {Boolean} enable/disable the validator"," * @api public"," */","","SchemaType.prototype.required = function(required){"," var checkRequired = this.checkRequired.bind(this);",""," if (false === required){"," this.validators = this.validators.filter(function(v){"," return v[0] !== checkRequired;"," });"," } else "," this.validators.push([checkRequired, 'required']);",""," return this;","};","","/**"," * Gets the default value"," *"," * @param {Object} scope for callback defaults"," * @api private"," */","","SchemaType.prototype.getDefault = function (scope) {"," if (this.defaultValue === undefined)"," return null;",""," var ret;",""," if ('function' == typeof this.defaultValue)"," ret = this.defaultValue.call(scope);"," else"," ret = this.defaultValue;",""," if (ret !== null &amp;&amp; ret !== undefined)"," ret = this.cast(ret, scope);",""," return ret;","};","","/**"," * Applies setters"," *"," * @param {Object} value"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.applySetters = function (value, scope) {"," var v = value;"," for (var l = this.setters.length - 1; l &gt;= 0; l--){"," v = this.setters[l].call(scope, v);"," if (v === null || v === undefined) return v;"," v = this.cast(v, scope);"," }"," return v;","};","","/**"," * Applies getters to a value"," *"," * @param {Object} value"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.applyGetters = function (value, scope) {"," var v = value;"," for (var l = this.getters.length - 1; l &gt;= 0; l--){"," v = this.getters[l].call(scope, v);"," if (v === null || v === undefined) return v;"," v = this.cast(v, scope);"," }"," return v;","};","","/**"," * Performs a validation"," *"," * @param {Function} callback"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.doValidate = function (value, fn, scope) {"," var err = false"," , path = this.path"," , count = this.validators.length;",""," if (!count) return fn(null);",""," function validate (val, msg) {"," if (err) return;"," if (val === undefined || val) {"," --count || fn(null);"," } else {"," fn(new ValidatorError(path, msg));"," err = true;"," }"," }",""," this.validators.forEach(function (v){"," var validator = v[0]"," , message = v[1];"," if (validator instanceof RegExp)"," validate(validator.test(value), message);"," else if ('function' == typeof validator)"," if (2 == validator.length)"," validator.call(scope, value, function(val){"," validate(val, message);"," })"," else"," validate(validator.call(scope, value), message);"," });","};","","/**"," * Validator error"," *"," * @param {String} path"," * @param {String} msg"," * @api private"," */","","function ValidatorError (path, msg) {"," MongooseError.call(this, 'Validator \"' + msg + '\" failed for path ' + path);"," Error.captureStackTrace(this, arguments.callee);"," this.name = 'ValidatorError';"," this.path = path;","};","","/**"," * Inherits from MongooseError"," */","","ValidatorError.prototype.__proto__ = MongooseError.prototype;","","/**"," * Cast error"," *"," * @api private"," */","","function CastError (type, path, type, value) {"," MongooseError.call(this, 'Cast to ' + type + ' failed for value \"' + value + '\"');"," Error.captureStackTrace(this, arguments.callee);"," this.name = 'CastError';"," this.path = path;"," this.type = type;"," this.value = value;","};","","/**"," * Inherits from MongooseError."," */","","CastError.prototype.__proto__ = MongooseError.prototype;","","/**"," * Module exports."," */","","module.exports = exports = SchemaType;","","exports.CastError = CastError;","","exports.ValidatorError = ValidatorError;"];
_$jscoverage['mongoose/schematype.js'].source = ["","/**"," * Module dependencies."," */","","var MongooseError = require('./error');","","/**"," * SchemaType constructor"," *"," * @param {String} path"," * @api public"," */","","function SchemaType (path, options) {"," this.path = path;"," this.defaultValue = null;"," this.validators = [];"," this.setters = [];"," this.getters = [];"," this.options = options;"," this._index = null;"," for (var i in options)"," if (this[i] &amp;&amp; 'function' == typeof this[i]){"," var opts = Array.isArray(options[i]) ? options[i] : [options[i]];"," this[i].apply(this, opts);"," }","};","","/**"," * Base schema. Set by Schema when instantiated."," *"," * @api private"," */","","SchemaType.prototype.base;","","/**"," * Sets a default"," *"," * @param {Object} default value"," * @api public"," */","","SchemaType.prototype.default = function (val) {"," if (arguments.length){"," this.defaultValue = val;"," return this;"," }"," return this.defaultValue;","};","","/**"," * Sets index. It can be a boolean or a hash of options"," * Example:"," * Schema.path('my.path').index(true);"," * Schema.path('my.path').index({ unique: true });"," *"," * \"Direction doesn't matter for single key indexes\""," * http://www.mongodb.org/display/DOCS/Indexes#Indexes-CompoundKeysIndexes"," *"," * @param {Object} true/"," * @api public"," */","","SchemaType.prototype.index = function (index) {"," this._index = index;"," return this;","};","","/**"," * Adds an unique index"," *"," * @param {Boolean}"," * @api private"," */","","SchemaType.prototype.unique = function (bool) {"," this._index = bool ? { unique: true } : null;"," return this;","};","","/**"," * Adds a setter"," *"," * @param {Function} setter"," * @api public"," */","","SchemaType.prototype.set = function (fn) {"," this.setters.push(fn);"," return this;","};","","/**"," * Adds a getter"," *"," * @param {Function} getter"," * @api public"," */","","SchemaType.prototype.get = function (fn) {"," this.getters.push(fn);"," return this;","};","","/**"," * Adds a validator"," *"," * @param {Object} validator"," * @param {String} optional error message"," * @api public"," */","","SchemaType.prototype.validate = function(obj, error){"," this.validators.push([obj, error]);"," return this;","};","","/**"," * Adds a required validator"," *"," * @param {Boolean} enable/disable the validator"," * @api public"," */","","SchemaType.prototype.required = function(required){"," var checkRequired = this.checkRequired.bind(this);",""," if (false === required){"," this.validators = this.validators.filter(function(v){"," return v[0] !== checkRequired;"," });"," } else "," this.validators.push([checkRequired, 'required']);",""," return this;","};","","/**"," * Gets the default value"," *"," * @param {Object} scope for callback defaults"," * @api private"," */","","SchemaType.prototype.getDefault = function (scope) {"," if (this.defaultValue === undefined)"," return null;",""," var ret;",""," if ('function' == typeof this.defaultValue)"," ret = this.defaultValue.call(scope);"," else"," ret = this.defaultValue;",""," if (ret !== null &amp;&amp; ret !== undefined)"," ret = this.cast(ret, scope);",""," return ret;","};","","/**"," * Applies setters"," *"," * @param {Object} value"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.applySetters = function (value, scope) {"," var v = value;"," for (var l = this.setters.length - 1; l &gt;= 0; l--){"," v = this.setters[l].call(scope, v);"," if (v === null || v === undefined) return v;"," v = this.cast(v, scope);"," }"," return v;","};","","/**"," * Applies getters to a value"," *"," * @param {Object} value"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.applyGetters = function (value, scope) {"," var v = value;"," for (var l = this.getters.length - 1; l &gt;= 0; l--){"," v = this.getters[l].call(scope, v);"," if (v === null || v === undefined) return v;"," v = this.cast(v, scope);"," }"," return v;","};","","/**"," * Performs a validation"," *"," * @param {Function} callback"," * @param {Object} scope"," * @api private"," */","","SchemaType.prototype.doValidate = function (value, fn, scope) {"," var err = false"," , path = this.path"," , count = this.validators.length;",""," if (!count) return fn(null);",""," function validate (val, msg) {"," if (err) return;"," if (val === undefined || val) {"," --count || fn(null);"," } else {"," fn(new ValidatorError(path, msg));"," err = true;"," }"," }",""," this.validators.forEach(function (v){"," var validator = v[0]"," , message = v[1];"," if (validator instanceof RegExp)"," validate(validator.test(value), message);"," else if ('function' == typeof validator)"," if (2 == validator.length)"," validator.call(scope, value, function(val){"," validate(val, message);"," })"," else"," validate(validator.call(scope, value), message);"," });","};","","/**"," * Validator error"," *"," * @param {String} path"," * @param {String} msg"," * @api private"," */","","function ValidatorError (path, msg) {"," MongooseError.call(this, 'Validator \"' + msg + '\" failed for path ' + path);"," Error.captureStackTrace(this, arguments.callee);"," this.name = 'ValidatorError';"," this.path = path;","};","","/**"," * Inherits from MongooseError"," */","","ValidatorError.prototype.__proto__ = MongooseError.prototype;","","/**"," * Cast error"," *"," * @api private"," */","","function CastError (type, path, type, value) {"," MongooseError.call(this, 'Cast to ' + type + ' failed for value \"' + value + '\"');"," Error.captureStackTrace(this, arguments.callee);"," this.name = 'CastError';"," this.path = path;"," this.type = type;"," this.value = value;","};","","/**"," * Inherits from MongooseError."," */","","CastError.prototype.__proto__ = MongooseError.prototype;","","/**"," * Module exports."," */","","module.exports = exports = SchemaType;","","exports.CastError = CastError;","","exports.ValidatorError = ValidatorError;"];

@@ -36,34 +36,41 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/types/array.js'][113] = 0;
_$jscoverage['mongoose/types/array.js'][114] = 0;
_$jscoverage['mongoose/types/array.js'][116] = 0;
_$jscoverage['mongoose/types/array.js'][120] = 0;
_$jscoverage['mongoose/types/array.js'][115] = 0;
_$jscoverage['mongoose/types/array.js'][117] = 0;
_$jscoverage['mongoose/types/array.js'][121] = 0;
_$jscoverage['mongoose/types/array.js'][123] = 0;
_$jscoverage['mongoose/types/array.js'][125] = 0;
_$jscoverage['mongoose/types/array.js'][135] = 0;
_$jscoverage['mongoose/types/array.js'][122] = 0;
_$jscoverage['mongoose/types/array.js'][124] = 0;
_$jscoverage['mongoose/types/array.js'][126] = 0;
_$jscoverage['mongoose/types/array.js'][136] = 0;
_$jscoverage['mongoose/types/array.js'][138] = 0;
_$jscoverage['mongoose/types/array.js'][142] = 0;
_$jscoverage['mongoose/types/array.js'][144] = 0;
_$jscoverage['mongoose/types/array.js'][154] = 0;
_$jscoverage['mongoose/types/array.js'][137] = 0;
_$jscoverage['mongoose/types/array.js'][139] = 0;
_$jscoverage['mongoose/types/array.js'][143] = 0;
_$jscoverage['mongoose/types/array.js'][145] = 0;
_$jscoverage['mongoose/types/array.js'][155] = 0;
_$jscoverage['mongoose/types/array.js'][156] = 0;
_$jscoverage['mongoose/types/array.js'][158] = 0;
_$jscoverage['mongoose/types/array.js'][157] = 0;
_$jscoverage['mongoose/types/array.js'][159] = 0;
_$jscoverage['mongoose/types/array.js'][168] = 0;
_$jscoverage['mongoose/types/array.js'][160] = 0;
_$jscoverage['mongoose/types/array.js'][169] = 0;
_$jscoverage['mongoose/types/array.js'][170] = 0;
_$jscoverage['mongoose/types/array.js'][179] = 0;
_$jscoverage['mongoose/types/array.js'][171] = 0;
_$jscoverage['mongoose/types/array.js'][180] = 0;
_$jscoverage['mongoose/types/array.js'][181] = 0;
_$jscoverage['mongoose/types/array.js'][190] = 0;
_$jscoverage['mongoose/types/array.js'][191] = 0;
_$jscoverage['mongoose/types/array.js'][192] = 0;
_$jscoverage['mongoose/types/array.js'][182] = 0;
_$jscoverage['mongoose/types/array.js'][196] = 0;
_$jscoverage['mongoose/types/array.js'][197] = 0;
_$jscoverage['mongoose/types/array.js'][198] = 0;
_$jscoverage['mongoose/types/array.js'][199] = 0;
_$jscoverage['mongoose/types/array.js'][201] = 0;
_$jscoverage['mongoose/types/array.js'][202] = 0;
_$jscoverage['mongoose/types/array.js'][203] = 0;
_$jscoverage['mongoose/types/array.js'][206] = 0;
_$jscoverage['mongoose/types/array.js'][207] = 0;
_$jscoverage['mongoose/types/array.js'][208] = 0;
_$jscoverage['mongoose/types/array.js'][216] = 0;
_$jscoverage['mongoose/types/array.js'][211] = 0;
_$jscoverage['mongoose/types/array.js'][212] = 0;
_$jscoverage['mongoose/types/array.js'][213] = 0;
_$jscoverage['mongoose/types/array.js'][222] = 0;
_$jscoverage['mongoose/types/array.js'][223] = 0;
_$jscoverage['mongoose/types/array.js'][224] = 0;
_$jscoverage['mongoose/types/array.js'][225] = 0;
_$jscoverage['mongoose/types/array.js'][235] = 0;
_$jscoverage['mongoose/types/array.js'][236] = 0;
_$jscoverage['mongoose/types/array.js'][237] = 0;
_$jscoverage['mongoose/types/array.js'][245] = 0;
}

@@ -139,80 +146,99 @@ _$jscoverage['mongoose/types/array.js'][6]++;

MongooseArray.prototype.$push = MongooseArray.prototype.push = (function () {
_$jscoverage['mongoose/types/array.js'][114]++;
_$jscoverage['mongoose/types/array.js'][115]++;
var self = this, values = Array.prototype.map.call(arguments, (function (obj) {
_$jscoverage['mongoose/types/array.js'][116]++;
_$jscoverage['mongoose/types/array.js'][117]++;
return self._cast(obj);
})), ret = oldPush.apply(this, values);
_$jscoverage['mongoose/types/array.js'][120]++;
_$jscoverage['mongoose/types/array.js'][121]++;
if (1 === values.length) {
_$jscoverage['mongoose/types/array.js'][121]++;
_$jscoverage['mongoose/types/array.js'][122]++;
this._registerAtomic(["$push", values[0]]);
}
else {
_$jscoverage['mongoose/types/array.js'][123]++;
_$jscoverage['mongoose/types/array.js'][124]++;
this._registerAtomic(["$pushAll", values]);
}
_$jscoverage['mongoose/types/array.js'][125]++;
_$jscoverage['mongoose/types/array.js'][126]++;
return ret;
});
_$jscoverage['mongoose/types/array.js'][135]++;
_$jscoverage['mongoose/types/array.js'][136]++;
MongooseArray.prototype.nonAtomicPush = (function () {
_$jscoverage['mongoose/types/array.js'][136]++;
_$jscoverage['mongoose/types/array.js'][137]++;
var self = this, values = Array.prototype.map.call(arguments, (function (obj) {
_$jscoverage['mongoose/types/array.js'][138]++;
_$jscoverage['mongoose/types/array.js'][139]++;
return self._cast(obj);
})), ret = oldPush.apply(this, values);
_$jscoverage['mongoose/types/array.js'][142]++;
_$jscoverage['mongoose/types/array.js'][143]++;
this._markModified();
_$jscoverage['mongoose/types/array.js'][144]++;
_$jscoverage['mongoose/types/array.js'][145]++;
return ret;
});
_$jscoverage['mongoose/types/array.js'][154]++;
_$jscoverage['mongoose/types/array.js'][155]++;
MongooseArray.prototype.$pushAll = (function (value) {
_$jscoverage['mongoose/types/array.js'][155]++;
_$jscoverage['mongoose/types/array.js'][156]++;
var length = this.length;
_$jscoverage['mongoose/types/array.js'][156]++;
_$jscoverage['mongoose/types/array.js'][157]++;
this.push.apply(this, value);
_$jscoverage['mongoose/types/array.js'][158]++;
_$jscoverage['mongoose/types/array.js'][159]++;
this._registerAtomic(["$pushAll", this.slice(length)]);
_$jscoverage['mongoose/types/array.js'][159]++;
_$jscoverage['mongoose/types/array.js'][160]++;
return this;
});
_$jscoverage['mongoose/types/array.js'][168]++;
_$jscoverage['mongoose/types/array.js'][169]++;
MongooseArray.prototype.$pop = (function () {
_$jscoverage['mongoose/types/array.js'][169]++;
_$jscoverage['mongoose/types/array.js'][170]++;
this._registerAtomic(["$pop", "1"]);
_$jscoverage['mongoose/types/array.js'][170]++;
_$jscoverage['mongoose/types/array.js'][171]++;
return this.pop();
});
_$jscoverage['mongoose/types/array.js'][179]++;
_$jscoverage['mongoose/types/array.js'][180]++;
MongooseArray.prototype.$shift = (function () {
_$jscoverage['mongoose/types/array.js'][180]++;
_$jscoverage['mongoose/types/array.js'][181]++;
this._registerAtomic(["$shift", "-1"]);
_$jscoverage['mongoose/types/array.js'][181]++;
_$jscoverage['mongoose/types/array.js'][182]++;
return this.shift();
});
_$jscoverage['mongoose/types/array.js'][190]++;
MongooseArray.prototype.$pull = (function (match) {
_$jscoverage['mongoose/types/array.js'][191]++;
this._registerAtomic(["$pull", match]);
_$jscoverage['mongoose/types/array.js'][192]++;
_$jscoverage['mongoose/types/array.js'][196]++;
MongooseArray.prototype.remove = (function () {
_$jscoverage['mongoose/types/array.js'][197]++;
var args = Array.prototype.map.call(arguments, this._cast, this);
_$jscoverage['mongoose/types/array.js'][198]++;
if (args.length == 1) {
_$jscoverage['mongoose/types/array.js'][199]++;
this.$pull(args[0]);
}
else {
_$jscoverage['mongoose/types/array.js'][201]++;
this.$pullAll(args);
}
_$jscoverage['mongoose/types/array.js'][202]++;
return args;
});
_$jscoverage['mongoose/types/array.js'][211]++;
MongooseArray.prototype.$pull = (function (value) {
_$jscoverage['mongoose/types/array.js'][212]++;
this._registerAtomic(["$pull", value]);
_$jscoverage['mongoose/types/array.js'][213]++;
return this;
});
_$jscoverage['mongoose/types/array.js'][201]++;
MongooseArray.prototype.$pullAll = (function (match) {
_$jscoverage['mongoose/types/array.js'][202]++;
this._registerAtomic(["$pullAll", match]);
_$jscoverage['mongoose/types/array.js'][203]++;
_$jscoverage['mongoose/types/array.js'][222]++;
MongooseArray.prototype.$pullAll = (function (values) {
_$jscoverage['mongoose/types/array.js'][223]++;
if (values && values.length) {
_$jscoverage['mongoose/types/array.js'][224]++;
this._registerAtomic(["$pullAll", values]);
}
_$jscoverage['mongoose/types/array.js'][225]++;
return this;
});
_$jscoverage['mongoose/types/array.js'][206]++;
_$jscoverage['mongoose/types/array.js'][235]++;
MongooseArray.prototype.toObject = (function () {
_$jscoverage['mongoose/types/array.js'][207]++;
_$jscoverage['mongoose/types/array.js'][236]++;
return this.map((function (doc) {
_$jscoverage['mongoose/types/array.js'][208]++;
_$jscoverage['mongoose/types/array.js'][237]++;
return doc;
}));
});
_$jscoverage['mongoose/types/array.js'][216]++;
_$jscoverage['mongoose/types/array.js'][245]++;
module.exports = MongooseArray;
_$jscoverage['mongoose/types/array.js'].source = ["","/**"," * Module dependencies."," */","","var EmbeddedDocument = require('./document');","","/**"," * Mongoose Array constructor."," * Values always have to be passed to the constructor to initialize, since"," * otherwise MongooseArray#push will mark the array as modified to the parent."," *"," * @param {Array} values"," * @param {String} key path"," * @param {Document} parent document"," * @api private"," * @see http://bit.ly/f6CnZU"," */","","function MongooseArray (values, path, doc) {"," var arr = [];"," arr.push.apply(arr, values);"," arr.__proto__ = MongooseArray.prototype;"," arr._atomics = [];"," arr.validators = [];"," arr._path = path;"," arr._parent = doc;"," if (doc)"," arr._schema = doc.schema.path(path);"," return arr;","};","","/**"," * Inherit from Array."," */","","MongooseArray.prototype = new Array();","","/**"," * Stores a queue of atomic operations to perform"," *"," * @api private"," */","","MongooseArray.prototype._atomics;","","/**"," * Parent owner document"," *"," * @api private"," */","","MongooseArray.prototype._parent;","","/**"," * Casts a member"," *"," * @api private"," */","","MongooseArray.prototype._cast = function (value) {"," var cast = this._schema.caster.prototype.cast"," , doc = this._parent;",""," return cast.call(null, value, doc);","};","","/**"," * Marks this array as modified"," *"," * @api public"," */","","MongooseArray.prototype._markModified = function () {"," if (this._parent)"," this._parent.activePaths.modify(this._path);"," return this;","};","","/**"," * Register an atomic operation with the parent"," *"," * @param {Array} operation"," * @api private"," */","","MongooseArray.prototype._registerAtomic = function (op) {"," this._atomics.push(op);"," this._markModified();"," return this;","};","","/**"," * Returns true if we have to perform atomics for this, and no normal"," * operations"," *"," * @api public"," */","","MongooseArray.prototype.__defineGetter__('doAtomics', function () {"," return this._atomics.length;","});","","/**"," * Pushes item/s to the array atomically. Overrides Array#push"," *"," * @param {Object} value"," * @api public"," */","","var oldPush = MongooseArray.prototype.push;","","MongooseArray.prototype.$push = MongooseArray.prototype.push = function () {"," var self = this"," , values = Array.prototype.map.call(arguments, function(obj){"," return self._cast(obj);"," })"," , ret = oldPush.apply(this, values);",""," if (1 === values.length)"," this._registerAtomic(['$push', values[0]]);"," else"," this._registerAtomic(['$pushAll', values]);",""," return ret;","};","","/**"," * Pushes item/s to the array non-atomically"," *"," * @param {Object} value"," * @api public"," */","","MongooseArray.prototype.nonAtomicPush = function () {"," var self = this"," , values = Array.prototype.map.call(arguments, function (obj) {"," return self._cast(obj);"," })"," , ret = oldPush.apply(this, values);",""," this._markModified();",""," return ret;","};","","/**"," * Pushes several items at once to the array atomically"," *"," * @param {Array} values"," * @api public"," */","","MongooseArray.prototype.$pushAll = function (value) {"," var length = this.length;"," this.push.apply(this, value);"," // make sure we access the casted elements"," this._registerAtomic(['$pushAll', this.slice(length) ]);"," return this;","};","","/**"," * Pops the array atomically"," *"," * @api public"," */","","MongooseArray.prototype.$pop = function () {"," this._registerAtomic(['$pop', '1']);"," return this.pop();","};","","/**"," * Shifts the array"," *"," * @api public"," */","","MongooseArray.prototype.$shift = function () {"," this._registerAtomic(['$shift', '-1']);"," return this.shift();","};","","/**"," * Pulls from the array"," *"," * @api public"," */","","MongooseArray.prototype.$pull = function (match) {"," this._registerAtomic(['$pull', match]);"," return this;","};","","/**"," * Pulls many items from an array"," *"," * @api public"," */","","MongooseArray.prototype.$pullAll = function (match) {"," this._registerAtomic(['$pullAll', match]);"," return this;","};","","MongooseArray.prototype.toObject = function () {"," return this.map( function (doc) {"," return doc;"," });","};","","/**"," * Module exports."," */","","module.exports = MongooseArray;"];
_$jscoverage['mongoose/types/array.js'].source = ["","/**"," * Module dependencies."," */","","var EmbeddedDocument = require('./document');","","/**"," * Mongoose Array constructor."," * Values always have to be passed to the constructor to initialize, since"," * otherwise MongooseArray#push will mark the array as modified to the parent."," *"," * @param {Array} values"," * @param {String} key path"," * @param {Document} parent document"," * @api private"," * @see http://bit.ly/f6CnZU"," */","","function MongooseArray (values, path, doc) {"," var arr = [];"," arr.push.apply(arr, values);"," arr.__proto__ = MongooseArray.prototype;"," arr._atomics = [];"," arr.validators = [];"," arr._path = path;"," arr._parent = doc;"," if (doc)"," arr._schema = doc.schema.path(path);"," return arr;","};","","/**"," * Inherit from Array."," */","","MongooseArray.prototype = new Array();","","/**"," * Stores a queue of atomic operations to perform"," *"," * @api private"," */","","MongooseArray.prototype._atomics;","","/**"," * Parent owner document"," *"," * @api private"," */","","MongooseArray.prototype._parent;","","/**"," * Casts a member"," *"," * @api private"," */","","MongooseArray.prototype._cast = function (value) {"," var cast = this._schema.caster.prototype.cast"," , doc = this._parent;",""," return cast.call(null, value, doc);","};","","/**"," * Marks this array as modified"," *"," * @api public"," */","","MongooseArray.prototype._markModified = function () {"," if (this._parent)"," this._parent.activePaths.modify(this._path);"," return this;","};","","/**"," * Register an atomic operation with the parent"," *"," * @param {Array} operation"," * @api private"," */","","MongooseArray.prototype._registerAtomic = function (op) {"," this._atomics.push(op);"," this._markModified();"," return this;","};","","/**"," * Returns true if we have to perform atomics for this, and no normal"," * operations"," *"," * @api public"," */","","MongooseArray.prototype.__defineGetter__('doAtomics', function () {"," return this._atomics.length;","});","","/**"," * Pushes item/s to the array atomically. Overrides Array#push"," *"," * @param {Object} value"," * @api public"," */","","var oldPush = MongooseArray.prototype.push;","","MongooseArray.prototype.$push = ","MongooseArray.prototype.push = function () {"," var self = this"," , values = Array.prototype.map.call(arguments, function(obj){"," return self._cast(obj);"," })"," , ret = oldPush.apply(this, values);",""," if (1 === values.length)"," this._registerAtomic(['$push', values[0]]);"," else"," this._registerAtomic(['$pushAll', values]);",""," return ret;","};","","/**"," * Pushes item/s to the array non-atomically"," *"," * @param {Object} value"," * @api public"," */","","MongooseArray.prototype.nonAtomicPush = function () {"," var self = this"," , values = Array.prototype.map.call(arguments, function (obj) {"," return self._cast(obj);"," })"," , ret = oldPush.apply(this, values);",""," this._markModified();",""," return ret;","};","","/**"," * Pushes several items at once to the array atomically"," *"," * @param {Array} values"," * @api public"," */","","MongooseArray.prototype.$pushAll = function (value) {"," var length = this.length;"," this.push.apply(this, value);"," // make sure we access the casted elements"," this._registerAtomic(['$pushAll', this.slice(length) ]);"," return this;","};","","/**"," * Pops the array atomically"," *"," * @api public"," */","","MongooseArray.prototype.$pop = function () {"," this._registerAtomic(['$pop', '1']);"," return this.pop();","};","","/**"," * Shifts the array"," *"," * @api public"," */","","MongooseArray.prototype.$shift = function () {"," this._registerAtomic(['$shift', '-1']);"," return this.shift();","};","","/**"," * Removes items from an array atomically"," *"," * Examples:"," * doc.array.remove(ObjectId)"," * doc.array.remove('tag 1', 'tag 2')"," *"," * @param {Object} value to remove"," * @api public"," */","","MongooseArray.prototype.remove = function () {"," var args = Array.prototype.map.call(arguments, this._cast, this);"," if (args.length == 1)"," this.$pull(args[0]);"," else"," this.$pullAll(args);"," return args;","};","","/**"," * Pulls from the array"," *"," * @api public"," */","","MongooseArray.prototype.$pull = function (value) {"," this._registerAtomic(['$pull', value]);"," return this;","};","","/**"," * Pulls many items from an array"," *"," * @api public"," */","","MongooseArray.prototype.$pullAll = function (values) {"," if (values &amp;&amp; values.length)"," this._registerAtomic(['$pullAll', values]);"," return this;","};","","/**"," * Returns an Array"," *"," * @return {Array}"," * @api public"," */","","MongooseArray.prototype.toObject = function () {"," return this.map( function (doc) {"," return doc;"," });","};","","/**"," * Module exports."," */","","module.exports = MongooseArray;"];

@@ -21,16 +21,12 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/types/document.js'][60] = 0;
_$jscoverage['mongoose/types/document.js'][69] = 0;
_$jscoverage['mongoose/types/document.js'][61] = 0;
_$jscoverage['mongoose/types/document.js'][70] = 0;
_$jscoverage['mongoose/types/document.js'][71] = 0;
_$jscoverage['mongoose/types/document.js'][72] = 0;
_$jscoverage['mongoose/types/document.js'][83] = 0;
_$jscoverage['mongoose/types/document.js'][84] = 0;
_$jscoverage['mongoose/types/document.js'][85] = 0;
_$jscoverage['mongoose/types/document.js'][95] = 0;
_$jscoverage['mongoose/types/document.js'][96] = 0;
_$jscoverage['mongoose/types/document.js'][97] = 0;
_$jscoverage['mongoose/types/document.js'][108] = 0;
_$jscoverage['mongoose/types/document.js'][109] = 0;
_$jscoverage['mongoose/types/document.js'][116] = 0;
_$jscoverage['mongoose/types/document.js'][122] = 0;
_$jscoverage['mongoose/types/document.js'][73] = 0;
_$jscoverage['mongoose/types/document.js'][76] = 0;
_$jscoverage['mongoose/types/document.js'][77] = 0;
_$jscoverage['mongoose/types/document.js'][79] = 0;
_$jscoverage['mongoose/types/document.js'][86] = 0;
_$jscoverage['mongoose/types/document.js'][92] = 0;
}

@@ -69,45 +65,30 @@ _$jscoverage['mongoose/types/document.js'][6]++;

_$jscoverage['mongoose/types/document.js'][59]++;
fn(null);
_$jscoverage['mongoose/types/document.js'][60]++;
if (fn) {
_$jscoverage['mongoose/types/document.js'][60]++;
fn(null);
}
_$jscoverage['mongoose/types/document.js'][61]++;
return this;
});
_$jscoverage['mongoose/types/document.js'][69]++;
EmbeddedDocument.prototype.remove = (function () {
_$jscoverage['mongoose/types/document.js'][70]++;
_$jscoverage['mongoose/types/document.js'][70]++;
EmbeddedDocument.prototype.remove = (function (fn) {
_$jscoverage['mongoose/types/document.js'][71]++;
if (! this.willRemove) {
_$jscoverage['mongoose/types/document.js'][71]++;
_$jscoverage['mongoose/types/document.js'][72]++;
this.parentArray.$pull({_id: this.doc._id});
_$jscoverage['mongoose/types/document.js'][72]++;
_$jscoverage['mongoose/types/document.js'][73]++;
this.willRemove = true;
}
});
_$jscoverage['mongoose/types/document.js'][83]++;
EmbeddedDocument.prototype.validate = (function (next) {
_$jscoverage['mongoose/types/document.js'][84]++;
if (this.willRemove) {
_$jscoverage['mongoose/types/document.js'][84]++;
return next();
_$jscoverage['mongoose/types/document.js'][76]++;
if (fn) {
_$jscoverage['mongoose/types/document.js'][77]++;
fn(null);
}
_$jscoverage['mongoose/types/document.js'][85]++;
return Document.prototype.validate.call(this, next);
_$jscoverage['mongoose/types/document.js'][79]++;
return this;
});
_$jscoverage['mongoose/types/document.js'][95]++;
EmbeddedDocument.prototype.applyDefaults = (function (next) {
_$jscoverage['mongoose/types/document.js'][96]++;
if (this.willRemove) {
_$jscoverage['mongoose/types/document.js'][96]++;
return next();
}
_$jscoverage['mongoose/types/document.js'][97]++;
return Document.prototype.validate.call(this, next);
});
_$jscoverage['mongoose/types/document.js'][108]++;
EmbeddedDocument.prototype.registerAtomic = (function (atomic) {
_$jscoverage['mongoose/types/document.js'][109]++;
this.error("Unsupported");
});
_$jscoverage['mongoose/types/document.js'][116]++;
_$jscoverage['mongoose/types/document.js'][86]++;
Document.registerHooks.call(EmbeddedDocument, "save", "remove", "init");
_$jscoverage['mongoose/types/document.js'][122]++;
_$jscoverage['mongoose/types/document.js'][92]++;
module.exports = EmbeddedDocument;
_$jscoverage['mongoose/types/document.js'].source = ["","/**"," * Module dependencies."," */","","var Document = require('../document');","","/**"," * EmbeddedDocument constructor."," *"," * @param {Object} object from db"," * @param {MongooseDocumentArray} parent array"," * @api private"," */","","function EmbeddedDocument (obj, parentArr) {"," this.parentArray = parentArr;"," this.parent = parentArr.parent;"," Document.call(this, obj);","};","","/**"," * Inherit from Document"," *"," */","","EmbeddedDocument.prototype.__proto__ = Document.prototype;","","/**"," * Override save to mark the parent as modified"," *"," * @api public"," */","","var oldSet = Document.prototype.set;","","EmbeddedDocument.prototype.set = function () {"," this.markModified();"," return oldSet.apply(this, arguments);","};","","/**"," * Marks parent array as modified"," *"," * @api private"," */","","EmbeddedDocument.prototype.markModified = function () {"," this.parentArray._markModified();","};","","/**"," * Save the subdocument"," *"," * @api public"," */","","EmbeddedDocument.prototype.save = function(fn) {"," fn(null);"," return this;","};","","/**"," * Remove the subdocument"," *"," * @api public"," */","","EmbeddedDocument.prototype.remove = function () {"," if (!this.willRemove){"," this.parentArray.$pull({ _id: this.doc._id });"," this.willRemove = true;"," }","};","","/**"," * Validate the doc"," *"," * @param {Function} next"," * @api private"," */","","EmbeddedDocument.prototype.validate = function (next) {"," if (this.willRemove) return next();"," return Document.prototype.validate.call(this, next);","};","","/**"," * Apply defaults"," *"," * @param {Function} next"," * @api private"," */","","EmbeddedDocument.prototype.applyDefaults = function (next) {"," if (this.willRemove) return next();"," return Document.prototype.validate.call(this, next);","};","","","/**"," * Delegates the atomic registration to the parent doc"," *"," * @param {Array} atomic operation"," * @api private"," */","","EmbeddedDocument.prototype.registerAtomic = function (atomic) {"," this.error('Unsupported');","};","","/**"," * Register hooks for some methods"," */","","Document.registerHooks.call(EmbeddedDocument, 'save', 'remove', 'init');","","/**"," * Module exxports."," */","","module.exports = EmbeddedDocument;"];
_$jscoverage['mongoose/types/document.js'].source = ["","/**"," * Module dependencies."," */","","var Document = require('../document');","","/**"," * EmbeddedDocument constructor."," *"," * @param {Object} object from db"," * @param {MongooseDocumentArray} parent array"," * @api private"," */","","function EmbeddedDocument (obj, parentArr) {"," this.parentArray = parentArr;"," this.parent = parentArr.parent;"," Document.call(this, obj);","};","","/**"," * Inherit from Document"," *"," */","","EmbeddedDocument.prototype.__proto__ = Document.prototype;","","/**"," * Override save to mark the parent as modified"," *"," * @api public"," */","","var oldSet = Document.prototype.set;","","EmbeddedDocument.prototype.set = function () {"," this.markModified();"," return oldSet.apply(this, arguments);","};","","/**"," * Marks parent array as modified"," *"," * @api private"," */","","EmbeddedDocument.prototype.markModified = function () {"," this.parentArray._markModified();","};","","/**"," * Save the subdocument"," *"," * @api public"," */","","EmbeddedDocument.prototype.save = function(fn) {"," if (fn)"," fn(null);"," return this;","};","","/**"," * Remove the subdocument"," *"," * @api public"," */","","EmbeddedDocument.prototype.remove = function (fn) {"," if (!this.willRemove){"," this.parentArray.$pull({ _id: this.doc._id });"," this.willRemove = true;"," }",""," if (fn)"," fn(null);",""," return this;","};","","/**"," * Register hooks for some methods"," */","","Document.registerHooks.call(EmbeddedDocument, 'save', 'remove', 'init');","","/**"," * Module exxports."," */","","module.exports = EmbeddedDocument;"];

@@ -25,5 +25,8 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/types/documentarray.js'][62] = 0;
_$jscoverage['mongoose/types/documentarray.js'][63] = 0;
_$jscoverage['mongoose/types/documentarray.js'][64] = 0;
_$jscoverage['mongoose/types/documentarray.js'][71] = 0;
_$jscoverage['mongoose/types/documentarray.js'][65] = 0;
_$jscoverage['mongoose/types/documentarray.js'][68] = 0;
_$jscoverage['mongoose/types/documentarray.js'][69] = 0;
_$jscoverage['mongoose/types/documentarray.js'][70] = 0;
_$jscoverage['mongoose/types/documentarray.js'][73] = 0;
_$jscoverage['mongoose/types/documentarray.js'][80] = 0;
}

@@ -70,14 +73,23 @@ _$jscoverage['mongoose/types/documentarray.js'][6]++;

_$jscoverage['mongoose/types/documentarray.js'][61]++;
var casted = ObjectIdSchema.prototype.cast.apply(null, id);
_$jscoverage['mongoose/types/documentarray.js'][62]++;
try {
_$jscoverage['mongoose/types/documentarray.js'][62]++;
var casted = ObjectIdSchema.prototype.cast.call(null, id);
}
catch (e) {
_$jscoverage['mongoose/types/documentarray.js'][65]++;
return null;
}
_$jscoverage['mongoose/types/documentarray.js'][68]++;
for (var i = 0, l = this.length; i < l; i++) {
_$jscoverage['mongoose/types/documentarray.js'][63]++;
if (ObjectId.toString(casted) == ObjectId.toString(this[i]._doc._id)) {
_$jscoverage['mongoose/types/documentarray.js'][64]++;
_$jscoverage['mongoose/types/documentarray.js'][69]++;
if (ObjectId.toString(casted) == ObjectId.toString(this[i].get("_id"))) {
_$jscoverage['mongoose/types/documentarray.js'][70]++;
return this[i];
}
}
_$jscoverage['mongoose/types/documentarray.js'][73]++;
return null;
});
_$jscoverage['mongoose/types/documentarray.js'][71]++;
_$jscoverage['mongoose/types/documentarray.js'][80]++;
module.exports = MongooseDocumentArray;
_$jscoverage['mongoose/types/documentarray.js'].source = ["","/**"," * Module dependencies."," */","","var MongooseArray = require('./array')"," , driver = global.MONGOOSE_DRIVER_PATH || '../drivers/node-mongodb-native'"," , ObjectId = require(driver + '/objectid')"," , ObjectIdSchema = require('../schema/objectid');","","/**"," * Array of embedded documents"," * Values always have to be passed to the constructor to initialize, since"," * otherwise MongooseArray#push will mark the array as modified to the parent."," *"," * @param {Array} values"," * @param {String} key path"," * @param {Document} parent document"," * @api private"," * @see http://bit.ly/f6CnZU"," */","","function MongooseDocumentArray (values, path, doc) {"," var arr = [];"," arr.push.apply(arr, values);"," arr.__proto__ = MongooseDocumentArray.prototype;"," arr._atomics = [];"," arr.validators = [];"," arr._path = path;"," arr._parent = doc;"," if (doc)"," arr._schema = doc.schema.path(path);"," return arr;","};","","/**"," * Inherits from MongooseArray"," */","","MongooseDocumentArray.prototype.__proto__ = MongooseArray.prototype;","","/**"," * Overrides cast"," *"," * @api private"," */","","MongooseDocumentArray.prototype._cast = function (value) {"," var doc = new this._schema.caster(value, this);"," return doc;","};","","/**"," * Filters items by id"," *"," * @param {Object} id"," * @api public"," */","","MongooseDocumentArray.prototype.id = function(id) {"," var casted = ObjectIdSchema.prototype.cast.apply(null, id);"," for (var i = 0, l = this.length; i &lt; l; i++)"," if (ObjectId.toString(casted) == ObjectId.toString(this[i]._doc._id))"," return this[i];","};","","/**"," * Module exports."," */","","module.exports = MongooseDocumentArray;"];
_$jscoverage['mongoose/types/documentarray.js'].source = ["","/**"," * Module dependencies."," */","","var MongooseArray = require('./array')"," , driver = global.MONGOOSE_DRIVER_PATH || '../drivers/node-mongodb-native'"," , ObjectId = require(driver + '/objectid')"," , ObjectIdSchema = require('../schema/objectid');","","/**"," * Array of embedded documents"," * Values always have to be passed to the constructor to initialize, since"," * otherwise MongooseArray#push will mark the array as modified to the parent."," *"," * @param {Array} values"," * @param {String} key path"," * @param {Document} parent document"," * @api private"," * @see http://bit.ly/f6CnZU"," */","","function MongooseDocumentArray (values, path, doc) {"," var arr = [];"," arr.push.apply(arr, values);"," arr.__proto__ = MongooseDocumentArray.prototype;"," arr._atomics = [];"," arr.validators = [];"," arr._path = path;"," arr._parent = doc;"," if (doc)"," arr._schema = doc.schema.path(path);"," return arr;","};","","/**"," * Inherits from MongooseArray"," */","","MongooseDocumentArray.prototype.__proto__ = MongooseArray.prototype;","","/**"," * Overrides cast"," *"," * @api private"," */","","MongooseDocumentArray.prototype._cast = function (value) {"," var doc = new this._schema.caster(value, this);"," return doc;","};","","/**"," * Filters items by id"," *"," * @param {Object} id"," * @api public"," */","","MongooseDocumentArray.prototype.id = function(id) {"," try {"," var casted = ObjectIdSchema.prototype.cast.call(null, id);"," } catch (e) {"," // cast error"," return null;"," }",""," for (var i = 0, l = this.length; i &lt; l; i++) {"," if (ObjectId.toString(casted) == ObjectId.toString(this[i].get('_id')))"," return this[i];"," }",""," return null;","};","","/**"," * Module exports."," */","","module.exports = MongooseDocumentArray;"];

@@ -108,2 +108,10 @@ /* automatically generated by JSCoverage - do not edit */

_$jscoverage['mongoose/utils.js'][374] = 0;
_$jscoverage['mongoose/utils.js'][376] = 0;
_$jscoverage['mongoose/utils.js'][377] = 0;
_$jscoverage['mongoose/utils.js'][378] = 0;
_$jscoverage['mongoose/utils.js'][379] = 0;
_$jscoverage['mongoose/utils.js'][380] = 0;
_$jscoverage['mongoose/utils.js'][381] = 0;
_$jscoverage['mongoose/utils.js'][383] = 0;
_$jscoverage['mongoose/utils.js'][385] = 0;
}

@@ -370,2 +378,21 @@ _$jscoverage['mongoose/utils.js'][6]++;

exports.StateMachine = StateMachine;
_$jscoverage['mongoose/utils.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , ObjectId = require('./types/objectid')","","/**"," * Produces a collection name from a model name"," *"," * @param {String} model name"," * @return {String} collection name"," * @api private"," */","","exports.toCollectionName = function(name) {"," return pluralize(name.toLowerCase());","};","","/**"," * Pluralization rules."," */","","var rules = ["," [/(m)an$/gi, '$1en'],"," [/(pe)rson$/gi, '$1ople'],"," [/(child)$/gi, '$1ren'],"," [/^(ox)$/gi, '$1en'],"," [/(ax|test)is$/gi, '$1es'],"," [/(octop|vir)us$/gi, '$1i'],"," [/(alias|status)$/gi, '$1es'],"," [/(bu)s$/gi, '$1ses'],"," [/(buffal|tomat|potat)o$/gi, '$1oes'],"," [/([ti])um$/gi, '$1a'],"," [/sis$/gi, 'ses'],"," [/(?:([^f])fe|([lr])f)$/gi, '$1$2ves'],"," [/(hive)$/gi, '$1s'],"," [/([^aeiouy]|qu)y$/gi, '$1ies'],"," [/(x|ch|ss|sh)$/gi, '$1es'],"," [/(matr|vert|ind)ix|ex$/gi, '$1ices'],"," [/([m|l])ouse$/gi, '$1ice'],"," [/(quiz)$/gi, '$1zes'],"," [/s$/gi, 's'],"," [/$/gi, 's']","];","","/**"," * Uncountable words."," */","","var uncountables = ["," 'advice',"," 'energy',"," 'excretion',"," 'digestion',"," 'cooperation',"," 'health',"," 'justice',"," 'labour',"," 'machinery',"," 'equipment',"," 'information',"," 'pollution',"," 'sewage',"," 'paprer',"," 'money',"," 'species',"," 'series',"," 'rain',"," 'rice',"," 'fish',"," 'sheep',"," 'moose',"," 'deer',"," 'news'","];","","/**"," * Pluralize function."," *"," * @author TJ Holowaychuk (extracted from _ext.js_)"," * @param {String} string to pluralize"," * @api private"," */","","function pluralize (str) {"," var rule, found;"," if (!~uncountables.indexOf(str.lowercase)){"," found = rules.filter(function(rule){"," return str.match(rule[0]);"," });"," if (found[0]) return str.replace(found[0][0], found[0][1]);"," }"," return str;","};","","/**"," * Add `once` to EventEmitter if absent"," *"," * @param {String} event name"," * @param {Function} listener"," * @api private"," */","","var Events = EventEmitter;","","if (!('once' in EventEmitter.prototype)){"," "," Events = function () {"," EventEmitter.apply(this, arguments);"," };",""," /**"," * Inherit from EventEmitter."," */",""," Events.prototype.__proto__ = EventEmitter.prototype;"," "," /**"," * Add `once`."," */"," "," Events.prototype.once = function (type, listener) {"," var self = this;"," self.on(type, function g(){"," self.removeListener(type, g);"," listener.apply(this, arguments);"," });"," };","","}","","exports.EventEmitter = Events;","","/**"," * Object clone with Mongoose natives support"," *"," * @param {Object} object to clone"," * @return {Object} cloned object"," * @api private"," */","","var clone = exports.clone = function (obj) {"," if (obj === undefined || obj === null)"," return obj;"," if (Array.isArray(obj))"," return cloneArray(obj);"," if (obj.toObject)"," return obj.toObject();"," if (obj.constructor == Object)"," return cloneObject(obj);"," if (obj.constructor == Date || obj.constructor == RegExp"," || obj.constructor == Function)"," return new obj.constructor(+obj);"," if (obj instanceof ObjectId)"," return ObjectId.fromString(ObjectId.toString(obj));"," if (obj.valueOf)"," return obj.valueOf();"," return obj;","};","","function cloneObject (obj) {"," var ret = {};"," for (var i in obj)"," ret[i] = clone(obj[i]);"," return ret;","};","","function cloneArray (arr) {"," var ret = [];"," for (var i = 0, l = arr.length; i &lt; l; i++)"," ret.push(clone(arr[i]));"," return ret;","};","","/**"," * Copies and merges options with defaults."," *"," * @param {Object} defaults"," * @param {Object} supplied options"," * @return {Object} new (merged) object"," * @api private"," */","","exports.options = function (defaults, opts){"," var opts = opts || {}"," , c = clone(opts);"," for (var i in defaults)"," if (!(i in opts))"," c[i] = clone(defaults[i]);"," return c;","};","","/**"," * Erases an item from an array"," *"," * @param {Array} array"," * @param {Object} value"," * @return undefined"," * @api private"," */","","exports.erase = function (arr, item) {"," for (var i = 0, l = arr.length; i &lt; l; i++)"," if (arr[i] === item) arr.splice(i, 1);","};","","/**"," * Generates a random string"," *"," * @api private"," */","","exports.random = function () {"," return Math.random().toString().substr(3);","};","","","/**"," * A StateMachine represents a minimal `interface` for the"," * constructors it builds via StateMachine.ctor(...)."," *"," * @api private"," */","","function StateMachine () {"," this.paths = {};"," this.states = {};","}","","/**"," * StateMachine.ctor('state1', 'state2', ...)"," * A factory method for subclassing StateMachine."," * The arguments are a list of states. For each state,"," * the constructor's prototype gets state transition"," * methods named after each state. These transition methods"," * place their path argument into the given state."," *"," * @param {String} state"," * @param {String} [state]"," * @return {Function} subclass constructor"," * @api public"," */","","StateMachine.ctor = function () {"," var states = [].slice.call(arguments);"," var ctor = function () {"," StateMachine.apply(this, arguments);"," this.stateNames = states;"," var i = states.length"," , state;"," while (i--) {"," state = states[i];"," this.states[state] = {};"," }"," };",""," ctor.prototype.__proto__ = StateMachine.prototype;"," states.forEach( function (state) {"," /**"," * Changes the `path`'s state to `state`."," */"," ctor.prototype[state] = function (path) {"," this._changeState(path, state);"," }"," });"," return ctor;","};","","StateMachine.prototype = {"," /**"," * This function is wrapped by the state change functions:"," * - `require(path)`"," * - `modify(path)`"," * - `init(path)`"," * @api private"," */",""," _changeState: function (path, nextState) {"," var prevState = this.paths[path]"," , prevBucket = this.states[prevState];"," delete this.paths[path];"," if (prevBucket) delete prevBucket[path];",""," this.paths[path] = nextState;"," this.states[nextState][path] = true;"," },",""," stateOf: function (path) {"," return this.paths[path];"," },",""," /**"," * Checks to see if at least one path is in the states passed in via `arguments`"," * e.g., this.some('required', 'inited')"," * @param {String} state that we want to check for."," * @api public"," */",""," some: function () {"," var self = this;"," return Array.prototype.some.call(arguments.length ? arguments : this.stateNames, function (state) {"," return Object.keys(self.states[state]).length;"," });"," },",""," /**"," * This function builds the functions that get assigned to `forEach` and `map`,"," * since both of those methods share a lot of the same logic."," *"," * @param {String} iterMethod is either 'forEach' or 'map'"," * @return {Function}"," * @api private"," */",""," _iter: function (iterMethod) {"," return function () {"," var numArgs = arguments.length"," , states = [].slice.call(arguments, 0, numArgs-1)"," , callback = arguments[arguments.length-1];"," if (!states.length) states = this.stateNames;"," var self = this;"," var paths = states.reduce( function (paths, state) {"," return paths.concat(Object.keys(self.states[state]));"," "," }, []);"," return paths[iterMethod]( function (path) {"," return callback(path);"," });"," };"," },",""," /**"," * Iterates over the paths that belong to one of the parameter states."," *"," * The function profile can look like:"," * this.forEach(state1, fn); // iterates over all paths in state1"," * this.forEach(state1, state2, fn); // iterates over all paths in state1 or state2"," * this.forEach(fn); // iterates over all paths in all states"," *"," * @param {String} [state]"," * @param {String} [state]"," * @param {Function} callback"," * @api public"," */",""," forEach: function () {"," this.forEach = this._iter('forEach');"," return this.forEach.apply(this, arguments);"," },",""," /**"," * Maps over the paths that belong to one of the parameter states."," *"," * The function profile can look like:"," * this.forEach(state1, fn); // iterates over all paths in state1"," * this.forEach(state1, state2, fn); // iterates over all paths in state1 or state2"," * this.forEach(fn); // iterates over all paths in all states"," *"," * @param {String} [state]"," * @param {String} [state]"," * @param {Function} callback"," * @return {Array}"," * @api public"," */",""," map: function () {"," this.map = this._iter('map');"," return this.map.apply(this, arguments);"," }","};","","exports.StateMachine = StateMachine;"];
_$jscoverage['mongoose/utils.js'][376]++;
exports.inGroupsOf = (function inGroupsOf(card, arr, fn) {
_$jscoverage['mongoose/utils.js'][377]++;
var group = [];
_$jscoverage['mongoose/utils.js'][378]++;
for (var i = 0, l = arr.length; i < l; i++) {
_$jscoverage['mongoose/utils.js'][379]++;
if (i && i % card === 0) {
_$jscoverage['mongoose/utils.js'][380]++;
fn.apply(this, group);
_$jscoverage['mongoose/utils.js'][381]++;
group.length = 0;
}
_$jscoverage['mongoose/utils.js'][383]++;
group.push(arr[i]);
}
_$jscoverage['mongoose/utils.js'][385]++;
fn.apply(this, group);
});
_$jscoverage['mongoose/utils.js'].source = ["","/**"," * Module dependencies."," */","","var EventEmitter = require('events').EventEmitter"," , ObjectId = require('./types/objectid')","","/**"," * Produces a collection name from a model name"," *"," * @param {String} model name"," * @return {String} collection name"," * @api private"," */","","exports.toCollectionName = function(name) {"," return pluralize(name.toLowerCase());","};","","/**"," * Pluralization rules."," */","","var rules = ["," [/(m)an$/gi, '$1en'],"," [/(pe)rson$/gi, '$1ople'],"," [/(child)$/gi, '$1ren'],"," [/^(ox)$/gi, '$1en'],"," [/(ax|test)is$/gi, '$1es'],"," [/(octop|vir)us$/gi, '$1i'],"," [/(alias|status)$/gi, '$1es'],"," [/(bu)s$/gi, '$1ses'],"," [/(buffal|tomat|potat)o$/gi, '$1oes'],"," [/([ti])um$/gi, '$1a'],"," [/sis$/gi, 'ses'],"," [/(?:([^f])fe|([lr])f)$/gi, '$1$2ves'],"," [/(hive)$/gi, '$1s'],"," [/([^aeiouy]|qu)y$/gi, '$1ies'],"," [/(x|ch|ss|sh)$/gi, '$1es'],"," [/(matr|vert|ind)ix|ex$/gi, '$1ices'],"," [/([m|l])ouse$/gi, '$1ice'],"," [/(quiz)$/gi, '$1zes'],"," [/s$/gi, 's'],"," [/$/gi, 's']","];","","/**"," * Uncountable words."," */","","var uncountables = ["," 'advice',"," 'energy',"," 'excretion',"," 'digestion',"," 'cooperation',"," 'health',"," 'justice',"," 'labour',"," 'machinery',"," 'equipment',"," 'information',"," 'pollution',"," 'sewage',"," 'paprer',"," 'money',"," 'species',"," 'series',"," 'rain',"," 'rice',"," 'fish',"," 'sheep',"," 'moose',"," 'deer',"," 'news'","];","","/**"," * Pluralize function."," *"," * @author TJ Holowaychuk (extracted from _ext.js_)"," * @param {String} string to pluralize"," * @api private"," */","","function pluralize (str) {"," var rule, found;"," if (!~uncountables.indexOf(str.lowercase)){"," found = rules.filter(function(rule){"," return str.match(rule[0]);"," });"," if (found[0]) return str.replace(found[0][0], found[0][1]);"," }"," return str;","};","","/**"," * Add `once` to EventEmitter if absent"," *"," * @param {String} event name"," * @param {Function} listener"," * @api private"," */","","var Events = EventEmitter;","","if (!('once' in EventEmitter.prototype)){"," "," Events = function () {"," EventEmitter.apply(this, arguments);"," };",""," /**"," * Inherit from EventEmitter."," */",""," Events.prototype.__proto__ = EventEmitter.prototype;"," "," /**"," * Add `once`."," */"," "," Events.prototype.once = function (type, listener) {"," var self = this;"," self.on(type, function g(){"," self.removeListener(type, g);"," listener.apply(this, arguments);"," });"," };","","}","","exports.EventEmitter = Events;","","/**"," * Object clone with Mongoose natives support"," *"," * @param {Object} object to clone"," * @return {Object} cloned object"," * @api private"," */","","var clone = exports.clone = function (obj) {"," if (obj === undefined || obj === null)"," return obj;"," if (Array.isArray(obj))"," return cloneArray(obj);"," if (obj.toObject)"," return obj.toObject();"," if (obj.constructor == Object)"," return cloneObject(obj);"," if (obj.constructor == Date || obj.constructor == RegExp"," || obj.constructor == Function)"," return new obj.constructor(+obj);"," if (obj instanceof ObjectId)"," return ObjectId.fromString(ObjectId.toString(obj));"," if (obj.valueOf)"," return obj.valueOf();"," return obj;","};","","function cloneObject (obj) {"," var ret = {};"," for (var i in obj)"," ret[i] = clone(obj[i]);"," return ret;","};","","function cloneArray (arr) {"," var ret = [];"," for (var i = 0, l = arr.length; i &lt; l; i++)"," ret.push(clone(arr[i]));"," return ret;","};","","/**"," * Copies and merges options with defaults."," *"," * @param {Object} defaults"," * @param {Object} supplied options"," * @return {Object} new (merged) object"," * @api private"," */","","exports.options = function (defaults, opts){"," var opts = opts || {}"," , c = clone(opts);"," for (var i in defaults)"," if (!(i in opts))"," c[i] = clone(defaults[i]);"," return c;","};","","/**"," * Erases an item from an array"," *"," * @param {Array} array"," * @param {Object} value"," * @return undefined"," * @api private"," */","","exports.erase = function (arr, item) {"," for (var i = 0, l = arr.length; i &lt; l; i++)"," if (arr[i] === item) arr.splice(i, 1);","};","","/**"," * Generates a random string"," *"," * @api private"," */","","exports.random = function () {"," return Math.random().toString().substr(3);","};","","","/**"," * A StateMachine represents a minimal `interface` for the"," * constructors it builds via StateMachine.ctor(...)."," *"," * @api private"," */","","function StateMachine () {"," this.paths = {};"," this.states = {};","}","","/**"," * StateMachine.ctor('state1', 'state2', ...)"," * A factory method for subclassing StateMachine."," * The arguments are a list of states. For each state,"," * the constructor's prototype gets state transition"," * methods named after each state. These transition methods"," * place their path argument into the given state."," *"," * @param {String} state"," * @param {String} [state]"," * @return {Function} subclass constructor"," * @api public"," */","","StateMachine.ctor = function () {"," var states = [].slice.call(arguments);"," var ctor = function () {"," StateMachine.apply(this, arguments);"," this.stateNames = states;"," var i = states.length"," , state;"," while (i--) {"," state = states[i];"," this.states[state] = {};"," }"," };",""," ctor.prototype.__proto__ = StateMachine.prototype;"," states.forEach( function (state) {"," /**"," * Changes the `path`'s state to `state`."," */"," ctor.prototype[state] = function (path) {"," this._changeState(path, state);"," }"," });"," return ctor;","};","","StateMachine.prototype = {"," /**"," * This function is wrapped by the state change functions:"," * - `require(path)`"," * - `modify(path)`"," * - `init(path)`"," * @api private"," */",""," _changeState: function (path, nextState) {"," var prevState = this.paths[path]"," , prevBucket = this.states[prevState];"," delete this.paths[path];"," if (prevBucket) delete prevBucket[path];",""," this.paths[path] = nextState;"," this.states[nextState][path] = true;"," },",""," stateOf: function (path) {"," return this.paths[path];"," },",""," /**"," * Checks to see if at least one path is in the states passed in via `arguments`"," * e.g., this.some('required', 'inited')"," * @param {String} state that we want to check for."," * @api public"," */",""," some: function () {"," var self = this;"," return Array.prototype.some.call(arguments.length ? arguments : this.stateNames, function (state) {"," return Object.keys(self.states[state]).length;"," });"," },",""," /**"," * This function builds the functions that get assigned to `forEach` and `map`,"," * since both of those methods share a lot of the same logic."," *"," * @param {String} iterMethod is either 'forEach' or 'map'"," * @return {Function}"," * @api private"," */",""," _iter: function (iterMethod) {"," return function () {"," var numArgs = arguments.length"," , states = [].slice.call(arguments, 0, numArgs-1)"," , callback = arguments[arguments.length-1];"," if (!states.length) states = this.stateNames;"," var self = this;"," var paths = states.reduce( function (paths, state) {"," return paths.concat(Object.keys(self.states[state]));"," "," }, []);"," return paths[iterMethod]( function (path) {"," return callback(path);"," });"," };"," },",""," /**"," * Iterates over the paths that belong to one of the parameter states."," *"," * The function profile can look like:"," * this.forEach(state1, fn); // iterates over all paths in state1"," * this.forEach(state1, state2, fn); // iterates over all paths in state1 or state2"," * this.forEach(fn); // iterates over all paths in all states"," *"," * @param {String} [state]"," * @param {String} [state]"," * @param {Function} callback"," * @api public"," */",""," forEach: function () {"," this.forEach = this._iter('forEach');"," return this.forEach.apply(this, arguments);"," },",""," /**"," * Maps over the paths that belong to one of the parameter states."," *"," * The function profile can look like:"," * this.forEach(state1, fn); // iterates over all paths in state1"," * this.forEach(state1, state2, fn); // iterates over all paths in state1 or state2"," * this.forEach(fn); // iterates over all paths in all states"," *"," * @param {String} [state]"," * @param {String} [state]"," * @param {Function} callback"," * @return {Array}"," * @api public"," */",""," map: function () {"," this.map = this._iter('map');"," return this.map.apply(this, arguments);"," }","};","","exports.StateMachine = StateMachine;","","exports.inGroupsOf = function inGroupsOf (card, arr, fn) {"," var group = [];"," for (var i = 0, l = arr.length; i &lt; l; i++) {"," if (i &amp;&amp; i % card === 0) {"," fn.apply(this, group);"," group.length = 0;"," }"," group.push(arr[i]);"," }"," fn.apply(this, group);","};"];

@@ -256,3 +256,3 @@

exports.version = '1.0.0';
exports.version = '1.0.1';

@@ -259,0 +259,0 @@ /**

@@ -15,7 +15,8 @@

function MongooseNumber (value, path, doc) {
this._atomics = [];
this.v = value;
this._path = path;
this._parent = doc;
Number.call(this, value);
var number = new Number(value);
number.__proto__ = MongooseNumber.prototype;
number._atomics = [];
number._path = path;
number._parent = doc;
return number;
};

@@ -27,3 +28,3 @@

MongooseNumber.prototype.__proto__ = Number.prototype;
MongooseNumber.prototype = new Number();

@@ -37,5 +38,7 @@ /**

MongooseNumber.prototype.increment = function(value){
value = Number(value);
this.v += (value || 1);
this._atomics = [['$inc', value || 1]];
var schema = this._parent.schema.path(this._path)
, value = Number(value) || 1;
if (isNaN(value)) value = 1;
this._parent.setValue(this._path, schema.cast(this + value));
this._parent.getValue(this._path)._atomics = [['$inc', value || 1]];
this._parent.activePaths.modify(this._path);

@@ -67,22 +70,2 @@ return this;

/**
* Implement valueOf
*
* @api public
*/
MongooseNumber.prototype.valueOf = function () {
return this.v;
};
/**
* Implement toString
*
* @api public
*/
MongooseNumber.prototype.toString = function () {
return String(this.valueOf());
};
/**
* Module exports

@@ -89,0 +72,0 @@ */

{
"name": "mongoose"
, "description": "Mongoose MongoDB ORM"
, "version": "1.0.0"
, "version": "1.0.1"
, "author": "Guillermo Rauch <guillermo@learnboost.com>"

@@ -6,0 +6,0 @@ , "keywords": ["mongodb", "mongoose", "orm", "data", "datastore", "nosql"]

@@ -31,2 +31,19 @@ Mongoose 1.0

## Installation
The recommended way is through the excellent NPM:
$ npm install mongoose
Otherwise, you can check it in your repository and then expose it:
$ git clone git@github.com:LearnBoost/mongoose.git support/mongoose/
// in your code
require.paths.unshift('support/mongoose/lib')
Then you can require it:
require('mongoose')
## Connecting to MongoDB

@@ -220,4 +237,9 @@

You can find the [Dox](http://github.com/visionmedia/dox) generated API docs at
http://mongoosejs.com.
[http://mongoosejs.com](http://mongoosejs.com).
## Getting support
Please subscribe to the Google Groups [mailing
list](http://groups.google.com/group/mongoose-orm/boxsubscribe).
## Contributing to Mongoose

@@ -224,0 +246,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc