Allows the full module name for connectors

This commit is contained in:
Raymond Feng 2014-01-09 17:03:37 -08:00
parent 61039dbf87
commit acd02bf482
2 changed files with 74 additions and 17 deletions

View File

@ -165,6 +165,47 @@ DataSource.prototype._setupConnector = function () {
}
};
/*!
* Resolve a connector by name
* @param name The connector name
* @returns {*}
* @private
*/
DataSource._resolveConnector = function(name) {
var connector = null;
var error = null;
if (name.match(/^\//)) {
// try absolute path
connector = require(name);
} else if (existsSync(__dirname + '/connectors/' + name + '.js')) {
// try built-in connector
connector = require('./connectors/' + name);
} else {
// try foreign connector
try {
connector = require(name);
} catch(e) {
try {
if(name.indexOf('loopback-connector-') === -1) {
name = 'loopback-connector-' + name;
connector = require(name);
}
} catch (e) {
// ignore
}
if(!connector) {
error = '\nWARNING: LoopBack connector "' + name
+ '" is not installed,\nso your models would not work, to fix run:\n\n npm install '
+ name, '\n';
}
}
}
return {
connector: connector,
error: error
};
};
/**
* Set up the data source
* @param {String} name The name
@ -218,24 +259,14 @@ DataSource.prototype.setup = function(name, settings) {
// The first argument might be the connector itself
connector = name;
this.name = connector.name;
}
// The connector has not been resolved
else if (name.match(/^\//)) {
// try absolute path
connector = require(name);
} else if (existsSync(__dirname + '/connectors/' + name + '.js')) {
// try built-in connector
connector = require('./connectors/' + name);
} else {
// try foreign connector
try {
if(name.indexOf('loopback-connector-') === -1) {
name = 'loopback-connector-' + name;
}
connector = require(name);
} catch (e) {
return console.log('\nWARNING: LoopBack connector "' + name + '" is not installed,\nso your models would not work, to fix run:\n\n npm install ' + name, '\n');
}
// The connector has not been resolved
var result = DataSource._resolveConnector(name);
connector = result.connector;
if(!connector) {
console.error(result.error);
return;
}
}
}

View File

@ -444,6 +444,32 @@ describe('Load models with base', function () {
});
});
describe('DataSource constructor', function() {
it('should resolve connector by path', function() {
var connector = DataSource._resolveConnector(__dirname + '/../lib/connectors/memory');
assert(connector.connector);
});
it('should resolve connector by internal name', function() {
var connector = DataSource._resolveConnector('memory');
assert(connector.connector);
});
it('should try to resolve connector by module name starts with loopback-connector-', function() {
var connector = DataSource._resolveConnector('loopback-connector-xyz');
assert(!connector.connector);
assert(connector.error.indexOf('loopback-connector-xyz') !== -1);
});
it('should try to resolve connector by short module name', function() {
var connector = DataSource._resolveConnector('xyz');
assert(!connector.connector);
assert(connector.error.indexOf('loopback-connector-xyz') !== -1);
});
it('should try to resolve connector by full module name', function() {
var connector = DataSource._resolveConnector('loopback-xyz');
assert(!connector.connector);
assert(connector.error.indexOf('loopback-connector-loopback-xyz') !== -1);
});
});
describe('Load models with relations', function () {
it('should set up relations', function (done) {
var ds = new DataSource('memory');