Merge pull request #875 from bitmage/custom-field-settings

support custom field settings under the connector's namespace
This commit is contained in:
Raymond Feng 2016-03-28 09:21:27 -07:00
commit 41ad561f11
3 changed files with 54 additions and 7 deletions

View File

@ -1343,8 +1343,6 @@ DataSource.prototype.discoverSchemas = function (modelName, options, cb) {
};
columns.forEach(function (item) {
var i = item;
var propName = nameMapper('column', item.columnName);
schema.properties[propName] = {
type: item.type,
@ -1358,14 +1356,20 @@ DataSource.prototype.discoverSchemas = function (modelName, options, cb) {
if (pks[item.columnName]) {
schema.properties[propName].id = pks[item.columnName];
}
schema.properties[propName][dbType] = {
columnName: i.columnName,
dataType: i.dataType,
dataLength: i.dataLength,
var dbSpecific = schema.properties[propName][dbType] = {
columnName: item.columnName,
dataType: item.dataType,
dataLength: item.dataLength,
dataPrecision: item.dataPrecision,
dataScale: item.dataScale,
nullable: i.nullable
nullable: item.nullable
};
// merge connector-specific properties
if (item[dbType]) {
for (var k in item[dbType]) {
dbSpecific[k] = item[dbType][k];
}
}
});
// Add current modelName to the visited tables

View File

@ -602,3 +602,20 @@ describe('discoverExportedForeignKeys', function(){
});
});
});
describe('Mock connector', function() {
mockConnectors = require('./mock-connectors');
describe('customFieldSettings', function() {
ds = new DataSource(mockConnectors.customFieldSettings);
it('should be present in discoverSchemas', function(done) {
ds.discoverSchemas('person', function(err, schemas) {
should.not.exist(err);
schemas.should.be.an.Object;
schemas['public.person'].properties.name
.custom.storage.should.equal('quantum');
done();
});
});
});
});

26
test/mock-connectors.js Normal file
View File

@ -0,0 +1,26 @@
module.exports = {
// connector which uses custom field settings
customFieldSettings: {
initialize: function(ds, done) {
ds.connector = {
name: 'custom',
discoverModelProperties: function(resource, options, done) {
done(null, [
{
owner: 'public',
columnName: 'name',
type: 'String',
required: false,
// custom properties listed under a key matching the connector name
custom: {storage: 'quantum'}
}
]);
}
};
ds.connector.dataSource = ds;
}
}
};