12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- var Class = require('./Class');
- var keys = require('./keys');
- var safeGet = require('./safeGet');
- var isFn = require('./isFn');
- var isUndef = require('./isUndef');
- var isNum = require('./isNum');
- var isStr = require('./isStr');
- var isBool = require('./isBool');
- exports = Class(
- {
- className: 'Validator',
- initialize: function(options) {
- this._options = options;
- this._optKeys = keys(options);
- },
- validate: function(obj) {
- obj = obj || {};
- var options = this._options;
- var objKeys = this._optKeys;
- for (var i = 0, len = objKeys.length; i < len; i++) {
- var key = objKeys[i];
- var result = this._validateVal(
- safeGet(obj, key),
- options[key],
- key
- );
- if (result !== true) return result;
- }
- return true;
- },
- _validateVal: function(val, rules, objKey) {
- var plugins = exports.plugins;
- if (isFn(rules)) return rules(val);
- var ruleKeys = keys(rules);
- for (var i = 0, len = ruleKeys.length; i < len; i++) {
- var key = ruleKeys[i];
- var config = rules[key];
- var result = true;
- if (isFn(config)) result = config(val, objKey);
- var plugin = plugins[key];
- if (plugin) result = plugin(val, objKey, config);
- if (result !== true) return result;
- }
- return true;
- }
- },
- {
- plugins: {
- required: function(val, key, config) {
- if (config && isUndef(val)) return key + ' is required';
- return true;
- },
- number: function(val, key, config) {
- if (config && !isUndef(val) && !isNum(val))
- return key + ' should be a number';
- return true;
- },
- boolean: function(val, key, config) {
- if (config && !isUndef(val) && !isBool(val))
- return key + ' should be a boolean';
- return true;
- },
- string: function(val, key, config) {
- if (config && !isUndef(val) && !isStr(val))
- return key + ' should be a string';
- return true;
- },
- regexp: function(val, key, config) {
- if (isStr(val) && !config.test(val))
- return (
- key + ' should match given regexp ' + config.toString()
- );
- return true;
- }
- },
- addPlugin: function(name, plugin) {
- exports.plugins[name] = plugin;
- }
- }
- );
- module.exports = exports;
|