diff --git a/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift b/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift index 928c45d..85fd4bb 100644 --- a/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift +++ b/MVMCore/MVMCore/ActionHandling/ActionHandler+ClientParameters.swift @@ -10,7 +10,7 @@ import Foundation public extension MVMCoreActionHandler { - /// Iterates threw the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters. + /// Iterates through the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters. @objc func setClientParameter(with actionMap: [String: Any]?, completionHandler: @escaping ([String : Any]?) -> ()) { guard let actionMapWithClientParameters = actionMap, let clientParameters = actionMapWithClientParameters.optionalDictionaryForKey("clientParameters") else { @@ -31,7 +31,7 @@ public extension MVMCoreActionHandler { } do { - try ClientParameterRegistry.injectParameters(with: clientParameters) { (clientParams) in + try ClientParameterRegistry.getParameters(with: clientParameters) { (clientParams) in guard let clientParams = clientParams else { stopLoadingOverlay() completionHandler(actionMapWithClientParameters) diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterModel.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterModel.swift index 8686d71..37940d7 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterModel.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterModel.swift @@ -25,7 +25,7 @@ public class ClientParameterModel: Codable { public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) - try container.encode(timeout, forKey: .timeout) + try container.encodeIfPresent(timeout, forKey: .timeout) try container.encodeModels(list, forKey: .list) } } diff --git a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift index 273c6a1..9c4200b 100644 --- a/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift +++ b/MVMCore/MVMCore/Models/ActionType/Client Parameters/ClientParameterRegistry.swift @@ -33,7 +33,21 @@ import Foundation return try JSONDecoder().decode(ClientParameterModel.self, from: data) } - static func injectParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws { + /// Sample clientParameters + ///{ + /// "timeout": 30, + /// "list": [ + /// { + /// "type": "currentLocation", + /// "inputParameters": { + /// "accuracy": 10, + /// "timeThreshold": 600 + /// } + /// } + /// ] + ///} + /// completionHandler can return flat dictinary or a map. It depends on the paramters handler + static func getParameters(with clientParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws { guard let clientParameterRegistry = MVMCoreObject.sharedInstance()?.clientParameterRegistry, let clientParameterModel = try ClientParameterRegistry.getClientParameterModel(clientParameters) else { @@ -73,7 +87,7 @@ import Foundation parametersList[parameterModel.type] = ["error": defaultErrorString] group.enter() // Dispatch asynchronous injection. - clientParameterRegistry.injectParameter(parameterModel, before: timeout) { (receivedParameter) in + clientParameterRegistry.getParameterFromHandler(parameterModel, before: timeout) { (receivedParameter) in // Queue the results for merge. parametersWorkQueue.async { if let receivedParameter = receivedParameter { @@ -89,7 +103,7 @@ import Foundation } } - func injectParameter( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) { + func getParameterFromHandler( _ parameterModel: ClientParameterModelProtocol, before timeout: Double, completionHandler:@escaping (AnyHashable?) -> ()) { guard let parameterHandler = createParametersHandler(parameterModel.type) else { return completionHandler(nil) }