1
0
Fork 0
arangodb/js/node/node_modules/joi/lib/number.js

107 lines
2.3 KiB
JavaScript
Executable File

// Load modules
var Any = require('./any');
var Errors = require('./errors');
var Hoek = require('hoek');
// Declare internals
var internals = {};
internals.Number = function () {
Any.call(this);
this._type = 'number';
};
Hoek.inherits(internals.Number, Any);
internals.Number.prototype._base = function (value, state, options) {
var result = {
errors: null,
value: value
};
if (typeof value === 'string' &&
options.convert) {
var number = parseFloat(value);
result.value = (isNaN(number) || !isFinite(value)) ? NaN : number;
}
result.errors = (typeof result.value === 'number' && !isNaN(result.value)) ? null : Errors.create('number.base', null, state, options);
return result;
};
internals.Number.prototype.min = function (limit) {
Hoek.assert(Hoek.isInteger(limit), 'limit must be an integer');
return this._test('min', limit, function (value, state, options) {
if (value >= limit) {
return null;
}
return Errors.create('number.min', { limit: limit }, state, options);
});
};
internals.Number.prototype.max = function (limit) {
Hoek.assert(Hoek.isInteger(limit), 'limit must be an integer');
return this._test('max', limit, function (value, state, options) {
if (value <= limit) {
return null;
}
return Errors.create('number.max', { limit: limit }, state, options);
});
};
internals.Number.prototype.integer = function () {
return this._test('integer', undefined, function (value, state, options) {
return Hoek.isInteger(value) ? null : Errors.create('number.integer', null, state, options);
});
};
internals.Number.prototype.negative = function () {
return this._test('negative', undefined, function (value, state, options) {
if (value < 0) {
return null;
}
return Errors.create('number.negative', null, state, options);
});
};
internals.Number.prototype.positive = function () {
return this._test('positive', undefined, function (value, state, options) {
if (value > 0) {
return null;
}
return Errors.create('number.positive', null, state, options);
});
};
module.exports = new internals.Number();