-
Notifications
You must be signed in to change notification settings - Fork 1
/
mongoose-validate-all.js
69 lines (61 loc) · 1.6 KB
/
mongoose-validate-all.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
* Initialize a new group of validation functions
* for a schema property.
*
* @param validatorsArray
*/
function ValidationGroup(validatorsArray) {
var validationErrors;
/*
* Iterates through the supplied validators,
* appending error messages to validationErrors
* if the validator returns false.
*
* @param value
*/
function validator(value) {
validationErrors = [];
var isValid = true;
validatorsArray.forEach(function(validator) {
if(!validator.validator(value)) {
// Append message
validationErrors.push(validator.msg);
isValid = false;
}
});
return isValid;
}
/*
* Simple object to retrieve the list of
* validation errors.
*
* Mongoose expects a string message,
* but to return a dynamic error message,
* we need to pass a function that retrieves it.
*/
function ValidationErrorRetriever() {}
/*
* Injects the validation errors when Mongoose
* first calls Replace on the error message.
* Retains Mongoose functionality.
*
* @param regexp
* @param newSubStr
*/
ValidationErrorRetriever.prototype.replace = function(regexp, newSubStr) {
for(var i = 0; i < validationErrors.length; i++) {
validationErrors[i] = validationErrors[i].replace(regexp, newSubStr);
}
return JSON.stringify(validationErrors);
};
/*
* For a single validation method, Mongoose expects
* an array containing the validation method and
* error message respectively.
*/
return [
validator,
new ValidationErrorRetriever()
];
}
module.exports = ValidationGroup;