diff --git a/index.js b/index.js index 4e366e4..bf63049 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -module.exports = require("./lib/types"); +module.exports = require("./lib"); diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..2f59272 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,17 @@ +exports.loadTypes = function () { + var mongoose = arguments[0], + types = Array.prototype.slice.call(arguments, 1); + if (types.length) { + types.forEach( function (type) { + require("./types/" + type).loadType(mongoose); + }); + } else { + var files = require("fs").readdirSync(__dirname + "/types"); + files.forEach( function (filename) { + var base = filename.slice(0, filename.length-3); + require("./types/" + base).loadType(mongoose); + }); + } +}; + +exports.useTimestamps = require("./plugins/useTimestamps").useTimestamps; diff --git a/lib/plugins/useTimestamps.js b/lib/plugins/useTimestamps.js new file mode 100644 index 0000000..5530bb5 --- /dev/null +++ b/lib/plugins/useTimestamps.js @@ -0,0 +1,12 @@ +exports.useTimestamps = function (schema, options) { + schema + .date('createdAt') + .date('updatedAt') + .pre('save', function () { + if (!this.createdAt) { + this.createdAt = this.updatedAt = new Date; + } else { + this.updatedAt = new Date; + } + }); +}; diff --git a/lib/types/index.js b/lib/types/index.js deleted file mode 100644 index 3629307..0000000 --- a/lib/types/index.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports.loadTypes = function () { - var mongoose = arguments[0], - types = Array.prototype.slice.call(arguments, 1); - if (types.length) { - types.forEach( function (type) { - require("./" + type).loadType(mongoose); - }); - } else { - var files = require("fs").readdirSync(__dirname); - files.forEach( function (filename) { - var base = filename.slice(0, filename.length-3); - if (base !== "index") require("./" + base).loadType(mongoose); - }); - } -}; diff --git a/tests/useTimestamps.test.js b/tests/useTimestamps.test.js new file mode 100644 index 0000000..5266235 --- /dev/null +++ b/tests/useTimestamps.test.js @@ -0,0 +1,41 @@ +var assert = require('assert') + , mongoose = require('mongoose').new() + , document = mongoose.define + , db = mongoose.connect('mongodb://localhost/mongoose_types_tests') + , loadTypes = require("../").loadTypes + , useTimestamps = require("../").useTimestamps; + +document('TimeCop') + .email('email') + .plugin(useTimestamps); + +module.exports = { + before: function(assert, done){ + db.on('connect', function () { + mongoose.TimeCop.remove({}, function () { + done(); + }); + }); + }, + 'createdAt and updatedAt should be set to the same value on creation': function (assert, done) { + mongoose.TimeCop.create({ email: 'brian@brian.com' }, function (err, cop) { + assert.ok(cop.createdAt instanceof Date); + assert.equal(cop.updatedAt, cop.createdAt); + done(); + }); + }, + 'updatedAt should be later than createdAt upon updating': function (assert, done) { + mongoose.TimeCop.first({email: 'brian@brian.com'}, function (err, found) { + found.email = 'jeanclaude@vandamme.com'; + setTimeout( function () { + found.save( function (err, updated) { + assert.ok(updated.updatedAt > updated.createdAt); + done(); + }); + }, 1000); + }); + }, + teardown: function(){ + mongoose.disconnect(); + } +};