Merge pull request #118 from PradnyaBaviskar/lb-boot-issue-42
Use filename as default value for Model name
This commit is contained in:
commit
1b9f137062
|
@ -7,6 +7,7 @@ var ConfigLoader = require('./config-loader');
|
|||
var debug = require('debug')('loopback:boot:compiler');
|
||||
var Module = require('module');
|
||||
var _ = require('lodash');
|
||||
var _s = require('underscore.string');
|
||||
|
||||
var FILE_EXTENSION_JSON = '.json';
|
||||
|
||||
|
@ -382,6 +383,8 @@ function tryResolveAppPath(rootDir, relativePath, resolveOptions) {
|
|||
|
||||
function loadModelDefinition(rootDir, jsonFile, allFiles) {
|
||||
var definition = require(jsonFile);
|
||||
var basename = path.basename(jsonFile, path.extname(jsonFile));
|
||||
definition.name = definition.name || _s.capitalize(_s.camelize(basename));
|
||||
|
||||
// find a matching file with a supported extension like `.js` or `.coffee`
|
||||
var sourceFile = fixFileExtension(jsonFile, allFiles, true);
|
||||
|
|
|
@ -28,7 +28,8 @@
|
|||
"debug": "^2.0.0",
|
||||
"lodash": "^2.4.1",
|
||||
"semver": "^4.1.0",
|
||||
"toposort": "^0.2.10"
|
||||
"toposort": "^0.2.10",
|
||||
"underscore.string": "^3.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"browserify": "^4.1.8",
|
||||
|
|
|
@ -867,6 +867,144 @@ describe('compiler', function() {
|
|||
.to.throw(/cyclic dependency/i);
|
||||
});
|
||||
|
||||
it('uses file name as default value for model name', function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
Car: { dataSource: 'db' }
|
||||
});
|
||||
appdir.writeConfigFileSync('models/car.json', {});
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
var modelNames = instructions.models.map(getNameProperty);
|
||||
expect(modelNames).to.eql(['Car']);
|
||||
});
|
||||
|
||||
it('uses `OrderItem` as default model name for file with name `order-item`',
|
||||
function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
OrderItem: { dataSource: 'db' }
|
||||
});
|
||||
appdir.writeConfigFileSync('models/order-item.json', {});
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
var modelNames = instructions.models.map(getNameProperty);
|
||||
expect(modelNames).to.eql(['OrderItem']);
|
||||
});
|
||||
|
||||
it('uses `OrderItem` as default model name for file with name `order_item`',
|
||||
function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
OrderItem: { dataSource: 'db' }
|
||||
});
|
||||
appdir.writeConfigFileSync('models/order_item.json', {});
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
var modelNames = instructions.models.map(getNameProperty);
|
||||
expect(modelNames).to.eql(['OrderItem']);
|
||||
});
|
||||
|
||||
it('uses `OrderItem` as default model name for file with name `order item`',
|
||||
function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
OrderItem: { dataSource: 'db' }
|
||||
});
|
||||
appdir.writeConfigFileSync('models/order item.json', {});
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
var modelNames = instructions.models.map(getNameProperty);
|
||||
expect(modelNames).to.eql(['OrderItem']);
|
||||
});
|
||||
|
||||
it('overrides `default model name` by `name` in model definition',
|
||||
function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
overrideCar: { dataSource: 'db' }
|
||||
});
|
||||
appdir.writeConfigFileSync('models/car.json', { name: 'overrideCar'});
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
var modelNames = instructions.models.map(getNameProperty);
|
||||
expect(modelNames).to.eql(['overrideCar']);
|
||||
});
|
||||
|
||||
it('overwrites model with same default name', function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
'OrderItem': { dataSource: 'db' }
|
||||
});
|
||||
|
||||
appdir.writeConfigFileSync('models/order-item.json', {
|
||||
properties: {
|
||||
price: { type: 'number' }
|
||||
}
|
||||
});
|
||||
appdir.writeFileSync('models/order-item.js', '');
|
||||
|
||||
appdir.writeConfigFileSync('models/orderItem.json', {
|
||||
properties: {
|
||||
quantity: { type: 'number' }
|
||||
}
|
||||
});
|
||||
var appJS = appdir.writeFileSync('models/orderItem.js', '');
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
expect(instructions.models).to.eql([{
|
||||
name: 'OrderItem',
|
||||
config: {
|
||||
dataSource: 'db'
|
||||
},
|
||||
definition: {
|
||||
name: 'OrderItem',
|
||||
properties: {
|
||||
quantity: {type: 'number'}
|
||||
}
|
||||
},
|
||||
sourceFile: appJS
|
||||
}]);
|
||||
});
|
||||
|
||||
it('overwrites model with same name in model definition', function() {
|
||||
appdir.createConfigFilesSync({}, {}, {
|
||||
'customOrder': { dataSource: 'db' }
|
||||
});
|
||||
|
||||
appdir.writeConfigFileSync('models/order1.json', {
|
||||
name : 'customOrder',
|
||||
properties: {
|
||||
price: { type: 'number' }
|
||||
}
|
||||
});
|
||||
appdir.writeFileSync('models/order1.js', '');
|
||||
|
||||
appdir.writeConfigFileSync('models/order2.json', {
|
||||
name : 'customOrder',
|
||||
properties: {
|
||||
quantity: { type: 'number' }
|
||||
}
|
||||
});
|
||||
var appJS = appdir.writeFileSync('models/order2.js', '');
|
||||
|
||||
var instructions = boot.compile(appdir.PATH);
|
||||
|
||||
expect(instructions.models).to.eql([{
|
||||
name: 'customOrder',
|
||||
config: {
|
||||
dataSource: 'db'
|
||||
},
|
||||
definition: {
|
||||
name: 'customOrder',
|
||||
properties: {
|
||||
quantity: {type: 'number'}
|
||||
}
|
||||
},
|
||||
sourceFile: appJS
|
||||
}]);
|
||||
});
|
||||
|
||||
it('returns a new copy of JSON data', function() {
|
||||
appdir.createConfigFilesSync();
|
||||
|
||||
|
|
Loading…
Reference in New Issue