From 20c5e29739e87fa43236c15f67cdb57ebcbb5775 Mon Sep 17 00:00:00 2001 From: Stefan Penner Date: Thu, 16 Feb 2017 14:08:19 -0800 Subject: [PATCH] =?UTF-8?q?Don=E2=80=99t=20redefine=20findPossibleInverses?= =?UTF-8?q?=20for=20each=20=5FfindInverseFor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addon/-private/system/model/model.js | 61 ++++++++++++++-------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/addon/-private/system/model/model.js b/addon/-private/system/model/model.js index 0b10dcd856a..d066ba0620e 100644 --- a/addon/-private/system/model/model.js +++ b/addon/-private/system/model/model.js @@ -21,6 +21,35 @@ const { @module ember-data */ + +function findPossibleInverses(type, inverseType, name, relationshipsSoFar) { + let possibleRelationships = relationshipsSoFar || []; + + let relationshipMap = get(inverseType, 'relationships'); + if (!relationshipMap) { return possibleRelationships; } + + let relationships = relationshipMap.get(type.modelName).filter(relationship => { + let optionsForRelationship = inverseType.metaForProperty(relationship.name).options; + + if (!optionsForRelationship.inverse) { + return true; + } + + return name === optionsForRelationship.inverse; + }); + + if (relationships) { + possibleRelationships.push.apply(possibleRelationships, relationships); + } + + //Recurse to support polymorphism + if (type.superclass) { + findPossibleInverses(type.superclass, inverseType, name, possibleRelationships); + } + + return possibleRelationships; +} + function intersection (array1, array2) { let result = []; array1.forEach((element) => { @@ -1320,7 +1349,7 @@ Model.reopenClass({ }); } - let possibleRelationships = findPossibleInverses(this, inverseType); + let possibleRelationships = findPossibleInverses(this, inverseType, name); if (possibleRelationships.length === 0) { return null; } @@ -1345,36 +1374,6 @@ Model.reopenClass({ inverseKind = possibleRelationships[0].kind; } - function findPossibleInverses(type, inverseType, relationshipsSoFar) { - let possibleRelationships = relationshipsSoFar || []; - - let relationshipMap = get(inverseType, 'relationships'); - if (!relationshipMap) { return possibleRelationships; } - - let relationships = relationshipMap.get(type.modelName); - - relationships = relationships.filter((relationship) => { - let optionsForRelationship = inverseType.metaForProperty(relationship.name).options; - - if (!optionsForRelationship.inverse) { - return true; - } - - return name === optionsForRelationship.inverse; - }); - - if (relationships) { - possibleRelationships.push.apply(possibleRelationships, relationships); - } - - //Recurse to support polymorphism - if (type.superclass) { - findPossibleInverses(type.superclass, inverseType, possibleRelationships); - } - - return possibleRelationships; - } - return { type: inverseType, name: inverseName,