rudiment
v2.2.0
Published
CRUD resource manager
Downloads
14
Readme
rudiment
A resource manager providing simplified database methods for CRUD operations.
Installation
$ npm install rudiment
Usage
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' });
// true
isAdmissible
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
.