Digital PCT265 story PCT-135: Deep equals check for replacement changes.

This commit is contained in:
Hedden, Kyle Matthew 2024-05-21 13:56:02 -04:00
parent 75104dbe4d
commit 3ed40e52be
3 changed files with 14 additions and 4 deletions

View File

@ -19,7 +19,7 @@ public extension MoleculeModelProtocol {
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 }
return moleculeName == model.moleculeName
&& backgroundColor == model.backgroundColor

View File

@ -181,3 +181,13 @@ public extension ParentModelProtocol {
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)
}
}

View File

@ -70,7 +70,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
// Top level check to return a new root molecule.
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...")
return rootMolecule
}
@ -86,7 +86,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
moleculeModels.forEach { newMolecule in
do {
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.
debugLog("deep molecule \(newMolecule) is the same as \(replacedMolecule). skipping...")
return
@ -107,7 +107,7 @@ public class ReplaceableMoleculeBehavior: PageMoleculeTransformationBehavior, Co
}
let hasReplacement = !changeList.isEmpty
changes.append(contentsOf: changeList)
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules")
debugLog("replacing \(hasReplacement ? updatedRootMolecules.count : 0) molecules for \(changes)")
return hasReplacement ? updatedRootMolecules : nil
}