1.1.0 • Published 9 years ago

schema-model v1.1.0

Weekly downloads
5
License
ISC
Repository
gitlab
Last release
9 years ago

schema-model

NPM version David deps node version npm download

Javascript model backed by jsonschema validation

Usage

Example

var Model = require('schema-model');

var MyModel = Model.define({
  schema: {
    type: 'object',
    properties: {
      a: { type: 'string', required: true },
      b: { type: 'number' }
    }
  }
});

var model = new MyModel();
model
  .set('a', 'a')
  .set('c.d', 1)
  .setMany({ a: 'b', b: 'a' });

// check if model is valid
if (model.valid()) {
  // do stuff
}

// re-constructing a model
var existing = new MyModel({ a: 'a', b: 'b' });

Model Definition

Returns a model class for creating model instances and validating them

Options

  • schema: JSON Schema used for validating the model. Schema has been enriched with jsonschema-extra (https://www.npmjs.com/package/jsonschema-extra) to support additional types and attributes
  • default: Function to generate the default model, defaults to function() { return {}; }

Instance Methods

.get(property)

Return the entire model or a single property

// root property
model.get('a');

// nested property
model.get('a.a');

// entire model
model.get();

.set(property, value)

Set a single or multiple properties. Can chain multiple set commands

model
  .set('a', 1)
  .set('a.a', 'a')
  .set({ b: 2, 'c.d.e': [] });

.valid()

Returns a boolean to indicate if a model passes the schema

var MyModel = Model.define({
  schema: {
    type: 'object',
    properties: {
      a: { type: 'string', required: true },
      b: { type: 'number' }
    }
  }
});

var model = new MyModel();
model
  .set('a', 'a')
  .set('c.d', 1)
  .setMany({ a: 'b', b: 'a' });

// check if model is valid
if (model.valid()) {
  // do stuff
} else {
  // stores the current state of the model including its validation result
  console.error(this.state);
}

.toJSON()

When the model instance is JSON.stringified, it returns the raw model. Can also be used as an alternative to .get() to retrieve the entire model as JSON.

var assert = require('assert');

var MyModel = Model.define();

var model = new MyModel({ a: 1, b: { a: 2 } });

assert.deepEqual(
  JSON.parse(JSON.stringify(model)),
  { a: 1, b: { a: 2 } }
);

Changelog

v1.1.0 (22 Dec 2014)

  • Bumped dependency versions

v1.0.2 (19 Dec 2014)

  • Updated project git url

v1.0.1 (18 Dec 2014)

  • Minor documentation changes

v1.0.0 (18 Dec 2014)

  • Initial commit