mongorito-tcomb
Advanced tools
Comparing version 0.9.0 to 0.9.1
{ | ||
"name": "mongorito-tcomb", | ||
"version": "0.9.0", | ||
"version": "0.9.1", | ||
"description": "Bring schema validation to Mongorito thanks to tcomb", | ||
@@ -39,3 +39,3 @@ "main": "./lib/index.js", | ||
"devDependencies": { | ||
"ava": "^0.11.0", | ||
"ava": "^0.12.0", | ||
"co": "^4.6.0", | ||
@@ -42,0 +42,0 @@ "coffee-script": "^1.10.0", |
123
README.md
@@ -1,4 +0,24 @@ | ||
# mongorito-tcomb [![Build Status](https://travis-ci.org/xouabita/mongorito-tcomb.svg?branch=master)](https://travis-ci.org/xouabita/mongorito-tcomb) [![Dependency Status](https://david-dm.org/xouabita/mongorito-tcomb.svg)](https://david-dm.org/xouabita/mongorito-tcomb) [![devDependency Status](https://david-dm.org/alanshaw/david/dev-status.svg)](https://david-dm.org/alanshaw/david#info=devDependencies) [![Coverage Status](https://coveralls.io/repos/github/xouabita/mongorito-tcomb/badge.svg?branch=master)](https://coveralls.io/github/xouabita/mongorito-tcomb?branch=master) | ||
Bring schema validation to Mongorito thanks to tcomb | ||
<h1 align="center">Mongorito Tcomb</h1> | ||
<p align="center"> | ||
<a href="https://travis-ci.org/xouabita/mongorito-tcomb"> | ||
<img src="https://travis-ci.org/xouabita/mongorito-tcomb.svg?branch=master" /> | ||
</a> | ||
<a href="https://david-dm.org/xouabita/mongorito-tcomb"> | ||
<img src="https://david-dm.org/xouabita/mongorito-tcomb.svg" /> | ||
</a> | ||
<a href="https://david-dm.org/xouabita/mongorito-tcomb/"> | ||
<img src="https://david-dm.org/xouabita/mongorito-tcomb/dev-status.svg" | ||
</a> | ||
<a href="https://coveralls.io/github/xouabita/mongorito-tcomb?branch=master"> | ||
<img src="https://coveralls.io/repos/github/xouabita/mongorito-tcomb/badge.svg?branch=master" /> | ||
</a> | ||
<a href="https://codeclimate.com/github/xouabita/mongorito-tcomb"> | ||
<img src="https://codeclimate.com/github/xouabita/mongorito-tcomb/badges/gpa.svg" /> | ||
</a> | ||
</p> | ||
<h4 align="center"><i>Bring schema validation to Mongorito thanks to tcomb</i></h4> | ||
--- | ||
Install | ||
@@ -15,6 +35,6 @@ ------- | ||
import co from 'co' | ||
import t from 'tcomb' | ||
import Mongorito, {Model} from 'mongorito-tcomb' | ||
import Mongorito, {Model, t} from 'mongorito-tcomb' | ||
// 2. We define the model user | ||
// 2. Let's define some Model | ||
class User extends Model { | ||
@@ -25,3 +45,3 @@ | ||
return t.struct({ | ||
name: t.String, // name is a required String | ||
name: t.unique(t.String), // name is a required String and is unique | ||
surname: t.maybe(t.String) // surname is an optional String | ||
@@ -32,2 +52,14 @@ }); | ||
class Post extends Model { | ||
get Schema() { | ||
return t.struct({ | ||
title: t.String, | ||
content: t.String, | ||
author: t.ID(User) // Here we set the id of the author | ||
}); | ||
} | ||
} | ||
co(function *(val) { | ||
@@ -38,7 +70,11 @@ | ||
// 4. Save a valid Model | ||
var valid = new User({name: "Valid"}); | ||
// 4. Remove all users (for examples purpose) | ||
yield User.remove() | ||
// 5. Save a valid Model | ||
var valid = new User({name: 'Valid'}); | ||
yield valid.save(); | ||
// 5. Try to save an invalid Model | ||
// 6. Try to save an invalid Model | ||
var invalid = new User({name: 'Invalid', surname: 88}); | ||
@@ -51,8 +87,45 @@ try { | ||
// 6. Don't forget to disconnect Mongorito | ||
// 7. You can't create a new user with the same name | ||
var sameName = new User({name: 'Valid', surname: 'But not unique' }); | ||
try { | ||
yield sameName.save(); | ||
} catch (e) { | ||
console.log(e); // An exception is throw here | ||
} | ||
// 8. Let's now create a Post | ||
var post = new Post({ | ||
title: 'Hello', | ||
content: 'Lorem Ipsum...', | ||
author: "" + valid.get('_id') | ||
}); | ||
yield post.save(); | ||
// 9. You can't save post with invalid IDs | ||
post.set('author', 'I want to be an ID...'); | ||
try { | ||
yield post.save(); | ||
} catch (e) { | ||
console.log(e); // An exception is throw here | ||
} | ||
// 10. And you can't save post with an ID which is not an User | ||
post.set('author', '' + post.get('_id')); | ||
try { | ||
yield post.save(); | ||
} catch (e) { | ||
console.log(e); // An exception is throw here | ||
} | ||
// 11. Don't forget to disconnect Mongorito | ||
yield Mongorito.disconnect(); | ||
}); | ||
~~~ | ||
For **coffeescript**, you can see [`example.coffee`](https://github.com/xouabita/mongorito-tcomb/blob/master/example.coffee) | ||
For **coffeescript**, you can see [`examples`](https://github.com/xouabita/mongorito-tcomb/blob/master/examples/) | ||
@@ -62,19 +135,25 @@ API | ||
### `patch: (Model) -> PatchedModel` | ||
### Mixins | ||
#### `patch: (Model) -> PatchedModel` | ||
The patch function can be useful to combine different Mongorito plugins. It take a class, | ||
extend it then return the extended class. | ||
### Customs tcomb types | ||
#### `t.unique` | ||
It ensure that the type is unique in the database. | ||
**Usage:** `t.unique(T)` where T is any tcomb type | ||
#### `t.ID` | ||
It represent the ID of an element in the database. | ||
**Usage:** `t.ID(M)` where M is a Mongorito model | ||
It ensure that ID is valid and exist in the database | ||
TODOS | ||
----- | ||
- [x] Add t.ID for validating ID | ||
- [x] Add t.unique for unique index creation | ||
- [x] Add tests for t.unique | ||
- [x] More efficient indexing | ||
- [x] More efficient ID validation | ||
- [x] Add tests for t.ID | ||
- [x] Add example for t.unique | ||
- [ ] Add example for t.ID | ||
- [ ] Add docs for t.ID/t.unique | ||
- [ ] Find recursively t.ID/t.unique | ||
- [ ] More human exceptions |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
27949
17
336
154
0