@@ -9,6 +9,7 @@ var util = require('../util');
99 * max: Number, // Maximum allowed value
1010 * min: Number, // Minimum allowed value
1111 * contains: String || Number // The value contains
12+ * list: Array // List of exact allowed values
1213 * }
1314 * }
1415 */
@@ -20,30 +21,21 @@ function isValid(data, model) {
2021
2122 // Data is different than equals
2223 if ( model . value . eq ) {
23- // Same data type and different values
24- if ( typeof ( data ) === typeof ( model . value . eq ) && data !== model . value . eq ) {
25- // If object, return util.compare. Else, return false.
26- return ( typeof data === 'object' ) ? util . equal ( data , model . value . eq ) : false ;
24+ if ( ! equals ( data , model . value . eq ) ) {
25+ return false ;
2726 }
27+ }
2828
29- // Different types: Try to convert one to other.
30- var parsed = data ;
31- var type = typeof ( model . value . eq ) ;
32- switch ( type . toLowerCase ( ) ) {
33- case 'string' :
34- parsed = String ( data ) ;
35- break ;
36- case 'number' :
37- parsed = Number ( data ) ;
38- break ;
39- case 'boolean' :
40- parsed = Boolean ( data ) ;
41- break ;
42- }
43-
44- if ( data !== model . value . eq ) {
29+ if ( model . value . list ) {
30+ if ( ! Array . isArray ( model . value . list ) ) {
4531 return false ;
4632 }
33+
34+ for ( var i = model . value . list . length - 1 ; i >= 0 ; i -- ) {
35+ if ( ! equals ( data , model . value . list [ i ] ) ) {
36+ return false ;
37+ }
38+ }
4739 }
4840
4941 // Data is higher than max
@@ -69,4 +61,33 @@ function isValid(data, model) {
6961 return true ;
7062}
7163
64+ function equals ( data , expected ) {
65+ // Same data type and different values
66+ if ( typeof ( data ) === typeof ( expected ) && data !== expected ) {
67+ // If object, return util.compare. Else, return false.
68+ return ( typeof data === 'object' ) ? util . equal ( data , expected ) : false ;
69+ }
70+
71+ // Different types: Try to convert one to other.
72+ var parsed = data ;
73+ var type = typeof ( expected ) ;
74+ switch ( type . toLowerCase ( ) ) {
75+ case 'string' :
76+ parsed = String ( data ) ;
77+ break ;
78+ case 'number' :
79+ parsed = Number ( data ) ;
80+ break ;
81+ case 'boolean' :
82+ parsed = Boolean ( data ) ;
83+ break ;
84+ }
85+
86+ if ( data !== expected ) {
87+ return false ;
88+ }
89+
90+ return true ;
91+ }
92+
7293module . exports = isValid ;
0 commit comments