Created
September 1, 2017 15:56
-
-
Save markst/549ef294c64b411d990f09bde2a4b124 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
import BrightFutures | |
extension Resource { | |
func addLinkData<T: Resource>(resources: [T]) -> Future<Self, SpineError> { | |
let url = SpineSingleton.router.baseURL.appendingPathComponent("/\(self.resourceType)/\(self.id!)/relationships/\(resources.first!.resourceType)") | |
let payload = try! SpineSingleton.serializer.serializeLinkData(resources) | |
return performRequest(method: "POST", url: url, payload: payload) | |
} | |
func removeLinkData<T: Resource>(resources: [T]) -> Future<Self, SpineError> { | |
let url = SpineSingleton.router.baseURL.appendingPathComponent("/\(self.resourceType)/\(self.id!)/relationships/\(resources.first!.resourceType)") | |
let payload = try! SpineSingleton.serializer.serializeLinkData(resources) | |
return performRequest(method: "DELETE", url: url, payload: payload) | |
} | |
} | |
import SwiftyJSON | |
extension Resource { | |
func performRequest(method: String, url:URL, payload:Data? = nil) -> Future<Self, SpineError> { | |
let promise = Promise<Self, SpineError>() | |
SpineSingleton.networkClient.request(method: method, url: url, payload: payload) { (statusCode, responseData, networkError) in | |
if statusCodeIsSuccess(statusCode) { | |
let response = JSON(data: responseData!) | |
print("Perform request success: \(response)") | |
promise.success(self) | |
} else if let error = networkError { | |
promise.failure(SpineError.networkError(error)) | |
} else if let safeResponseData = responseData { | |
do { | |
let doc = try SpineSingleton.serializer.deserializeData(safeResponseData) | |
let error = SpineError.serverError(statusCode: statusCode!, apiErrors: doc.errors) | |
promise.failure(error) | |
} catch _ { | |
promise.failure(SpineError.unknownError) | |
} | |
} | |
} | |
return promise.future | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment