0.1.0 • Published 10 years ago

backbone-validator v0.1.0

Weekly downloads
72
License
-
Repository
github
Last release
10 years ago

backbone-validator Build Status

A super simple validator module for Backbone. It works both on the browser and nodejs.

Installing

In node:

npm install backbone-validator --save

In the browser make sure that you add the backbone-validator-min.js script after you have loaded both Underscore and Backbone. The minimised file is 2k.

Usage

var Backbone = require('Backbone');
var validator = require('validator');

var MyModel = Backbone.Model.extend({
  validate: validator.create({
    type: { equal: 'user' },
    firstname: { type: 'string', minLength: 3, maxlength: 20 },
    email: { type: 'email' }
  })
});

var model = new MyModel();
model.on('invalid', function (m, err) {
  // Validation failed
  // `err` will be a string with the error message.
});
model.set({ type: 'not user' }, { validate: true });

API

validator.create( schema )

To use this module you basically invoke validator.create() passing it a schema object. This will return a function, and we set the model's validate property to this function, so that Backbone can use when setting attribute values (ie: when model.save() is invoked).

Defining a schema

A schema object contains a property for each attribute we want to validate, the property name is the attribute name and the value is an object containing a set of rules.

In the example below we want to validate the ctime, status and message attribues in our model, so our schema will look something like this:

validator.create({
  ctime: { type: 'date' },
  status: { oneOf: [ 1, 2, 3 ] },
  message: { type: string, minLength: 5 }
});

Rules

Eache rule is declared passing it options. This options depend on each of the rules (ie: for the required rule options is just a boolean, for the oneOf its an array, for custom its a function and so on.

  • required
validator.create({
  message: { required: true }
});
  • equal
validator.create({
  type: { equal: 'user' }
});
  • regexp
validator.create({
  birthday: { regexp: /^\d{2}\/\d{2}\/\d{4}$/ }
});
  • oneOf
validator.create({
  colour: { oneOf: [ 'red', 'green', 'blue' ] }
});
  • type. Types: boolean, number, string, date, array, email, url and domain.
validator.create({
  balance: { type: 'number' }
});
  • minLength. Can be used with strings or arrays.
validator.create({
  firstname: { type: 'string', minLength: 3 }
});
  • maxLength. Can be used with strings or arrays.
validator.create({
  firstname: { type: 'string', maxLength: 20, minLength: 2 }
});

Custom validation rules

var MyModel = Backbone.Model.extend({
  validate: validator.create({
    phone: {
      custom: function (value) {
        // This function will be called with the value that needs to be
        // validated. If you want validation to fail simply return a string with
        // the error message. If nothing is returned validation for this
        // attribute is consider to have passed.
      }
    }
  })
});

TODO

  • Make error messages customisable.
  • Add browser tests.