1 var define = require("comb").define;
  2 
  3 /**
  4  * @class Time stamp plugin to support creating timestamp
  5  *
  6  * @example
  7  *
  8  * //create your model and register the plugin.
  9  * var MyModel = moose.addModel("testTable", {
 10  *     plugins : [moose.plugins.TimeStampPlugin];
 11  * });
 12  *
 13  * //initialize default timestamp functionality
 14  * MyModel.timestamp();
 15  *
 16  * //Or
 17  *
 18  * //initialize custom update column
 19  * MyModel.timestamp({updated : "myUpdateColumn"});
 20  *
 21  * //Or
 22  *
 23  * //initialize custom created column
 24  * MyModel.timestamp({created : "myCreatedColumn"});
 25  *
 26  * //Or
 27  *
 28  * //Set to update the updated column when row is created
 29  * MyModel.timestamp({updateOnCreate : true});
 30  *
 31  * //Or
 32  *
 33  * //Set both custom columns
 34  * MyModel.timestamp({updated : "myUpdateColumn", created : "myCreatedColumn"});
 35  *
 36  * //Or
 37  *
 38  * //Use all three options!
 39  * MyModel.timestamp({
 40  *          updated : "myUpdateColumn",
 41  *          created : "myCreatedColumn",
 42  *          updateOnCreate : true
 43  * });
 44  *
 45  *
 46  * @name TimeStampPlugin
 47  * @memberOf moose.plugins
 48  */
 49 module.exports = exports = define(null, {
 50 
 51     static : {
 52         /**@lends moose.plugins.TimeStampPlugin*/
 53 
 54         /**
 55          * Adds timestamp functionality to a table.
 56          * @param {Object} [options]
 57          * @param {String} [options.updated="updated"] the name of the column to set the updated timestamp on.
 58          * @param {String} [options.created="created"] the name of the column to set the created timestamp on
 59          * @param {Boolean} [options.updateOnCreate=false] Set to true to set the updated column on creation
 60          **/
 61         timestamp : function(options) {
 62             options = options || {};
 63             var updateColumn = options.updated || "updated";
 64             var createdColumn = options.created || "created";
 65             var updateOnCreate = options.updateOnCreate || false;
 66             this.pre("save", function(next) {
 67                 this[createdColumn] = new Date();
 68                 if (updateOnCreate) {
 69                     this[updateColumn] = new Date();
 70                 }
 71                 next();
 72             });
 73             this.pre("update", function(next) {
 74                 this[updateColumn] = new Date();
 75                 next();
 76             });
 77         }
 78     }
 79 
 80 });