From 7b57ad8310a4dfa42420a3308f56a1e67fd98de1 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Tue, 14 Feb 2017 20:09:34 +0300 Subject: [PATCH 1/4] Array mapping added --- LeadKit.podspec | 2 +- LeadKit/.DS_Store | Bin 6148 -> 0 bytes .../Alamofire/AlamofireManager+Extensions.swift | 13 +++++++++++++ .../Alamofire/AlamofireRequest+Extensions.swift | 15 +++++++++++++++ .../Structures/Api/ApiRequestParameters.swift | 10 +++++----- 5 files changed, 34 insertions(+), 6 deletions(-) delete mode 100644 LeadKit/.DS_Store diff --git a/LeadKit.podspec b/LeadKit.podspec index 17500250..8ae4bfab 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "LeadKit" - s.version = "0.4.2" + s.version = "0.4.3" s.summary = "iOS framework with a bunch of tools for rapid development" s.homepage = "https://github.com/TouchInstinct/LeadKit" s.license = "Apache License, Version 2.0" diff --git a/LeadKit/.DS_Store b/LeadKit/.DS_Store deleted file mode 100644 index 23116d742fb5269f43228ba5db72f54d73f0b8c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5B>J5PbtFBGCjYN>`Lfxxp%0D(G?nP&VSDtacS866GF&8*m?L4#b-ogR)|a zC`E+OjAXyDJAVxnQf~nFaa=TQ51CsOuGk%PIB;wC^p9}p0U9-Ua=UM=r4BZ z-p_G|B_2>=cmECBOSD*{!OQA#I$tz(Yo8#i_x)IPQI<(@@N<2rR{^m~s0HuN01 ev_T(F>NBp$*g5Jf+HZ7XJOoUTs6v4wDDVY-D>&Bx diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift index a0a50cbd..6a621fb3 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift @@ -52,6 +52,19 @@ public extension Reactive where Base: Alamofire.SessionManager { .flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) } } + /// Method which executes request and serializes response into array of target objects + /// + /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameter mappingQueue: The dispatch queue to use for mapping + /// - Returns: Observable with HTTP URL Response and array of target objects + func responseModel(requestParameters: ApiRequestParameters, + mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(HTTPURLResponse, [T])> { + + return apiRequest(requestParameters: requestParameters) + .flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) } + } + /// Method which executes request and serializes response into target object /// /// - Parameter requestParameters: api parameters to pass Alamofire diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift index 7fa659f3..122cb969 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift @@ -42,6 +42,21 @@ public extension Reactive where Base: DataRequest { } } + /// Method which serializes response into array of target objects + /// + /// - Parameter mappingQueue: The dispatch queue to use for mapping + /// - Returns: Observable with HTTP URL Response and array of target objects + func apiResponse(mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(HTTPURLResponse, [T])> { + + return responseJSONOnQueue(mappingQueue) + .map { resp, value in + let jsonArray = try cast(value) as [[String: Any]] + + return (resp, try Mapper().mapArray(JSONArray: jsonArray)) + } + } + /// Method which serializes response into target object /// /// - Parameter mappingQueue: The dispatch queue to use for mapping diff --git a/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift b/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift index c9ccafd0..baa49cf2 100644 --- a/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift +++ b/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift @@ -27,11 +27,11 @@ import Alamofire */ public struct ApiRequestParameters { - let method: HTTPMethod - let url: URLConvertible - let parameters: Parameters? - let encoding: ParameterEncoding - let headers: HTTPHeaders? + public let method: HTTPMethod + public let url: URLConvertible + public let parameters: Parameters? + public let encoding: ParameterEncoding + public let headers: HTTPHeaders? public init(url: URLConvertible, method: HTTPMethod = .get, From f101c302820612abc89d8f16b7611f76574e0dcc Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Tue, 14 Feb 2017 20:14:30 +0300 Subject: [PATCH 2/4] Oops --- .../LeadKit/Structures/Api/ApiRequestParameters.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift b/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift index baa49cf2..c9ccafd0 100644 --- a/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift +++ b/LeadKit/LeadKit/Structures/Api/ApiRequestParameters.swift @@ -27,11 +27,11 @@ import Alamofire */ public struct ApiRequestParameters { - public let method: HTTPMethod - public let url: URLConvertible - public let parameters: Parameters? - public let encoding: ParameterEncoding - public let headers: HTTPHeaders? + let method: HTTPMethod + let url: URLConvertible + let parameters: Parameters? + let encoding: ParameterEncoding + let headers: HTTPHeaders? public init(url: URLConvertible, method: HTTPMethod = .get, From 75f8a1a01abea2ec94021b9071df0c32c60a76b3 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Tue, 14 Feb 2017 21:26:22 +0300 Subject: [PATCH 3/4] Fixed: pullRequest comments --- .../AlamofireManager+Extensions.swift | 17 ++++++++++++-- .../AlamofireRequest+Extensions.swift | 22 ++++++++++++++++++- .../Observable+ToastErrorLogging.swift | 2 +- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift index 6a621fb3..e41c258e 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireManager+Extensions.swift @@ -59,10 +59,10 @@ public extension Reactive where Base: Alamofire.SessionManager { /// - Returns: Observable with HTTP URL Response and array of target objects func responseModel(requestParameters: ApiRequestParameters, mappingQueue: DispatchQueue = DispatchQueue.global()) - -> Observable<(HTTPURLResponse, [T])> { + -> Observable<(response: HTTPURLResponse, models: [T])> { return apiRequest(requestParameters: requestParameters) - .flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) } + .flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) } } /// Method which executes request and serializes response into target object @@ -78,4 +78,17 @@ public extension Reactive where Base: Alamofire.SessionManager { .flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) } } + /// Method which executes request and serializes response into array of target objects + /// + /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameter mappingQueue: The dispatch queue to use for mapping + /// - Returns: Observable with HTTP URL Response and array of target objects + func responseObservableModel(requestParameters: ApiRequestParameters, + mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(response: HTTPURLResponse, models: [T])> where T.ModelType == T { + + return apiRequest(requestParameters: requestParameters) + .flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) } + } + } diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift index 122cb969..e0e5a2f0 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift @@ -47,7 +47,7 @@ public extension Reactive where Base: DataRequest { /// - Parameter mappingQueue: The dispatch queue to use for mapping /// - Returns: Observable with HTTP URL Response and array of target objects func apiResponse(mappingQueue: DispatchQueue = DispatchQueue.global()) - -> Observable<(HTTPURLResponse, [T])> { + -> Observable<(response: HTTPURLResponse, models: [T])> { return responseJSONOnQueue(mappingQueue) .map { resp, value in @@ -73,6 +73,26 @@ public extension Reactive where Base: DataRequest { } } + /// Method which serializes response into array of target objects + /// + /// - Parameter mappingQueue: The dispatch queue to use for mapping + /// - Returns: Observable with HTTP URL Response and array of target objects + func apiResponse(mappingQueue: DispatchQueue = DispatchQueue.global()) + -> Observable<(response: HTTPURLResponse, models: [T])> where T.ModelType == T { + + return responseJSONOnQueue(mappingQueue) + .flatMap { resp, value -> Observable<(response: HTTPURLResponse, models: [T])> in + let jsonArray = try cast(value) as [[String: Any]] + + let createFromList = jsonArray.map { + T.createFrom(map: Map(mappingType: .fromJSON, JSON: $0)) + } + + return Observable.zip(createFromList) { $0 } + .map { (resp, $0) } + } + } + internal func responseJSONOnQueue(_ queue: DispatchQueue) -> Observable<(HTTPURLResponse, Any)> { return responseResult(queue: queue, responseSerializer: DataRequest.jsonResponseSerializer(options: .allowFragments)) } diff --git a/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift b/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift index ee4a326f..3fe3a6b8 100644 --- a/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift +++ b/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift @@ -21,7 +21,7 @@ // import RxSwift -import Toast_Swift +import ToastSwiftFramework public extension Observable { From 73d33b2adb95988f32fdd0625775cc39409e58ea Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Wed, 15 Feb 2017 12:16:13 +0300 Subject: [PATCH 4/4] Toast import reverted --- .../Extensions/Observable/Observable+ToastErrorLogging.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift b/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift index 3fe3a6b8..ee4a326f 100644 --- a/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift +++ b/LeadKit/LeadKit/Extensions/Observable/Observable+ToastErrorLogging.swift @@ -21,7 +21,7 @@ // import RxSwift -import ToastSwiftFramework +import Toast_Swift public extension Observable {