rudiment
v2.2.0
Published
CRUD resource manager
Readme
rudiment
A resource manager providing simplified database methods for CRUD operations.
Installation
$ npm install rudimentUsage
var Rudiment = require('rudiment');var db = require('rethinkdbdash')();
var schema = require('js-schema');
var users = new Rudiment({
db: db.table('users'),
schema: schema({
username: String,
name: String,
}),
key: 'username',
index: 'uid'
});Options
db: Existing database table object to use. For rethinkdb, the suggested
module is rethinkdbdash.
schema: Optional schema function (or an array of schema functions). These may
be custom predicate functions, or functions returned by a schema library like
js-schema.
props: Optional array of whitelisted property names to keep in proposed
documents before creating or updating. If using js-schema, this option is not
needed, as the properties will be extracted from the schema.
key: Optional property name to be used as unique key.
index: Optional property name to use as an auto-index, starting at 0.
uniq: Optional array of property names to be considered unique (database ID,
key and index are automatically included).
in: Optional map function for documents being created or updated.
out: Optional map function for documents being read.
path: Optional REST path.
Methods
getSupportedDbTypes
Return an array of all supported database types.
Rudiment.getSupportedDbTypes();
// ['rethinkdb']Prototype Methods
All methods may be overridden by the constructor.
getDbType
Get the detected database type.
users.getDbType();
// 'rethinkdb'getNextIndex
If using auto-indexing (index), generate a unique numeric index
(starting at 0) to use a pseudo-key.
users.getNextIndex().then(function(index) {
// ...
});clean
Remove extraneous properties from a proposed document. This method only works if
the first defined schema is a js-schema object, or if the props option is
provided.
users.clean({
username: 'foo',
name: 'Foo',
color: 'blue' // this property is not part of the defined schema
});
// { username: 'foo', name: 'Foo' }isValid
Check if a proposed document is valid by comparing it to the defined schema(s).
users.isValid({ username: 'foo', name: 'Foo' });
// true
// `name` should be a String
users.isValid({ username: 'foo', name: 200 });
// false
// Extraneous properties are ignored here
users.isValid({ username: 'foo', name: 'Foo', color: 'green' });
// trueisAdmissible
Check if a proposed document is admissible into the database. An admissible
document should pass isValid and not have any unique properties with values
that are already present in the database.
users.isAdmissible({
username: 'foo'
name: 'Foo'
}).then(function(ok) {
// `ok` is true if admissible, false otherwise
});create
Create and insert a new document into the database.
users.create({
username: 'foo',
name: 'Foo'
}).then(function(doc) {
// `doc` is newly inserted document
});find
Get all documents from the database with matching properties.
users.find({
name: 'Foo'
}).then(function(docs) {
// `docs` is an array of matching documents
});read
Get a document from the database by database ID.
users.read('foo-db-id').then(function(doc) {
// `doc` is matching document
});readByKey
Get a document from the database by key.
users.readByKey('foo').then(function(doc) {
// `doc` is matching document
});readByIndex
Get a document from the database by auto-index.
users.readByIndex(0).then(function(doc) {
// `doc` is matching document
});readAll
Get all documents from the database.
users.readAll().then(function(docs) {
// `docs` is an array of all documents
});update
Update a document in the database by database ID.
users.update('foo-db-id', {
name: 'Dr. Foo'
}).then(function(doc) {
// `doc` is updated document
});updateByKey
Update a document in the database by key.
users.updateByKey('foo', {
name: 'Dr. Foo'
}).then(function(doc) {
// `doc` is updated document
});updateByIndex
Update a document in the database by auto-index.
users.updateByIndex(0, {
name: 'Dr. Foo'
}).then(function(doc) {
// `doc` is updated document
});delete
Delete a document from the database by database ID.
users.delete('foo-db-id').then(function() {
// document was deleted
});deleteByKey
Delete a document from the database by key.
users.deleteByKey('foo').then(function() {
// document was deleted
});deleteByIndex
Delete a document from the database by auto-index.
users.deleteByIndex(0).then(function() {
// document was deleted
});rest
Middleware REST handler for CRUD operations.
api.post('/users', function(req, res) {
users.rest(users.create(req.body), res);
});License
This software is released under the terms of the MIT license. See LICENSE.
