regard
Version:
Sugar-interface to access multiple data sources.
91 lines (67 loc) • 1.75 kB
JavaScript
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;
}