Skip to content

Commit 055ddbe

Browse files
committed
remove unbox dependency, use swift 4 Decodable
1 parent 81b9697 commit 055ddbe

File tree

4 files changed

+30
-24
lines changed

4 files changed

+30
-24
lines changed

.swift-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.0
1+
4.0

NetworkMapper.podspec

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "NetworkMapper"
3-
s.version = "0.2.0"
3+
s.version = "1.0.0"
44
s.summary = "A framework to map JSON responses to swift objects"
55
s.homepage = "https://github.com/adamdebono/NetworkMapper"
66
s.license = { :type => "MIT", :file => "LICENSE" }
@@ -14,6 +14,5 @@ Pod::Spec.new do |s|
1414
s.source = { :git => "https://github.com/adamdebono/NetworkMapper.git", :tag => s.version }
1515
s.source_files = "Source/*.swift"
1616

17-
s.dependency "Alamofire", "~> 4.4.0"
18-
s.dependency "Unbox", "~> 2.4.0"
17+
s.dependency "Alamofire", "~> 4.5.0"
1918
end

Source/NetworkObjectRequest.swift

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11

22
import Alamofire
33
import Foundation
4-
import Unbox
54

65
/// A protocol to define network requests that map directly to response objects
76
public protocol NetworkObjectRequest: NetworkRequest {
87
/// The type of the response object
98
associatedtype ResponseType: NetworkObjectResponse
109
}
1110
/// A protocol to define network response objects
12-
public protocol NetworkObjectResponse: Unboxable {
13-
11+
public protocol NetworkObjectResponse: Decodable {
12+
1413
}
1514

1615
public extension NetworkObjectRequest {
@@ -23,7 +22,7 @@ public extension NetworkObjectRequest {
2322
/// - returns: The request that was sent
2423
@discardableResult
2524
public func responseObject(completionHandler: @escaping ((DataResponse<ResponseType>) -> Void)) -> DataRequest {
26-
return self.responseJSON { response in
25+
return self.responseData { response in
2726
self.processObjectResponse(response: response, completionHandler: completionHandler)
2827
}
2928
}
@@ -38,7 +37,7 @@ public extension NetworkObjectRequest {
3837
/// - returns: The request that was sent
3938
@discardableResult
4039
public func uploadResponseObject(_ data: Data, completionHandler: @escaping ((DataResponse<ResponseType>) -> Void)) -> UploadRequest {
41-
return self.uploadResponseJSON(data, completionHandler: { response in
40+
return self.uploadResponseData(data, completionHandler: { response in
4241
self.processObjectResponse(response: response, completionHandler: completionHandler)
4342
})
4443
}
@@ -50,10 +49,8 @@ public extension NetworkObjectRequest {
5049
/// the `MultipartFormData`.
5150
/// - parameter completionHandler: A callback which is run on completion of
5251
/// the request
53-
///
54-
/// - returns: The request that was sent
5552
public func uploadResponseObject(multipartFormData: @escaping ((MultipartFormData) -> Void), completionHandler: @escaping ((DataResponse<ResponseType>) -> Void)) {
56-
return self.uploadResponseJSON(multipartFormData: multipartFormData, completionHandler: { response in
53+
self.uploadResponseData(multipartFormData: multipartFormData, completionHandler: { response in
5754
self.processObjectResponse(response: response, completionHandler: completionHandler)
5855
})
5956
}
@@ -67,22 +64,14 @@ public extension NetworkObjectRequest {
6764
/// - parameter response: The response to process
6865
/// - parameter completionHandler: A callback which is run once processing
6966
/// is complete
70-
public func processObjectResponse(response: DataResponse<Any>, completionHandler: @escaping ((DataResponse<ResponseType>) -> Void)) {
67+
public func processObjectResponse(response: DataResponse<Data>, completionHandler: @escaping ((DataResponse<ResponseType>) -> Void)) {
7168
switch response.result {
7269
case .failure(let error):
7370
self.complete(error: error, response: response, completionHandler: completionHandler)
7471
case .success(let value):
75-
guard let value = value as? [String: Any] else {
76-
let error = ResponseError.invalidResponse
77-
self.complete(error: error, response: response, completionHandler: completionHandler)
78-
return
79-
}
80-
8172
do {
82-
let object: ResponseType = try unbox(dictionary: value)
73+
let object = try JSONDecoder().decode(ResponseType.self, from: value)
8374
self.complete(object: object, response: response, completionHandler: completionHandler)
84-
} catch let unboxError as UnboxError {
85-
self.complete(error: unboxError, response: response, completionHandler: completionHandler)
8675
} catch {
8776
let error = ResponseError.invalidResponse
8877
self.complete(error: error, response: response, completionHandler: completionHandler)

Source/NetworkRequest.swift

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,26 @@ public extension NetworkRequest {
177177
completionHandler(response)
178178
})
179179
}
180+
181+
/// Performs an upload request based on the attributes of this instance, and
182+
/// retrieves the resonse data
183+
///
184+
/// - parameter multipartFormData: The clouse used to append body parts to
185+
/// the `MultipartFormData`
186+
/// - parameter completionHandler: A callback which is run on completion of
187+
/// the request
188+
public func uploadResponseData(multipartFormData: @escaping ((MultipartFormData) -> Void), completionHandler: @escaping ((DataResponse<Data>) -> Void)) {
189+
self.sessionManager
190+
.upload(multipartFormData: multipartFormData, with: self, encodingCompletion: { encodingResult in
191+
switch encodingResult {
192+
case .success(let upload, _, _):
193+
upload.responseData(completionHandler: completionHandler)
194+
case .failure(let error):
195+
let response: DataResponse<Data>? = nil
196+
self.complete(error: error, response: response, completionHandler: completionHandler)
197+
}
198+
})
199+
}
180200

181201
// MARK: JSON
182202

@@ -222,8 +242,6 @@ public extension NetworkRequest {
222242
/// the `MultipartFormData`.
223243
/// - parameter completionHandler: A callback which is run on completion of
224244
/// the request
225-
///
226-
/// - returns: The request that was sent
227245
public func uploadResponseJSON(multipartFormData: @escaping ((MultipartFormData) -> Void), completionHandler: @escaping ((DataResponse<Any>) -> Void)) {
228246
self.sessionManager.upload(multipartFormData: multipartFormData, with: self, encodingCompletion: { encodingResult in
229247
switch encodingResult {

0 commit comments

Comments
 (0)