Last active
July 6, 2018 13:00
-
-
Save poksi592/b4a274401b9eeacb6b0351207231cfcd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
This interface defines few simple steps: | |
- store the module route, so it can be accessed many times | |
- route the request sent to the module with parameters to desired functionality which is encapsulated in the module | |
*/ | |
protocol ModuleRouter { | |
var route: String { get set } | |
init(route: String) | |
func route(parameters: ModuleParameters?, | |
path: String?, | |
callback: ModuleCallback?) | |
} | |
// A simple way of formalising request parameters within a module | |
enum LoginModuleParameters: String { | |
case username | |
case password | |
case paymentToken | |
case bearerToken | |
} | |
class LoginModuleRouter: ModuleRouter { | |
lazy var interactor = LoginInteractor() | |
internal var route: String | |
required init(route: String) { | |
self.route = route | |
} | |
func route(parameters: ModuleParameters?, | |
path: String?, | |
callback: ModuleCallback?) { | |
switch path { | |
case "/payment-token": | |
interactor.getPaymentToken(parameters: parameters) { (token, urlResponse, error) in | |
if let token = token { | |
let response = [LoginModuleParameters.paymentToken.rawValue: token] | |
callback?(response, nil, urlResponse, nil) | |
} | |
else { | |
// Simplyfication of error response | |
callback?(nil, nil, nil, error) | |
} | |
} | |
case "/login": | |
interactor.login(parameters: parameters) { (token, urlResponse, error) in | |
if let token = token { | |
let response = [LoginModuleParameters.bearerToken.rawValue: token] | |
callback?(response, nil, urlResponse, nil) | |
} | |
else { | |
// Simplyfication of error response | |
callback?(nil, nil, nil, error) | |
} | |
} | |
default: | |
return | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment