mirror of
https://github.com/bodyrep/DemoApp.git
synced 2026-01-25 22:51:37 +00:00
127 lines
2.1 KiB
JavaScript
127 lines
2.1 KiB
JavaScript
|
|
/*!
|
|
* Module requirements.
|
|
*/
|
|
|
|
var SchemaType = require('../schematype')
|
|
, CastError = SchemaType.CastError;
|
|
|
|
/**
|
|
* Date SchemaType constructor.
|
|
*
|
|
* @param {String} key
|
|
* @param {Object} options
|
|
* @inherits SchemaType
|
|
* @api private
|
|
*/
|
|
|
|
function SchemaDate (key, options) {
|
|
SchemaType.call(this, key, options);
|
|
};
|
|
|
|
/*!
|
|
* Inherits from SchemaType.
|
|
*/
|
|
|
|
SchemaDate.prototype.__proto__ = SchemaType.prototype;
|
|
|
|
/**
|
|
* Required validator for date
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
SchemaDate.prototype.checkRequired = function (value) {
|
|
return value instanceof Date;
|
|
};
|
|
|
|
/**
|
|
* Casts to date
|
|
*
|
|
* @param {Object} value to cast
|
|
* @api private
|
|
*/
|
|
|
|
SchemaDate.prototype.cast = function (value) {
|
|
if (value === null || value === '')
|
|
return null;
|
|
|
|
if (value instanceof Date)
|
|
return value;
|
|
|
|
var date;
|
|
|
|
// support for timestamps
|
|
if (value instanceof Number || 'number' == typeof value
|
|
|| String(value) == Number(value))
|
|
date = new Date(Number(value));
|
|
|
|
// support for date strings
|
|
else if (value.toString)
|
|
date = new Date(value.toString());
|
|
|
|
if (date.toString() != 'Invalid Date')
|
|
return date;
|
|
|
|
throw new CastError('date', value, this.path);
|
|
};
|
|
|
|
/*!
|
|
* Date Query casting.
|
|
*
|
|
* @api private
|
|
*/
|
|
|
|
function handleSingle (val) {
|
|
return this.cast(val);
|
|
}
|
|
|
|
function handleArray (val) {
|
|
var self = this;
|
|
return val.map( function (m) {
|
|
return self.cast(m);
|
|
});
|
|
}
|
|
|
|
SchemaDate.prototype.$conditionalHandlers = {
|
|
'$lt': handleSingle
|
|
, '$lte': handleSingle
|
|
, '$gt': handleSingle
|
|
, '$gte': handleSingle
|
|
, '$ne': handleSingle
|
|
, '$in': handleArray
|
|
, '$nin': handleArray
|
|
, '$all': handleArray
|
|
};
|
|
|
|
|
|
/**
|
|
* Casts contents for queries.
|
|
*
|
|
* @param {String} $conditional
|
|
* @param {any} [value]
|
|
* @api private
|
|
*/
|
|
|
|
SchemaDate.prototype.castForQuery = function ($conditional, val) {
|
|
var handler;
|
|
|
|
if (2 !== arguments.length) {
|
|
return this.cast($conditional);
|
|
}
|
|
|
|
handler = this.$conditionalHandlers[$conditional];
|
|
|
|
if (!handler) {
|
|
throw new Error("Can't use " + $conditional + " with Date.");
|
|
}
|
|
|
|
return handler.call(this, val);
|
|
};
|
|
|
|
/*!
|
|
* Module exports.
|
|
*/
|
|
|
|
module.exports = SchemaDate;
|