Skip to content

Commit ea8eed7

Browse files
committed
added image functionality
1 parent 9264965 commit ea8eed7

File tree

5 files changed

+178
-81
lines changed

5 files changed

+178
-81
lines changed

NetworkMapper.podspec

Lines changed: 2 additions & 1 deletion
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 = "1.0.1"
3+
s.version = "1.1.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" }
@@ -15,4 +15,5 @@ Pod::Spec.new do |s|
1515
s.source_files = "Source/*.swift"
1616

1717
s.dependency "Alamofire", "~> 4.5.0"
18+
s.dependency "AlamofireImage", "~> 3.3.0"
1819
end

Source/NetworkDataRequest.swift

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
2+
import Alamofire
3+
4+
public protocol NetworkDataRequest: NetworkRequest {
5+
6+
}
7+
8+
public extension NetworkDataRequest {
9+
/// Performs a network request based on the attributes of this instance, and
10+
/// retrieves the response json
11+
///
12+
/// - parameter completionHandler: A callback which is run on completion of
13+
/// the request
14+
///
15+
/// - returns: The request that was sent
16+
@discardableResult
17+
public func responseJSON(completionHandler: @escaping ((DataResponse<Any>) -> Void)) -> DataRequest {
18+
return self.sessionManager
19+
.request(self)
20+
.validate(self.validation)
21+
.responseJSON { response in
22+
self.processJSONResponse(response: response, completionHandler: completionHandler)
23+
}
24+
}
25+
26+
/// Performs an upload request based on the attributes of this instance, and
27+
/// retrieves the response json
28+
///
29+
/// - parameter data: The data to upload
30+
/// - parameter completionHandler: A callback which is run on completion of
31+
/// the request
32+
///
33+
/// - returns: The request that was sent
34+
@discardableResult
35+
public func uploadResponseJSON(_ data: Data, completionHandler: @escaping ((DataResponse<Any>) -> Void)) -> UploadRequest {
36+
return self.sessionManager
37+
.upload(data, with: self)
38+
.validate(self.validation)
39+
.responseJSON { response in
40+
self.processJSONResponse(response: response, completionHandler: completionHandler)
41+
}
42+
}
43+
44+
/// Performs an upload request based on the attributes of this instance, and
45+
/// retrieves the response json
46+
///
47+
/// - parameter multipartFormData: The closure used to append body parts to
48+
/// the `MultipartFormData`.
49+
/// - parameter completionHandler: A callback which is run on completion of
50+
/// the request
51+
public func uploadResponseJSON(multipartFormData: @escaping ((MultipartFormData) -> Void), completionHandler: @escaping ((DataResponse<Any>) -> Void)) {
52+
self.sessionManager.upload(multipartFormData: multipartFormData, with: self, encodingCompletion: { encodingResult in
53+
switch encodingResult {
54+
case .success(let upload, _, _):
55+
upload.responseJSON(completionHandler: completionHandler)
56+
case .failure(let error):
57+
let response: DataResponse<Any>? = nil
58+
self.complete(error: error, response: response, completionHandler: completionHandler)
59+
}
60+
})
61+
}
62+
63+
/// Processes a JSON response from the server
64+
///
65+
/// This can be overridden to provide custom processing. The default
66+
/// implementation only checks for request cancellation.
67+
///
68+
/// - parameter response: The response to process
69+
/// - parameter completionHandler: A callback which is run once processing
70+
/// is complete
71+
public func processJSONResponse(response: DataResponse<Any>, completionHandler: @escaping ((DataResponse<Any>) -> Void)) {
72+
switch response.result {
73+
case .failure(let error):
74+
if let error = error as? URLError {
75+
if error.code == URLError.cancelled {
76+
return
77+
}
78+
}
79+
default:
80+
break
81+
}
82+
83+
completionHandler(response)
84+
}
85+
}

Source/NetworkImageRequest.swift

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
2+
import Alamofire
3+
import AlamofireImage
4+
5+
#if os(watchOS)
6+
import UIKit
7+
#endif
8+
9+
public protocol NetworkImageRequest: NetworkRequest {
10+
}
11+
12+
public extension NetworkImageRequest {
13+
14+
#if os(iOS) || os(tvOS) || os(watchOS)
15+
16+
/// Performs a network request based on the attributes of this instance, and
17+
/// retrieves the response image
18+
///
19+
/// - parameter imageScale: The scale factor to use when
20+
/// interpreting the response image
21+
/// - parameter inflateResponseImage: Whether to automatically inflate
22+
/// response image data from compressed
23+
/// formats
24+
/// - parameter completionHandler: A callback which is run on
25+
/// completion of the request
26+
///
27+
/// - returns: The request that was sent
28+
@discardableResult
29+
public func responseImage(imageScale: CGFloat = DataRequest.imageScale, inflateResponseImage: Bool = true, completionHandler: @escaping ((DataResponse<Image>) -> Void)) -> DataRequest {
30+
return self.sessionManager
31+
.request(self)
32+
.responseImage(imageScale: imageScale, inflateResponseImage: inflateResponseImage, queue: nil, completionHandler: completionHandler)
33+
}
34+
35+
/// Performs a network request based on the attributes of this instance, and
36+
/// periodically loads the response image as data is loaded.
37+
///
38+
/// - parameter imageScale: The scale factor to use when
39+
/// interpreting the response image
40+
/// - parameter inflateResponseImage: Whether to automatically inflate
41+
/// response image data from compressed
42+
/// formats
43+
/// - parameter completionHandler: A callback which is run when the
44+
/// request has a new image
45+
///
46+
/// - returns: The request that was sent
47+
@discardableResult
48+
public func streamImage(imageScale: CGFloat = DataRequest.imageScale, inflateResponseImage: Bool = true, completionHandler: @escaping ((Image) -> Void)) -> DataRequest {
49+
return self.sessionManager
50+
.request(self)
51+
.streamImage(imageScale: imageScale, inflateResponseImage: inflateResponseImage, completionHandler: completionHandler)
52+
}
53+
54+
#elseif os(macOS)
55+
56+
/// Performs a network request based on the attributes of this instance, and
57+
/// retrieves the response image
58+
///
59+
/// - parameter completionHandler: A callback which is run on
60+
/// completion of the request
61+
///
62+
/// - returns: The request that was sent
63+
@discardableResult
64+
public func responseImage(completionHandler: @escaping ((DataResponse<Image>) -> Void)) -> DataRequest {
65+
return self.sessionManager
66+
.request(self)
67+
.responseImage(queue: nil, completionHandler: completionHandler)
68+
}
69+
70+
/// Performs a network request based on the attributes of this instance, and
71+
/// periodically loads the response image as data is loaded.
72+
///
73+
/// - parameter imageScale: The scale factor to use when
74+
/// interpreting the response image
75+
/// - parameter inflateResponseImage: Whether to automatically inflate
76+
/// response image data from compressed
77+
/// formats
78+
/// - parameter completionHandler: A callback which is run when the
79+
/// request has a new image
80+
///
81+
/// - returns: The request that was sent
82+
@discardableResult
83+
public func streamImage(completionHandler: @escaping ((Image) -> Void)) -> DataRequest {
84+
return self.sessionManager
85+
.request(self)
86+
.streamImage(completionHandler: completionHandler)
87+
}
88+
89+
#endif
90+
}

Source/NetworkObjectRequest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Alamofire
33
import Foundation
44

55
/// A protocol to define network requests that map directly to response objects
6-
public protocol NetworkObjectRequest: NetworkRequest {
6+
public protocol NetworkObjectRequest: NetworkDataRequest {
77
/// The type of the response object
88
associatedtype ResponseType: NetworkObjectResponse
99
}

Source/NetworkRequest.swift

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -197,85 +197,6 @@ public extension NetworkRequest {
197197
}
198198
})
199199
}
200-
201-
// MARK: JSON
202-
203-
/// Performs a network request based on the attributes of this instance, and
204-
/// retrieves the response json
205-
///
206-
/// - parameter completionHandler: A callback which is run on completion of
207-
/// the request
208-
///
209-
/// - returns: The request that was sent
210-
@discardableResult
211-
public func responseJSON(completionHandler: @escaping ((DataResponse<Any>) -> Void)) -> DataRequest {
212-
return self.sessionManager
213-
.request(self)
214-
.validate(self.validation)
215-
.responseJSON { response in
216-
self.processJSONResponse(response: response, completionHandler: completionHandler)
217-
}
218-
}
219-
220-
/// Performs an upload request based on the attributes of this instance, and
221-
/// retrieves the response json
222-
///
223-
/// - parameter data: The data to upload
224-
/// - parameter completionHandler: A callback which is run on completion of
225-
/// the request
226-
///
227-
/// - returns: The request that was sent
228-
@discardableResult
229-
public func uploadResponseJSON(_ data: Data, completionHandler: @escaping ((DataResponse<Any>) -> Void)) -> UploadRequest {
230-
return self.sessionManager
231-
.upload(data, with: self)
232-
.validate(self.validation)
233-
.responseJSON { response in
234-
self.processJSONResponse(response: response, completionHandler: completionHandler)
235-
}
236-
}
237-
238-
/// Performs an upload request based on the attributes of this instance, and
239-
/// retrieves the response json
240-
///
241-
/// - parameter multipartFormData: The closure used to append body parts to
242-
/// the `MultipartFormData`.
243-
/// - parameter completionHandler: A callback which is run on completion of
244-
/// the request
245-
public func uploadResponseJSON(multipartFormData: @escaping ((MultipartFormData) -> Void), completionHandler: @escaping ((DataResponse<Any>) -> Void)) {
246-
self.sessionManager.upload(multipartFormData: multipartFormData, with: self, encodingCompletion: { encodingResult in
247-
switch encodingResult {
248-
case .success(let upload, _, _):
249-
upload.responseJSON(completionHandler: completionHandler)
250-
case .failure(let error):
251-
let response: DataResponse<Any>? = nil
252-
self.complete(error: error, response: response, completionHandler: completionHandler)
253-
}
254-
})
255-
}
256-
257-
/// Processes a JSON response from the server
258-
///
259-
/// This can be overridden to provide custom processing. The default
260-
/// implementation only checks for request cancellation.
261-
///
262-
/// - parameter response: The response to process
263-
/// - parameter completionHandler: A callback which is run once processing
264-
/// is complete
265-
public func processJSONResponse(response: DataResponse<Any>, completionHandler: @escaping ((DataResponse<Any>) -> Void)) {
266-
switch response.result {
267-
case .failure(let error):
268-
if let error = error as? URLError {
269-
if error.code == URLError.cancelled {
270-
return
271-
}
272-
}
273-
default:
274-
break
275-
}
276-
277-
completionHandler(response)
278-
}
279200
}
280201

281202
extension DataRequest {

0 commit comments

Comments
 (0)