brest-maria
Version:
MariaDB layer with some bREST API binding
61 lines (55 loc) • 1.68 kB
JavaScript
var DB = require('./lib/db');
var _ = require('lodash');
/**
*
* @param tableName
* @returns Table
* @constructor
*/
var BrestMaria = function(tableName)
{
if (tableName) return BrestMaria.db.table(tableName);
else return BrestMaria.db.table;
};
/**
* Return closure for direct method call
* @param tableName
* @param methodName
* @returns {Function}
*/
var tableMethod = function(tableName, methodName){
return function(){
if (BrestMaria.db.table && BrestMaria.db.table(tableName) && BrestMaria.db.table(tableName)[methodName]){
BrestMaria.db.table(tableName)[methodName].apply(BrestMaria.db.table(tableName), arguments);
} else {
throw "Failed to call method \""+methodName+"\" for table \""+tableName+"\"";
}
}
};
/**
* Augment controller with
* @param {String} tableName
* @param {Object} controller
* @returns {Object}
*/
BrestMaria.controller = function(tableName, controller){
var defaults = {};
['row','list','insert','update','del'].forEach(function(m){defaults[m] = tableMethod(tableName, m)});
return _.defaults(controller, defaults);
};
/**
* Init BrestMaria with brest instance
* @param {Brest} brest
* @param {Function} callback
*/
BrestMaria.init = function(brest, callback) {
BrestMaria.db = new DB(brest.getSetting('maria'));
brest.db = BrestMaria.db;
BrestMaria.db.on('error', function(err) {callback(err)});
BrestMaria.db.on('ready', callback);
};
BrestMaria.filters = {
limit: "Limit the request <%from%>,<%count%>",
order: "Sort by the fields"
};
module.exports = BrestMaria;