Skip to content

Instantly share code, notes, and snippets.

@poksi592
Last active July 6, 2018 13:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save poksi592/b4a274401b9eeacb6b0351207231cfcd to your computer and use it in GitHub Desktop.
Save poksi592/b4a274401b9eeacb6b0351207231cfcd to your computer and use it in GitHub Desktop.
/**
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