Skip to content
This repository was archived by the owner on Oct 29, 2021. It is now read-only.

Commit b46c0fc

Browse files
authored
Merge pull request #13 from intelygenz/feature/acceptable-status-codes
Added customizable acceptable status codes range.
2 parents c8c0f91 + 93d16c6 commit b46c0fc

14 files changed

+57
-28
lines changed

Alamofire/NetAlamofire+Data.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ extension NetAlamofire {
1818
netDataTask?.progress = progress
1919
netDataTask?.progressClosure?(progress)
2020
}
21-
dataRequest.response(queue: queue) { [weak self] response in
21+
.validate(statusCode: acceptableStatusCodes)
22+
.response(queue: queue) { [weak self] response in
2223
let netResponse = self?.netResponse(response.response, netDataTask, response.data)
2324
let netError = self?.netError(response.error, response.data, response.response)
2425
netDataTask?.response = netResponse

Alamofire/NetAlamofire+Download.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ extension NetAlamofire {
1818
netDownloadTask?.progress = progress
1919
netDownloadTask?.progressClosure?(progress)
2020
}
21-
downloadRequest.response(queue: queue) { [weak self] response in
21+
.validate(statusCode: acceptableStatusCodes)
22+
.response(queue: queue) { [weak self] response in
2223
let netResponse = self?.netResponse(response.response, netDownloadTask, response.destinationURL)
2324
let netError = self?.netError(response.error, response.destinationURL, response.response)
2425
netDownloadTask?.response = netResponse
@@ -43,7 +44,8 @@ extension NetAlamofire {
4344
netDownloadTask?.progress = progress
4445
netDownloadTask?.progressClosure?(progress)
4546
}
46-
downloadRequest.response(queue: queue) { [weak self] response in
47+
.validate(statusCode: acceptableStatusCodes)
48+
.response(queue: queue) { [weak self] response in
4749
let netResponse = self?.netResponse(response.response, netDownloadTask, response.destinationURL)
4850
let netError = self?.netError(response.error, response.destinationURL, response.response)
4951
netDownloadTask?.response = netResponse

Alamofire/NetAlamofire+Upload.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ extension NetAlamofire {
1818
netUploadTask?.progress = progress
1919
netUploadTask?.progressClosure?(progress)
2020
}
21-
uploadRequest.response(queue: queue) { [weak self] response in
21+
.validate(statusCode: acceptableStatusCodes)
22+
.response(queue: queue) { [weak self] response in
2223
let netResponse = self?.netResponse(response.response, netUploadTask, response.data)
2324
let netError = self?.netError(response.error, response.data, response.response)
2425
netUploadTask?.response = netResponse
@@ -61,7 +62,8 @@ extension NetAlamofire {
6162
netUploadTask?.progress = progress
6263
netUploadTask?.progressClosure?(progress)
6364
}
64-
uploadRequest.response(queue: queue) { [weak self] response in
65+
.validate(statusCode: acceptableStatusCodes)
66+
.response(queue: queue) { [weak self] response in
6567
let netResponse = self?.netResponse(response.response, netUploadTask, response.data)
6668
let netError = self?.netError(response.error, response.data, response.response)
6769
netUploadTask?.response = netResponse
@@ -104,7 +106,8 @@ extension NetAlamofire {
104106
netUploadTask?.progress = progress
105107
netUploadTask?.progressClosure?(progress)
106108
}
107-
uploadRequest.response(queue: queue) { [weak self] response in
109+
.validate(statusCode: acceptableStatusCodes)
110+
.response(queue: queue) { [weak self] response in
108111
let netResponse = self?.netResponse(response.response, netUploadTask, response.data)
109112
let netError = self?.netError(response.error, response.data, response.response)
110113
netUploadTask?.response = netResponse

Alamofire/NetAlamofire.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ open class NetAlamofire: Net {
3434
}
3535
}
3636

37+
open var acceptableStatusCodes = defaultAcceptableStatusCodes
38+
3739
open private(set) var sessionManager: Alamofire.SessionManager!
3840

3941
open var authChallenge: ((URLAuthenticationChallenge, (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void) -> Swift.Void)? {
@@ -131,7 +133,7 @@ extension NetAlamofire {
131133

132134
func netError(_ error: Error?, _ responseObject: Any? = nil, _ response: URLResponse? = nil) -> NetError? {
133135
if let error = error {
134-
return NetError.net(code: error._code, message: error.localizedDescription, headers: (response as? HTTPURLResponse)?.allHeaderFields, object: responseObject, underlying: error)
136+
return .net(code: error._code, message: error.localizedDescription, headers: (response as? HTTPURLResponse)?.allHeaderFields, object: responseObject, underlying: error)
135137
}
136138
return nil
137139
}

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Release 0.4.5
2+
3+
- [x] Added customizable acceptable status codes range
4+
15
# Release 0.4.4
26

37
- [x] [#12](https://github.com/intelygenz/NetClient-iOS/pull/12) New removable interceptors API

Core/Net.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import Foundation
1010

1111
public typealias InterceptorToken = UUID
1212

13+
public typealias StatusCode = Int
14+
15+
public typealias StatusCodes = Set<StatusCode>
16+
1317
public typealias RequestInterceptor = (NetRequest.Builder) -> NetRequest.Builder
1418

1519
public typealias ResponseInterceptor = (NetResponse.Builder) -> NetResponse.Builder
@@ -26,6 +30,8 @@ public protocol Net: class {
2630

2731
@discardableResult func removeInterceptor(_ token: InterceptorToken) -> Bool
2832

33+
var acceptableStatusCodes: StatusCodes { get set }
34+
2935
func data(_ request: NetRequest) -> NetTask
3036

3137
func download(_ resumeData: Data) -> NetTask
@@ -50,3 +56,7 @@ public protocol Net: class {
5056
#endif
5157

5258
}
59+
60+
extension Net {
61+
static var defaultAcceptableStatusCodes: StatusCodes { return Set(200..<300) }
62+
}

Core/NetMultipartFormData.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -313,16 +313,16 @@ public class NetMultipartFormData {
313313
}
314314

315315
if FileManager.default.fileExists(atPath: fileURL.path) {
316-
let underlying = URLError(.fileDoesNotExist)
317-
throw NetError.parse(code: underlying._code, message: "Output stream file already exists.", object: fileURL, underlying: underlying)
316+
let urlError = URLError(.fileDoesNotExist)
317+
throw NetError.parse(code: urlError._code, message: "Output stream file already exists.", object: fileURL, underlying: urlError)
318318
} else if !fileURL.isFileURL {
319-
let underlying = URLError(.badURL)
320-
throw NetError.parse(code: underlying._code, message: "Output stream URL is invalid.", object: fileURL, underlying: underlying)
319+
let urlError = URLError(.badURL)
320+
throw NetError.parse(code: urlError._code, message: "Output stream URL is invalid.", object: fileURL, underlying: urlError)
321321
}
322322

323323
guard let outputStream = OutputStream(url: fileURL, append: false) else {
324-
let underlying = URLError(.cannotCreateFile)
325-
throw NetError.parse(code: underlying._code, message: "Output stream creation failed.", object: fileURL, underlying: underlying)
324+
let urlError = URLError(.cannotCreateFile)
325+
throw NetError.parse(code: urlError._code, message: "Output stream creation failed.", object: fileURL, underlying: urlError)
326326
}
327327

328328
outputStream.open()
@@ -502,7 +502,7 @@ public class NetMultipartFormData {
502502
guard bodyPartError == nil else {
503503
return
504504
}
505-
bodyPartError = NetError.parse(code: underlying?._code, message: reason, object: object, underlying: underlying)
505+
bodyPartError = .parse(code: underlying?._code, message: reason, object: object, underlying: underlying)
506506
}
507507

508508

Core/NetTask.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ open class NetTask: NetTaskProtocol,
125125
let dispatchTimeoutResult = dispatchSemaphore?.wait(timeout: DispatchTime.distantFuture)
126126
if dispatchTimeoutResult == .timedOut {
127127
let urlError = URLError(.timedOut)
128-
error = NetError.net(code: urlError._code, message: urlError.localizedDescription, headers: response?.headers, object: response?.responseObject, underlying: urlError)
128+
error = .net(code: urlError._code, message: urlError.localizedDescription, headers: response?.headers, object: response?.responseObject, underlying: urlError)
129129
}
130130
if let error = error {
131131
throw error
@@ -139,17 +139,17 @@ open class NetTask: NetTaskProtocol,
139139
}
140140
guard let urlRequest = request?.urlRequest else {
141141
guard let taskError = error else {
142-
let error = URLError(.resourceUnavailable)
143-
throw NetError.net(code: error._code, message: "Request not found.", headers: response?.headers, object: response?.responseObject, underlying: error)
142+
let urlError = URLError(.resourceUnavailable)
143+
throw NetError.net(code: urlError._code, message: "Request not found.", headers: response?.headers, object: response?.responseObject, underlying: urlError)
144144
}
145145
throw taskError
146146
}
147147
if let cachedResponse = URLCache.shared.cachedResponse(for: urlRequest) {
148148
return NetResponse(cachedResponse, self)
149149
}
150150
guard let taskError = error else {
151-
let error = URLError(.resourceUnavailable)
152-
throw NetError.net(code: error._code, message: "Cached response not found.", headers: response?.headers, object: response?.responseObject, underlying: error)
151+
let urlError = URLError(.resourceUnavailable)
152+
throw NetError.net(code: urlError._code, message: "Cached response not found.", headers: response?.headers, object: response?.responseObject, underlying: urlError)
153153
}
154154
throw taskError
155155
}

Example/ViewController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ class ViewController: UIViewController {
7272
// Decode
7373
net.data(request).async { (response, error) in
7474
do {
75-
if let article: Article = try response?.decode() {
75+
if let error = error {
76+
print("Net error: \(error)")
77+
} else if let article: Article = try response?.decode() {
7678
print(article)
7779
// Encode
7880
try request.builder().setJSONObject(article)
79-
} else if let error = error {
80-
print("Net error: \(error)")
8181
}
8282
} catch {
8383
print("Parse error: \(error.localizedDescription)")

Net.xcodeproj/project.pbxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1566,8 +1566,8 @@
15661566
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
15671567
CURRENT_PROJECT_VERSION = "$(DYLIB_CURRENT_VERSION)";
15681568
DEVELOPMENT_TEAM = 3VW789WSMP;
1569-
DYLIB_COMPATIBILITY_VERSION = 0.4.0;
1570-
DYLIB_CURRENT_VERSION = 0.4.4;
1569+
DYLIB_COMPATIBILITY_VERSION = 0.4.5;
1570+
DYLIB_CURRENT_VERSION = 0.4.5;
15711571
ENABLE_STRICT_OBJC_MSGSEND = YES;
15721572
ENABLE_TESTABILITY = YES;
15731573
GCC_C_LANGUAGE_STANDARD = gnu99;
@@ -1620,8 +1620,8 @@
16201620
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
16211621
CURRENT_PROJECT_VERSION = "$(DYLIB_CURRENT_VERSION)";
16221622
DEVELOPMENT_TEAM = 3VW789WSMP;
1623-
DYLIB_COMPATIBILITY_VERSION = 0.4.0;
1624-
DYLIB_CURRENT_VERSION = 0.4.4;
1623+
DYLIB_COMPATIBILITY_VERSION = 0.4.5;
1624+
DYLIB_CURRENT_VERSION = 0.4.5;
16251625
ENABLE_STRICT_OBJC_MSGSEND = YES;
16261626
GCC_C_LANGUAGE_STANDARD = gnu99;
16271627
GCC_NO_COMMON_BLOCKS = YES;

0 commit comments

Comments
 (0)