muck

Expressive CRUD for [any-db](https://github.com/grncdr/node-any-db).


Keywords
crud, gusto, streams, sql, database, orm
License
MIT
Install
npm install muck@0.1.0

Documentation

Muck

Expressive CRUD for any-db.

npm install muck

Usage

The easiest way to start using Muck is to create a class with connection and model methods. Then mix in muck.mixin however you like, and:

var muck  = require('muck');
var anyDb = require('any-db');
var sql   = require('sql');

var connection = anyDb.createConnection('sqlite3://foo.db');
var fooModel   = sql.define({
    name: 'foo',
    columns: [
        {name: 'id', dataType: 'integer primary key autoincrement'},
        {name: 'name', dataType: 'varchar(50)'}
    ]
});

function Foo() {
    this.init(); // create the table if it doesn't exist
}

_.extend(Foo.prototype, muck.mixin, {
    model: function() { return fooModel },
    connection: function() { return connection }
});

var foo = new Foo();
foo.insert({name: 'bar'}).flatMap(function() {
    return foo.read();
}).toArray(function(foos) {
    console.log(foos); //⇒ [{id: 1, name:'bar'}]
});

API

Mixin

The mixin expects to be mixed in to an object of type {connection :: → Connection, model :: → Model}, where Connection is an any-db connection (or something that has a query method and returs streams or arrays) and Model is an sql definition.

Querying

run-query :: Connection → Query → Stream Row

Runs the query on the connection, returning a Highland stream of result rows. If it's a query that has no results, e.g. `

Query generators

init :: Model → Query

Generates a CREATE TABLE IF NOT EXISTS query.

create :: Model → Map ColName Value → Query

Generates an INSERT INTO ... VALUES ... query.

read-cols :: Model → [ColName] → Query

Generates a SELECT ...colnames FROM ... query.

read :: Model → Query

Generates a SELECT * FROM ... query.

find :: Model → Map ColName Value → Query

Generates a SELECT * FROM ... WHERE ... query.

update :: Model → Id → Map ColName Value → Query

Generates a UPDATE ... SET ... WHERE (id = ...) query.

destroy :: Model → Id → Query

Generates a DELETE FROM ... WHERE (id = ...) query.

Licence

MIT.