Skip to content

Commit b4cf78f

Browse files
committed
fix(hooks): defer applying embedded discriminator hooks until top-level model is compiled
Re: #5706
1 parent 54d9189 commit b4cf78f

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

lib/schema/documentarray.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ var EventEmitter = require('events').EventEmitter;
1111
var MongooseDocumentArray = require('../types/documentarray');
1212
var SchemaType = require('../schematype');
1313
var Subdocument = require('../types/embedded');
14-
var applyHooks = require('../services/model/applyHooks');
1514
var discriminator = require('../services/model/discriminator');
1615
var util = require('util');
1716
var utils = require('../utils');
@@ -120,8 +119,6 @@ DocumentArray.prototype.discriminator = function(name, schema) {
120119

121120
this.casterConstructor.discriminators[name] = EmbeddedDocument;
122121

123-
applyHooks(EmbeddedDocument, schema);
124-
125122
return this.casterConstructor.discriminators[name];
126123
};
127124

lib/schema/embedded.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var $exists = require('./operators/exists');
88
var EventEmitter = require('events').EventEmitter;
99
var SchemaType = require('../schematype');
1010
var Subdocument = require('../types/subdocument');
11-
var applyHooks = require('../services/model/applyHooks');
1211
var castToNumber = require('./operators/helpers').castToNumber;
1312
var discriminator = require('../services/model/discriminator');
1413
var geospatial = require('./operators/geospatial');
@@ -255,7 +254,5 @@ Embedded.prototype.discriminator = function(name, schema) {
255254

256255
this.caster.discriminators[name] = _createConstructor(schema);
257256

258-
applyHooks(this.caster.discriminators[name], schema);
259-
260257
return this.caster.discriminators[name];
261258
};

lib/services/model/applyHooks.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,18 @@ function applyHooks(model, schema) {
2424

2525
model.$appliedHooks = true;
2626
for (i = 0; i < schema.childSchemas.length; ++i) {
27-
if (schema.childSchemas[i].model.$appliedHooks) {
27+
var childModel = schema.childSchemas[i].model;
28+
if (childModel.$appliedHooks) {
2829
continue;
2930
}
30-
applyHooks(schema.childSchemas[i].model, schema.childSchemas[i].schema);
31+
if (childModel.discriminators != null) {
32+
keys = Object.keys(childModel.discriminators);
33+
for (j = 0; j < keys.length; ++j) {
34+
applyHooks(childModel.discriminators[keys[j]],
35+
childModel.discriminators[keys[j]].schema);
36+
}
37+
}
38+
applyHooks(childModel, schema.childSchemas[i].schema);
3139
}
3240

3341
if (!q.length) {

0 commit comments

Comments
 (0)