2017-02-02 12:17:30 +00:00
|
|
|
import {validator} from 'vendor';
|
|
|
|
|
|
|
|
export const validators = {
|
|
|
|
presence: function(value, conf) {
|
2017-03-07 11:37:59 +00:00
|
|
|
if (validator.isEmpty(value))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Value can't be empty`);
|
|
|
|
},
|
2017-03-07 11:37:59 +00:00
|
|
|
absence: function(value, conf) {
|
|
|
|
if (!validator.isEmpty(value))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Value should be empty`);
|
|
|
|
},
|
|
|
|
length: function(value, conf) {
|
|
|
|
let options = {
|
|
|
|
min: conf.min || conf.is,
|
|
|
|
max: conf.max || conf.is
|
|
|
|
};
|
2017-03-07 11:37:59 +00:00
|
|
|
if (!validator.isLength(value, options)) {
|
2017-05-26 11:26:12 +00:00
|
|
|
if (conf.is) {
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Value should be ${conf.is} characters long`);
|
2017-05-26 11:26:12 +00:00
|
|
|
} else if (conf.min && conf.max) {
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Value should have a length between ${conf.min} and ${conf.max}`);
|
2017-05-26 11:26:12 +00:00
|
|
|
} else if (conf.min) {
|
2017-05-26 11:14:47 +00:00
|
|
|
throw new Error(`Value should have at least ${conf.min} characters`);
|
2017-05-26 11:26:12 +00:00
|
|
|
} else {
|
2017-05-26 12:39:36 +00:00
|
|
|
throw new Error(`Value should have at most ${conf.max} characters`);
|
2017-05-26 11:26:12 +00:00
|
|
|
}
|
2017-02-02 12:17:30 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
numericality: function(value, conf) {
|
2017-03-07 11:37:59 +00:00
|
|
|
if (conf.int) {
|
|
|
|
if (!validator.isInt(value))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Value should be integer`);
|
2017-03-07 11:37:59 +00:00
|
|
|
} else if (!validator.isNumeric(value))
|
|
|
|
throw new Error(`Value should be a number`);
|
2017-02-02 12:17:30 +00:00
|
|
|
},
|
|
|
|
inclusion: function(value, conf) {
|
2017-03-07 11:37:59 +00:00
|
|
|
if (!validator.isIn(value, conf.in))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Invalid value`);
|
|
|
|
},
|
|
|
|
exclusion: function(value, conf) {
|
2017-03-07 11:37:59 +00:00
|
|
|
if (validator.isIn(value, conf.in))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Invalid value`);
|
|
|
|
},
|
|
|
|
format: function(value, conf) {
|
2017-03-07 11:37:59 +00:00
|
|
|
if (!validator.matches(value, conf.with))
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Invalid value`);
|
|
|
|
},
|
|
|
|
custom: function(value, conf) {
|
|
|
|
let valid = true;
|
|
|
|
function err(kind) {
|
|
|
|
valid = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
let inst = {attr: value};
|
2017-03-07 11:37:59 +00:00
|
|
|
conf.customValidator.call(inst, err);
|
2017-02-02 12:17:30 +00:00
|
|
|
|
2017-03-07 11:37:59 +00:00
|
|
|
if (!valid)
|
2017-02-02 12:17:30 +00:00
|
|
|
throw new Error(`Invalid value`);
|
|
|
|
},
|
|
|
|
uniqueness: function() {
|
|
|
|
// TODO: Implement me
|
2017-03-07 11:37:59 +00:00
|
|
|
}
|
2017-02-02 12:17:30 +00:00
|
|
|
};
|
2017-03-07 11:37:59 +00:00
|
|
|
|
2017-03-07 12:01:24 +00:00
|
|
|
/**
|
|
|
|
* Checks if value satisfies a set of validations.
|
|
|
|
*
|
|
|
|
* @param {*} value The value
|
|
|
|
* @param {Array} validations Array with validations
|
|
|
|
*/
|
2017-03-07 11:37:59 +00:00
|
|
|
export function validateAll(value, validations) {
|
|
|
|
for (let conf of validations)
|
|
|
|
validate(value, conf);
|
|
|
|
}
|
|
|
|
|
2017-03-07 12:01:24 +00:00
|
|
|
/**
|
|
|
|
* Checks if value satisfies a validation.
|
|
|
|
*
|
|
|
|
* @param {*} value The value
|
|
|
|
* @param {Object} conf The validation configuration
|
|
|
|
*/
|
2017-03-07 11:37:59 +00:00
|
|
|
export function validate(value, conf) {
|
|
|
|
let validator = validators[conf.validation];
|
|
|
|
try {
|
|
|
|
checkNull(value, conf);
|
2017-05-26 11:14:47 +00:00
|
|
|
|
|
|
|
if (validator && value != null)
|
|
|
|
validator(value, conf);
|
2017-03-07 11:37:59 +00:00
|
|
|
} catch (e) {
|
|
|
|
let message = conf.message ? conf.message : e.message;
|
|
|
|
throw new Error(message);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-03-07 12:01:24 +00:00
|
|
|
* Checks if value satisfies a not null validation.
|
2017-03-07 11:37:59 +00:00
|
|
|
*
|
2017-03-07 12:01:24 +00:00
|
|
|
* @param {*} value The value
|
|
|
|
* @param {Object} conf The validation configuration
|
2017-03-07 11:37:59 +00:00
|
|
|
*/
|
|
|
|
export function checkNull(value, conf) {
|
2017-05-26 12:39:36 +00:00
|
|
|
if (value === '' && !conf.allowBlank) {
|
|
|
|
throw new Error(`Value can't be blank`);
|
|
|
|
} else if (value == null && !conf.allowNull)
|
2017-03-07 11:37:59 +00:00
|
|
|
throw new Error(`Value can't be null`);
|
|
|
|
}
|