From 7b57ad8310a4dfa42420a3308f56a1e67fd98de1 Mon Sep 17 00:00:00 2001 From: Alexey Gerasimov Date: Tue, 14 Feb 2017 20:09:34 +0300 Subject: [PATCH] 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,