Credible is a library for validating objects in node.js or the browser. While it provides several validators out of the box, credible is very unopinionated; mostly, credible simply provides a framework for object validation.
Credible has one dependency: An A+ promise library, i.e. bluebird or when.js.
$ npm install credible --save
Node takes care of the dependency automatically.
<script src="/bluebird.js"></script>
<script src="/credible.min.js"></script>
By default, Credible uses bluebird; to use a different implementation, set Credible.Promise
to the correct library.
var rules = {
name: {
presence: true
},
email: {
email: true
}
}
var obj = {
name: 'Noah Portes Chaikin',
email: 'noah.porteschaikin@carrotcreative.com'
}
var credible = new Credible(rules)
.run(obj)
.catch(function (errors) {
console.log(errors.toJSON());
})
See examples.
Every method in a Credible
instance returns the instance except credible.run()
, which returns a promise.
The main Credible
constructor optionally accepts the same arguments as credible.rule()
(see below).
Used to set new rules. credible.rule()
is a variadic function; it accepts any of the following sets of arguments:
credible
.rule(properties, validator, options)
.rule(properties, { validator1: options, validator2: options })
.rule(validator, options)
validator
is either an available validator or a function. To use an available validator, simply pass the validator's name as a string or an object key:
credible
.rule('name', 'presence', true)
.rule('name', { length: { greaterThan: 5 } })
.rule(['firstName', 'lastName'], { length: { greaterThan: 5 } })
.rule({ name: { presence: true }, email: { email: { if: function (obj) { return obj.email; } } } })
On validation, a validator function is passed the object, the property key (if provided), and options. Validator functions can return promises for asynchronous validation. This is an example validator:
var emailValidator = function (object, property, options) {
if ( /^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,6}$/i.test(object[property])) {
throw property + ' is an invalid e-mail address';
}
}
Validators can be sent any number of settings in the options
object; the following options are made available to every validator and are handled by the credible
object:
Key | Description |
---|---|
if: fn |
Only validate if fn returns true . fn is a function; the object being validated is passed to fn as an argument. |
unless: fn |
Only validate if fn returns false . fn is a function; the object being validated is passed to fn as an argument. |
invalid: fn |
fn is a function to handle a failed validation; the object being validated is passed to fn as an argument. |
Only run validator if fn
(a function) returns true
. fn
is passed the object being validated. Optionally, passing properties
will only execute the test on validators executed on the specified properties.
credible
.if(function (object) {
return object.foo == 'bar';
});
credible
.if('name', function (object) {
return object.foo == 'bar';
});
credible
.if(['firstName', 'lastName'], function (object) {
return object.foo == 'bar';
});
Only run validator if fn
(a function) returns false
. fn
is passed the object being validated. Optionally, passing properties
will only execute the test on validators executed on the specified properties.
credible
.unless(function (object) {
return object.foo == 'bar';
});
credible
.unless('name', function (object) {
return object.foo == 'bar';
});
credible
.unless(['firstName', 'lastName'], function (object) {
return object.foo == 'bar';
});
Pass fn
, a function, for handling a failed validation. fn
is passed the object being validated. Optionally, passing properties
will only execute the function for failed validations executed on the specified properties.
credible
.invalid(function (object) {
throw 'This object is invalid.';
});
credible
.invalid('name', function (object) {
throw 'This name is invalid.';
});
credible
.invalid(['firstName', 'lastName'], function (object) {
throw 'This name is invalid.';
});
Run validations on object
; returns a promise.
credible
.run(obj)
.then(function () {
console.log('It\'s valid!');
})
.catch(function (errors) {
console.log(errors.toJSON());
})
Property must contain only letters.
Property must contain only letters and numbers.
Property must contain only letters, numbers and dashes.
Property must contain only letters, numbers and underscores.
Property must be an array.
Property must be a boolean (true
or false
only).
Property must contain the string specified in the second argument.
Property must be a date (Date
object).
Property must be a valid e-mail address.
Property must exist (not be undefined
).
Property must be a function.
Property must be in specified array.
credible
.rule( { state: { in: ['approved', 'pending'] } } );
Property must be an integer.
Property must be a valid JSON string.
Property must have a length matching specifications set in options
.
Key | Description |
---|---|
greaterThan: number |
Property must have a length greater than number |
lessThan: number |
Property must have a length less than number |
greaterThanOrEqualTo: number |
Property must have a length greater than or equal to number |
lessThanOrEqualTo: number |
Property must have a length less than or equal to number |
equalTo: number |
Property must have a length equal to number |
Property must contain all lowercase letters.
Property must be a valid credit card number.
Property must match RegExp
object specified in second argument.
Property must be a positive number.
Property must be a positive number greater than zero.
Property must not be a number (isNaN(value)
returns false
).
Property must be a number.
Property must be defined and not empty.
Property must be an object.
Compare property to a number or another property set in options
.
Key | Description |
---|---|
greaterThan: numberOrProperty |
Property must have a length greater than numberOrProperty |
lessThan: numberOrProperty |
Property must have a length less than numberOrProperty |
greaterThanOrEqualTo: numberOrProperty |
Property must have a length greater than or equal to numberOrProperty |
lessThanOrEqualTo: numberOrProperty |
Property must have a length less than or equal to numberOrProperty |
equalTo: numberOrProperty |
Property must have a length equal to numberOrProperty |
Property must be a regular expression (RegExp
object).
Property must be a string.
Property must contain all uppercase letters.
Property must be a valid URL.
- Details on the license can be found here
- Details on running tests and contributing can be found here