Digital PCT265 story PCT-135: Code review comments, cleanups and isEquals expansion.

This commit is contained in:
Hedden, Kyle Matthew 2024-05-13 21:22:57 -04:00
parent 20d4d323e0
commit 009bb01e1b
14 changed files with 119 additions and 6 deletions

View File

@ -25,4 +25,12 @@ public struct ActionBackModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
// Default
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return model.actionType == actionType
&& model.extraParameters == extraParameters
&& model.analyticsData == analyticsData
}
} }

View File

@ -28,4 +28,11 @@ public struct ActionCallModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
&& callNumber == model.callNumber
}
} }

View File

@ -25,4 +25,12 @@ public struct ActionCancelModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
// Default
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return model.actionType == actionType
&& model.extraParameters == extraParameters
&& model.analyticsData == analyticsData
}
} }

View File

@ -42,4 +42,14 @@ public struct ActionContactModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
&& phoneNumber == model.phoneNumber
&& firstName == model.firstName
&& lastName == model.lastName
&& approach == model.approach
}
} }

View File

@ -7,6 +7,7 @@
// //
public struct ActionNoopModel: ActionModelProtocol { public struct ActionNoopModel: ActionModelProtocol {
//-------------------------------------------------- //--------------------------------------------------
// MARK: - Properties // MARK: - Properties
//-------------------------------------------------- //--------------------------------------------------
@ -24,4 +25,12 @@ public struct ActionNoopModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
// Default
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return model.actionType == actionType
&& model.extraParameters == extraParameters
&& model.analyticsData == analyticsData
}
} }

View File

@ -30,4 +30,13 @@ public struct ActionOpenSMSModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
// Default
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return model.extraParameters == extraParameters
&& model.analyticsData == analyticsData
&& model.phoneNumber == phoneNumber
&& model.message == message
}
} }

View File

@ -60,4 +60,13 @@ open class ActionOpenUrlModel: ActionModelProtocol {
try container.encodeIfPresent(extraParameters, forKey: .extraParameters) try container.encodeIfPresent(extraParameters, forKey: .extraParameters)
try container.encodeIfPresent(analyticsData, forKey: .analyticsData) try container.encodeIfPresent(analyticsData, forKey: .analyticsData)
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
&& browserUrl == model.browserUrl
&& appURL == model.appURL
&& appURLOptions == model.appURLOptions
}
} }

View File

@ -25,4 +25,12 @@ public struct ActionPreviousSubmitModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
// Default
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return model.actionType == actionType
&& model.extraParameters == extraParameters
&& model.analyticsData == analyticsData
}
} }

View File

@ -32,4 +32,11 @@ public struct ActionRestartModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
&& requestURL == model.requestURL
}
} }

View File

@ -25,4 +25,10 @@ public struct ActionSettingModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
}
} }

View File

@ -6,7 +6,7 @@
// Copyright © 2020 myverizon. All rights reserved. // Copyright © 2020 myverizon. All rights reserved.
// //
public struct ActionShareItemModel: Codable { public struct ActionShareItemModel: Codable, Equatable {
public enum SharedType: String, Codable { public enum SharedType: String, Codable {
case text case text
@ -14,14 +14,14 @@ public struct ActionShareItemModel: Codable {
} }
public var type: SharedType public var type: SharedType
public var value: Any public var value: AnyHashable // Common Equatable type between String and URL.
private enum CodingKeys: String, CodingKey { private enum CodingKeys: String, CodingKey {
case type case type
case value case value
} }
public init(type: SharedType, value: Any) { public init(type: SharedType, value: AnyHashable) {
self.type = type self.type = type
self.value = value self.value = value
} }
@ -47,6 +47,11 @@ public struct ActionShareItemModel: Codable {
try container.encode(value as! URL, forKey: .value) try container.encode(value as! URL, forKey: .value)
} }
} }
public static func == (lhs: ActionShareItemModel, rhs: ActionShareItemModel) -> Bool {
return lhs.type == rhs.type
&& lhs.value == rhs.value
}
} }
public struct ActionShareModel: ActionModelProtocol { public struct ActionShareModel: ActionModelProtocol {
@ -101,7 +106,7 @@ public struct ActionShareModel: ActionModelProtocol {
private init(deprecatedFrom decoder: Decoder) throws { private init(deprecatedFrom decoder: Decoder) throws {
let typeContainer = try decoder.container(keyedBy: DeprecatedCodingKeys.self) let typeContainer = try decoder.container(keyedBy: DeprecatedCodingKeys.self)
let type = try typeContainer.decode(ActionShareItemModel.SharedType.self, forKey: .sharedType) let type = try typeContainer.decode(ActionShareItemModel.SharedType.self, forKey: .sharedType)
var value: Any var value: AnyHashable
switch type { switch type {
case .url: case .url:
value = try typeContainer.decode(URL.self, forKey: .sharedText) value = try typeContainer.decode(URL.self, forKey: .sharedText)
@ -116,4 +121,11 @@ public struct ActionShareModel: ActionModelProtocol {
try container.encode(actionType, forKey: .actionType) try container.encode(actionType, forKey: .actionType)
try container.encode(items, forKey: .items) try container.encode(items, forKey: .items)
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
&& items == model.items
}
} }

View File

@ -9,7 +9,8 @@
import Foundation import Foundation
/// A model for UIApplication.OpenExternalURLOptionsKey /// A model for UIApplication.OpenExternalURLOptionsKey
open class OpenUrlOptionsModel: Codable { open class OpenUrlOptionsModel: Codable, Equatable {
public var options: [UIApplication.OpenExternalURLOptionsKey: Any] public var options: [UIApplication.OpenExternalURLOptionsKey: Any]
//-------------------------------------------------- //--------------------------------------------------
@ -42,4 +43,16 @@ open class OpenUrlOptionsModel: Codable {
try container.encode(universalLinksValue, forKey: .universalLinksOnly) try container.encode(universalLinksValue, forKey: .universalLinksOnly)
} }
} }
public static func == (lhs: OpenUrlOptionsModel, rhs: OpenUrlOptionsModel) -> Bool {
return lhs.options.allSatisfy { pair in
switch(pair.key) {
case .universalLinksOnly:
return rhs.options[pair.key] as? Bool == pair.value as? Bool
default:
return true
}
}
}
} }

View File

@ -38,7 +38,7 @@ public extension ActionModelProtocol {
return actionType return actionType
} }
func isEqual(to model: any ModelProtocol) -> Bool { func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false } guard let model = model as? Self else { return false }
return model.actionType == actionType return model.actionType == actionType
&& model.extraParameters == extraParameters && model.extraParameters == extraParameters

View File

@ -29,4 +29,11 @@ public class ActionRunJavaScriptModel: ActionModelProtocol {
self.extraParameters = extraParameters self.extraParameters = extraParameters
self.analyticsData = analyticsData self.analyticsData = analyticsData
} }
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
guard let model = model as? Self else { return false }
return jsCallback == model.jsCallback
&& extraParameters == model.extraParameters
&& analyticsData == model.analyticsData
}
} }