Skip to content

Commit

Permalink
fix(discriminator): allow numeric discriminator keys for embedded dis…
Browse files Browse the repository at this point in the history
…criminators

Fix #7808
  • Loading branch information
vkarpov15 committed May 22, 2019
1 parent e91fca1 commit ec01f4f
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 5 deletions.
4 changes: 3 additions & 1 deletion lib/helpers/model/discriminator.js
Expand Up @@ -114,7 +114,9 @@ module.exports = function discriminator(model, name, schema, tiedValue, applyPlu
},
$skipDiscriminatorCheck: true
};
obj[key][schema.options.typeKey] = String;
obj[key][schema.options.typeKey] = existingPath ?
existingPath.instance :
String;
schema.add(obj);
schema.discriminatorMapping = {key: key, value: value, isRoot: false};

Expand Down
2 changes: 1 addition & 1 deletion lib/schema/documentarray.js
Expand Up @@ -419,7 +419,7 @@ function getConstructor(docArray, subdoc) {
const schema = Constructor.schema;
const discriminatorKey = schema.options.discriminatorKey;
const discriminatorValue = subdoc[discriminatorKey];
if (Constructor.discriminators && typeof discriminatorValue === 'string') {
if (Constructor.discriminators && discriminatorValue != null) {
if (Constructor.discriminators[discriminatorValue]) {
Constructor = Constructor.discriminators[discriminatorValue];
} else {
Expand Down
6 changes: 3 additions & 3 deletions lib/schema/embedded.js
Expand Up @@ -153,7 +153,7 @@ Embedded.prototype.cast = function(val, doc, init, priorVal) {
const discriminatorKey = Constructor.schema.options.discriminatorKey;
if (val != null &&
Constructor.discriminators &&
typeof val[discriminatorKey] === 'string') {
val[discriminatorKey] != null) {
if (Constructor.discriminators[val[discriminatorKey]]) {
Constructor = Constructor.discriminators[val[discriminatorKey]];
} else {
Expand Down Expand Up @@ -220,7 +220,7 @@ Embedded.prototype.castForQuery = function($conditional, val) {
const discriminatorKey = Constructor.schema.options.discriminatorKey;
if (val != null &&
Constructor.discriminators &&
typeof val[discriminatorKey] === 'string') {
val[discriminatorKey] != null) {
if (Constructor.discriminators[val[discriminatorKey]]) {
Constructor = Constructor.discriminators[val[discriminatorKey]];
} else {
Expand Down Expand Up @@ -254,7 +254,7 @@ Embedded.prototype.doValidate = function(value, fn, scope, options) {
const discriminatorKey = Constructor.schema.options.discriminatorKey;
if (value != null &&
Constructor.discriminators &&
typeof value[discriminatorKey] === 'string') {
value[discriminatorKey] != null) {
if (Constructor.discriminators[value[discriminatorKey]]) {
Constructor = Constructor.discriminators[value[discriminatorKey]];
} else {
Expand Down

0 comments on commit ec01f4f

Please sign in to comment.