Merge pull request #1371 from strongloop/exclude_prop
Handle excludeBaseProperties
This commit is contained in:
commit
c41487a1d1
|
@ -256,8 +256,18 @@ ModelBuilder.prototype.define = function defineClass(className, properties, sett
|
|||
ModelClass.setter = {};
|
||||
|
||||
for (var p in properties) {
|
||||
// Remove properties that reverted by the subclass
|
||||
if (properties[p] === null || properties[p] === false) {
|
||||
// e.g excludePropertyList = ['id'] - base properties listed in excludePropertyList will be excluded from the model.
|
||||
// excludeBaseProperties is introduced in SOAP model generation only for now and below logic
|
||||
// handles excludeBaseProperties. Generated SOAP model has base as 'Model' which means 'id' property gets added
|
||||
// automatically and 'id' property shouldn't be there for SOAP models. idInjection = false will not work
|
||||
// for SOAP generator case, since base 'Model' has already id property. 'id: false' at the property level will not
|
||||
// work either for SOAP generator case since generators use ModelDefinition.create to create property in the model
|
||||
// dynamically, that execution path has strict validation where doesn't accept 'id: false' in a property.
|
||||
// See https://github.com/strongloop/loopback-workspace/issues/486 for some more details.
|
||||
var excludePropertyList = settings['excludeBaseProperties'];
|
||||
// Remove properties that reverted by the subclass of the property from excludePropertyList
|
||||
if (properties[p] === null || properties[p] === false ||
|
||||
(excludePropertyList != null && excludePropertyList.indexOf(p) != -1)) {
|
||||
// Hide the base property
|
||||
delete properties[p];
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
// Copyright IBM Corp. 2013,2016. All Rights Reserved.
|
||||
// Node module: loopback-datasource-juggler
|
||||
// This file is licensed under the MIT License.
|
||||
// License text available at https://opensource.org/licenses/MIT
|
||||
|
||||
// This test written in mocha+should.js
|
||||
'use strict';
|
||||
var should = require('./init.js');
|
||||
var assert = require('assert');
|
||||
|
||||
var jdb = require('../');
|
||||
var ModelBuilder = jdb.ModelBuilder;
|
||||
|
||||
describe('exclude properties ', function() {
|
||||
it('from base model', function(done) {
|
||||
var ds = new ModelBuilder();
|
||||
// create a base model User which has name and password properties. id property gets
|
||||
// internally created for the User Model
|
||||
var User = ds.define('User', {name: String, password: String});
|
||||
var properties = User.definition.properties;
|
||||
// User should have id, name & password properties
|
||||
assert(('id' in properties) && ('password' in properties) && ('name' in properties),
|
||||
'User should have id, name & password properties');
|
||||
// Create sub model Customer with vip as property. id property gets automatically created here as well.
|
||||
// Customer will inherit name, password and id from base User model.
|
||||
// With excludeBaseProperties, 'password' and 'id' gets excluded from base User model
|
||||
// With idInjection: false - id property of sub Model Customer gets excluded. At the end
|
||||
// User will have these 2 properties: name (inherited from User model) and vip (from customer Model).
|
||||
var Customer = User.extend('Customer', {vip: {type: String}},
|
||||
{idInjection: false, excludeBaseProperties: ['password', 'id']});
|
||||
// Customer should have these properties: name(from UserModel) & vip
|
||||
properties = Customer.definition.properties;
|
||||
assert(('name' in properties) && ('vip' in properties),
|
||||
'Customer should have name and vip properties');
|
||||
// id or password properties should not be found in the properties list
|
||||
assert(!(('id' in properties) || ('password' in properties)),
|
||||
'Customer should not have id or password properties');
|
||||
done();
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue