Digital PCT265 story PCT-135: Deep equals check for replacement changes.
This commit is contained in:
parent
75104dbe4d
commit
3ed40e52be
@ -19,7 +19,7 @@ public extension MoleculeModelProtocol {
|
|||||||
|
|
||||||
static var categoryCodingKey: String { "moleculeName" }
|
static var categoryCodingKey: String { "moleculeName" }
|
||||||
|
|
||||||
func isEqual(to model: ModelProtocol) -> Bool {
|
func isEqual(to model: ModelComparisonProtocol) -> Bool {
|
||||||
guard let model = model as? Self else { return false }
|
guard let model = model as? Self else { return false }
|
||||||
return moleculeName == model.moleculeName
|
return moleculeName == model.moleculeName
|
||||||
&& backgroundColor == model.backgroundColor
|
&& backgroundColor == model.backgroundColor
|
||||||
|
|||||||
@ -181,3 +181,13 @@ public extension ParentModelProtocol {
|
|||||||
return allDiffs
|
return allDiffs
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public extension ModelComparisonProtocol where Self: MoleculeModelProtocol {
|
||||||
|
|
||||||
|
func deepEquals(to model: ModelProtocol) -> Bool {
|
||||||
|
if let self = self as? ParentModelProtocol {
|
||||||
|
return self.deepEquals(to: model)
|
||||||
|
}
|
||||||
|
return isEqual(to: model)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -70,7 +70,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
|||||||
|
|
||||||
// Top level check to return a new root molecule.
|
// Top level check to return a new root molecule.
|
||||||
if let updatedMolecule = moleculeModels.first(where: { rootMolecule.id == $0.id }) {
|
if let updatedMolecule = moleculeModels.first(where: { rootMolecule.id == $0.id }) {
|
||||||
guard !updatedMolecule.isEqual(to: rootMolecule) else {
|
guard !updatedMolecule.deepEquals(to: rootMolecule) else {
|
||||||
debugLog("top molecule \(updatedMolecule) is the same as \(rootMolecule). skipping...")
|
debugLog("top molecule \(updatedMolecule) is the same as \(rootMolecule). skipping...")
|
||||||
return rootMolecule
|
return rootMolecule
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
|||||||
moleculeModels.forEach { newMolecule in
|
moleculeModels.forEach { newMolecule in
|
||||||
do {
|
do {
|
||||||
if let replacedMolecule = try parentMolecule.replaceChildMolecule(with: newMolecule) {
|
if let replacedMolecule = try parentMolecule.replaceChildMolecule(with: newMolecule) {
|
||||||
guard !replacedMolecule.isEqual(to: newMolecule) else {
|
guard !replacedMolecule.deepEquals(to: newMolecule) else {
|
||||||
// Note: Slight risk here of replacing the something in the original tree and misreporting that is it not replaced based on equality.
|
// Note: Slight risk here of replacing the something in the original tree and misreporting that is it not replaced based on equality.
|
||||||
debugLog("deep molecule \(newMolecule) is the same as \(replacedMolecule). skipping...")
|
debugLog("deep molecule \(newMolecule) is the same as \(replacedMolecule). skipping...")
|
||||||
return
|
return
|
||||||
@ -107,7 +107,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
|
|||||||
}
|
}
|
||||||
let hasReplacement = !changeList.isEmpty
|
let hasReplacement = !changeList.isEmpty
|
||||||
changes.append(contentsOf: changeList)
|
changes.append(contentsOf: changeList)
|
||||||
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules")
|
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules for \(changes)")
|
||||||
return hasReplacement ? updatedRootMolecules : nil
|
return hasReplacement ? updatedRootMolecules : nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user