diff --git a/app.js b/app.js index 56288559..83040222 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,8 @@ var boot = require('loopback-boot'); var started = new Date(); var env = app.get('env'); +app.set('legacyExplorer', false); + // required to support base models app.dataSource('db', { connector: loopback.Memory, diff --git a/models/model-definition.js b/models/model-definition.js index f1ece670..f887d981 100644 --- a/models/model-definition.js +++ b/models/model-definition.js @@ -22,7 +22,7 @@ var ModelDefinition = app.models.ModelDefinition; /** * - `name` is required and must be unique per `Facet` - * + * * @header Property Validation */ @@ -140,8 +140,10 @@ function cleanRelatedData(relatedData, relation) { } } -ModelDefinition.afterCreate = function(next) { - var def = this; +ModelDefinition.observe("after save", function(ctx, next) { + if (!ctx.isNewInstance) return next(); + + var def = ctx.instance; var scriptPath = def.getScriptPath(); fs.exists(scriptPath, function(exists) { @@ -151,7 +153,7 @@ ModelDefinition.afterCreate = function(next) { createScript(def, scriptPath, next); } }); -} +}); ModelDefinition.prototype.getClassName = function() { if(!this.name) return null; diff --git a/models/workspace-entity.js b/models/workspace-entity.js index 8fb52460..9ac2c378 100644 --- a/models/workspace-entity.js +++ b/models/workspace-entity.js @@ -41,7 +41,7 @@ WorkspaceEntity.getUniqueIdParts = function(data) { return []; } } - + if(name) parts.push(name); return parts; @@ -162,10 +162,10 @@ WorkspaceEntity.getDataFromConfig = function(config) { // Automatically inject parent model's facetName when creating a new object // We have to perform this task before the validations are executed, since // the `facetName` is a required property -WorkspaceEntity.beforeValidate = function injectFacetName(next) { - var Entity = this.constructor; +WorkspaceEntity.observe('before save', function injectFacetName(ctx, next) { + var Entity = ctx.Model; var properties = Entity.definition.properties; - var data = this.toObject(); + var data = ctx.instance ? ctx.instance.toObject() : ctx.data; if (!('facetName' in properties && 'modelId' in properties && @@ -175,17 +175,17 @@ WorkspaceEntity.beforeValidate = function injectFacetName(next) { Entity.app.models.ModelDefinition.findById(data.modelId, function(err, model) { if (model && model.facetName) { - if (this.facetName && this.facetName !== model.facetName) { + if (data.facetName && data.facetName !== model.facetName) { console.warn( 'Warning: fixed %s[%s].facetName from %j to %j' + ' to match the parent', Entity.modelName, - this.id, - this.facetName, + data.id, + data.facetName, model.facetName); } - this.facetName = model.facetName; + (ctx.instance || ctx.data).facetName = model.facetName; } next(); - }.bind(this)); -}; + }); +}); diff --git a/package.json b/package.json index bc525092..672b5f5f 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "lodash": "~2.4.1", "loopback": "^2.0.0", "loopback-boot": "^1.0.0", - "loopback-datasource-juggler": "^2.6.1", + "loopback-datasource-juggler": "^2.22.0", "method-override": "^2.1.1", "morgan": "^1.2.0", "ncp": "^2.0.0", diff --git a/test/model-definition.js b/test/model-definition.js index f84e0e7b..67491182 100644 --- a/test/model-definition.js +++ b/test/model-definition.js @@ -162,6 +162,7 @@ describe('ModelDefinition', function() { it('includes `name` property', function(done) { new TestDataBuilder() .define('model', ModelDefinition, { + facetName: 'server', name: 'test-model' }) .buildTo(this, function(err) { @@ -198,6 +199,7 @@ describe('ModelDefinition', function() { it('includes all custom properties', function(done) { new TestDataBuilder() .define('model', ModelDefinition, { + facetName: 'server', name: 'test-model', custom: 'custom' })