From 460d8b4dd9c02b5f2e133b683c230018be4e9b06 Mon Sep 17 00:00:00 2001 From: "Suresh, Kamlesh" Date: Tue, 9 Mar 2021 16:56:48 -0500 Subject: [PATCH] review --- .../ClientParameterProtocol.swift | 31 +++++-------------- .../ClientParameterRegistry.swift | 10 +++--- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift index f6895e0..a03f40d 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterProtocol.swift @@ -11,39 +11,24 @@ import Foundation public protocol ClientParameterProtocol { static var name: String { get } - init() init(_ clientParameterModel:ClientParameterModelProtocol) - var isFlatMap: Bool { get } - var clientParameterModel: ClientParameterModelProtocol? { get set } + var clientParameterModel: ClientParameterModelProtocol { get set } - func defaultErrorString() -> String func fetchClientParameters(requestParameters: [String: Any], timingOutIn timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) - /// The handler should call this method to pass the parameter back to the caller. - func returnParameters(_ paramter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) - /// Default parameter for timeout scenarios. It will use the protocol extension method bydefault. Can override to send custom values. - func defaultValue() -> AnyHashable + func valueOnTimeout() -> AnyHashable } public extension ClientParameterProtocol { - var isFlatMap: Bool { false } - - func defaultErrorString() -> String { - return "failed_to_collect" - } - - func defaultValue() -> AnyHashable { - return [Self.name: defaultErrorString()] - } - - init(_ clientParameterModel: ClientParameterModelProtocol) { - self.init() - self.clientParameterModel = clientParameterModel - } - func returnParameters(_ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) { + func valueOnTimeout() -> AnyHashable { + return [Self.name: "failed_to_collect"] + } + + /// The handler should call this method to pass the parameter back to the caller. + func returnParameters(_ isFlatMap: Bool, _ parameter: [String: AnyHashable]?, completionHandler: @escaping (AnyHashable?) -> ()) { guard let parameter = parameter else { return completionHandler(nil) } diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift index 73644f9..3044a14 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift @@ -64,7 +64,7 @@ import Foundation guard let self = self else { return } var parameterHandlerList: [ClientParameterProtocol] = [] - var returnedList = [[String: AnyHashable]](repeating: [:], count: clientParameterModel.list.count) + var returnedList = [[String: AnyHashable]?](repeating: nil, count: clientParameterModel.list.count) // Create the handler list so that same object can be used when merging. Merging needs default value in case of timeout for parameterModel in clientParameterModel.list { @@ -76,10 +76,10 @@ import Foundation var mergedParametersList: [String: AnyHashable] { var parametersList: [String: AnyHashable] = [:] for (index, item) in returnedList.enumerated() { - if item.count == 0, let defaultValue = parameterHandlerList[index].defaultValue() as? [String: AnyHashable] { - parametersList = parametersList.merging(defaultValue) { (_, new) in new } - } else { + if let item = item { parametersList = parametersList.merging(item) { (_, new) in new } + } else if let defaultValue = parameterHandlerList[index].valueOnTimeout() as? [String: AnyHashable] { + parametersList = parametersList.merging(defaultValue) { (_, new) in new } } } return parametersList @@ -104,7 +104,7 @@ import Foundation // Setup the parameter execution. for (index, parameterHandler) in parameterHandlerList.enumerated() { - group.enter() + group.enter() parameterHandler.fetchClientParameters(requestParameters: requestParameters, timingOutIn: timeout) { (receivedParameter) in // Queue the results for merge.