UNPKG

regard

Version:

Sugar-interface to access multiple data sources.

91 lines (67 loc) 1.75 kB
var _ = require('lodash'), AbstractManager = require('./managers/abstract'), Path = require('path'); exports = module.exports = Connector; exports.generateKey = generateKeyFromFilename; var DEFAULT_HANDLER = exports.DEFAULT_HANDLER = 'default'; function Connector(key) { if (!(this instanceof Connector)) { return new Connector(key); } this.context = {}; this.handlers = new AbstractManager(); this.key = key; this.init.apply(this, _.slice(arguments, 1)); } Connector.prototype.checkPath = function (path) { return false; }; Connector.prototype.handler = function (key, func, before, after) { if (_.isFunction(key)) { after = before; before = func; func = key; key = DEFAULT_HANDLER; } if (_.isPlainObject(func)) { after = func.after; before = func.before; func = func.process; } if (_.isPlainObject(before)) { after = before.after; before = before.before; } if (!_.isFunction(func)) { throw new Error('A process function was expected'); } var handler = { key: key, process: func, after: after, before: before }; this.handlers.add(handler); return handler; }; Connector.prototype.init = function () { _(arguments) .filter(_.isObject) .forEach(_.flow(_.identity, _.partial(_.merge, this.context))) .value(); return this; }; Connector.prototype.onCreateEndpoint = function (endpoint) { return endpoint; }; Connector.prototype.onCreateRequest = function (request) { return request; }; function generateKeyFromFilename(filename) { filename = Path.basename(filename); var dotPos = filename.lastIndexOf('.'); if (dotPos > -1) { filename = filename.substring(0, dotPos); } return filename; }