From 7b01f946493b25abe8a684b3fe530922ab9eacfe Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Mon, 10 Oct 2016 13:32:55 +0300 Subject: [PATCH] use Convertible mapper --- Cartfile | 4 ++-- Cartfile.resolved | 3 ++- LeadKit/LeadKit.xcodeproj/project.pbxproj | 23 +++++++++++-------- .../{ApiError.swift => RequestError.swift} | 6 ++--- .../AlamofireRequest+Extensions.swift | 14 +++++------ 5 files changed, 27 insertions(+), 23 deletions(-) rename LeadKit/LeadKit/Enums/{ApiError.swift => RequestError.swift} (88%) diff --git a/Cartfile b/Cartfile index 990789a4..173d9cfc 100644 --- a/Cartfile +++ b/Cartfile @@ -1,5 +1,5 @@ github "CocoaLumberjack/CocoaLumberjack" ~> 3.0.0 github "ReactiveX/RxSwift" "3.0.0-beta.1" -github "lyft/mapper" "5.0.0-beta.2" github "Alamofire/Alamofire" ~> 4.0.0 -github "RxSwiftCommunity/RxAlamofire" "3.0.0-beta.1" \ No newline at end of file +github "RxSwiftCommunity/RxAlamofire" "3.0.0-beta.1" +github "petropavel13/Convertible" "1.1.0" \ No newline at end of file diff --git a/Cartfile.resolved b/Cartfile.resolved index b54d8082..beebf306 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,5 +1,6 @@ github "Alamofire/Alamofire" "4.0.1" github "CocoaLumberjack/CocoaLumberjack" "3.0.0" +github "petropavel13/Reflection" "0.15.0" github "ReactiveX/RxSwift" "3.0.0-beta.1" -github "lyft/mapper" "5.0.0-beta.2" +github "petropavel13/Convertible" "1.1.0" github "RxSwiftCommunity/RxAlamofire" "3.0.0-beta.1" diff --git a/LeadKit/LeadKit.xcodeproj/project.pbxproj b/LeadKit/LeadKit.xcodeproj/project.pbxproj index b156d4ec..c0a0a6b3 100644 --- a/LeadKit/LeadKit.xcodeproj/project.pbxproj +++ b/LeadKit/LeadKit.xcodeproj/project.pbxproj @@ -13,8 +13,10 @@ 780D23461DA416F80084620D /* CGContext+Initializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 780D23451DA416F80084620D /* CGContext+Initializers.swift */; }; 7837F60F1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */; }; 786D78E81D53C378006B2CEA /* AlamofireRequest+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */; }; - 786D78EA1D53C43E006B2CEA /* ApiError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E91D53C43E006B2CEA /* ApiError.swift */; }; + 786D78EA1D53C43E006B2CEA /* RequestError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78E91D53C43E006B2CEA /* RequestError.swift */; }; 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */; }; + 786FFEB71DA7F604008F28A7 /* Convertible.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 786FFEB51DA7F604008F28A7 /* Convertible.framework */; }; + 786FFEB81DA7F604008F28A7 /* Reflection.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 786FFEB61DA7F604008F28A7 /* Reflection.framework */; }; 787682FA1CAD40C300532AB3 /* StaticEstimatedViewHeightProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787682F91CAD40C200532AB3 /* StaticEstimatedViewHeightProtocol.swift */; }; 787783631CA03CA0001CDC9B /* IndexPath+ImmutableIndexPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787783621CA03CA0001CDC9B /* IndexPath+ImmutableIndexPath.swift */; }; 787783671CA04D4A001CDC9B /* String+SizeCalculation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 787783661CA04D4A001CDC9B /* String+SizeCalculation.swift */; }; @@ -28,7 +30,6 @@ 78B0364B1DA61EDE0021D5CC /* CGImage+Crop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B0364A1DA61EDE0021D5CC /* CGImage+Crop.swift */; }; 78B0365E1DA624C10021D5CC /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B036581DA624C10021D5CC /* Alamofire.framework */; }; 78B0365F1DA624C10021D5CC /* CocoaLumberjack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B036591DA624C10021D5CC /* CocoaLumberjack.framework */; }; - 78B036601DA624C10021D5CC /* Mapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B0365A1DA624C10021D5CC /* Mapper.framework */; }; 78B036611DA624C10021D5CC /* RxAlamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B0365B1DA624C10021D5CC /* RxAlamofire.framework */; }; 78B036621DA624C10021D5CC /* RxCocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B0365C1DA624C10021D5CC /* RxCocoa.framework */; }; 78B036631DA624C10021D5CC /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B0365D1DA624C10021D5CC /* RxSwift.framework */; }; @@ -72,8 +73,10 @@ 780D23451DA416F80084620D /* CGContext+Initializers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGContext+Initializers.swift"; sourceTree = ""; }; 7837F60E1CBCF5C0000D74C1 /* EstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EstimatedViewHeightProtocol.swift; sourceTree = ""; }; 786D78E71D53C378006B2CEA /* AlamofireRequest+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireRequest+Extensions.swift"; sourceTree = ""; }; - 786D78E91D53C43E006B2CEA /* ApiError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ApiError.swift; sourceTree = ""; }; + 786D78E91D53C43E006B2CEA /* RequestError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequestError.swift; sourceTree = ""; }; 786D78EB1D53C46E006B2CEA /* AlamofireManager+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "AlamofireManager+Extensions.swift"; sourceTree = ""; }; + 786FFEB51DA7F604008F28A7 /* Convertible.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Convertible.framework; path = ../../../Carthage/Build/iOS/Convertible.framework; sourceTree = ""; }; + 786FFEB61DA7F604008F28A7 /* Reflection.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Reflection.framework; path = ../../../Carthage/Build/iOS/Reflection.framework; sourceTree = ""; }; 787682F91CAD40C200532AB3 /* StaticEstimatedViewHeightProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StaticEstimatedViewHeightProtocol.swift; sourceTree = ""; }; 787783621CA03CA0001CDC9B /* IndexPath+ImmutableIndexPath.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "IndexPath+ImmutableIndexPath.swift"; sourceTree = ""; }; 787783661CA04D4A001CDC9B /* String+SizeCalculation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "String+SizeCalculation.swift"; sourceTree = ""; }; @@ -87,7 +90,6 @@ 78B0364A1DA61EDE0021D5CC /* CGImage+Crop.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGImage+Crop.swift"; sourceTree = ""; }; 78B036581DA624C10021D5CC /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = ../../../Carthage/Build/iOS/Alamofire.framework; sourceTree = ""; }; 78B036591DA624C10021D5CC /* CocoaLumberjack.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CocoaLumberjack.framework; path = ../../../Carthage/Build/iOS/CocoaLumberjack.framework; sourceTree = ""; }; - 78B0365A1DA624C10021D5CC /* Mapper.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Mapper.framework; path = ../../../Carthage/Build/iOS/Mapper.framework; sourceTree = ""; }; 78B0365B1DA624C10021D5CC /* RxAlamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxAlamofire.framework; path = ../../../Carthage/Build/iOS/RxAlamofire.framework; sourceTree = ""; }; 78B0365C1DA624C10021D5CC /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = ../../../Carthage/Build/iOS/RxCocoa.framework; sourceTree = ""; }; 78B0365D1DA624C10021D5CC /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = ../../../Carthage/Build/iOS/RxSwift.framework; sourceTree = ""; }; @@ -122,11 +124,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 78B036601DA624C10021D5CC /* Mapper.framework in Frameworks */, 78B0365F1DA624C10021D5CC /* CocoaLumberjack.framework in Frameworks */, 78B036631DA624C10021D5CC /* RxSwift.framework in Frameworks */, 78B0365E1DA624C10021D5CC /* Alamofire.framework in Frameworks */, + 786FFEB81DA7F604008F28A7 /* Reflection.framework in Frameworks */, 78B036621DA624C10021D5CC /* RxCocoa.framework in Frameworks */, + 786FFEB71DA7F604008F28A7 /* Convertible.framework in Frameworks */, 78B036611DA624C10021D5CC /* RxAlamofire.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -147,10 +150,11 @@ children = ( 78B036581DA624C10021D5CC /* Alamofire.framework */, 78B036591DA624C10021D5CC /* CocoaLumberjack.framework */, - 78B0365A1DA624C10021D5CC /* Mapper.framework */, 78B0365B1DA624C10021D5CC /* RxAlamofire.framework */, 78B0365C1DA624C10021D5CC /* RxCocoa.framework */, 78B0365D1DA624C10021D5CC /* RxSwift.framework */, + 786FFEB51DA7F604008F28A7 /* Convertible.framework */, + 786FFEB61DA7F604008F28A7 /* Reflection.framework */, ); path = Frameworks; sourceTree = ""; @@ -158,7 +162,7 @@ 78011A651D47AF3000EA16A2 /* Enums */ = { isa = PBXGroup; children = ( - 786D78E91D53C43E006B2CEA /* ApiError.swift */, + 786D78E91D53C43E006B2CEA /* RequestError.swift */, ); path = Enums; sourceTree = ""; @@ -536,8 +540,9 @@ "$(SRCROOT)/../Carthage/Build/iOS/RxSwift.framework", "$(SRCROOT)/../Carthage/Build/iOS/RxCocoa.framework", "$(SRCROOT)/../Carthage/Build/iOS/Alamofire.framework", - "$(SRCROOT)/../Carthage/Build/iOS/Mapper.framework", "$(SRCROOT)/../Carthage/Build/iOS/RxAlamofire.framework", + "$(SRCROOT)/../Carthage/Build/iOS/Reflection.framework", + "$(SRCROOT)/../Carthage/Build/iOS/Convertible.framework", ); name = "Carthage copy-frameworks"; outputPaths = ( @@ -568,7 +573,7 @@ 786D78EC1D53C46E006B2CEA /* AlamofireManager+Extensions.swift in Sources */, 78B0FC811C6B2CD500358B64 /* App.swift in Sources */, 78B036491DA562C30021D5CC /* CGImage+Template.swift in Sources */, - 786D78EA1D53C43E006B2CEA /* ApiError.swift in Sources */, + 786D78EA1D53C43E006B2CEA /* RequestError.swift in Sources */, 780D23461DA416F80084620D /* CGContext+Initializers.swift in Sources */, 95B39A861D9D51250057BD54 /* String+Localization.swift in Sources */, 78C36F7E1D801E3E00E7EBEA /* Double+Rounding.swift in Sources */, diff --git a/LeadKit/LeadKit/Enums/ApiError.swift b/LeadKit/LeadKit/Enums/RequestError.swift similarity index 88% rename from LeadKit/LeadKit/Enums/ApiError.swift rename to LeadKit/LeadKit/Enums/RequestError.swift index db23929f..82b4969e 100644 --- a/LeadKit/LeadKit/Enums/ApiError.swift +++ b/LeadKit/LeadKit/Enums/RequestError.swift @@ -1,5 +1,5 @@ // -// ApiError.swift +// RequestError.swift // LeadKit // // Created by Ivan Smolin on 04/08/16. @@ -17,6 +17,6 @@ public enum RequestError: Error { case network(error: Error) case jsonSerialization(error: Error) - case mapping(reason: String) - + case mapping(error: Error) + } diff --git a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift index 23ba9ee5..15a4ec04 100644 --- a/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift +++ b/LeadKit/LeadKit/Extensions/Alamofire/AlamofireRequest+Extensions.swift @@ -8,9 +8,9 @@ import Alamofire import RxSwift -import Mapper import RxAlamofire import struct RxCocoa.Reactive +import Convertible public extension Reactive where Base: DataRequest { @@ -19,7 +19,7 @@ public extension Reactive where Base: DataRequest { - returns: Observable with HTTP URL Response and target object */ - func apiResponse() -> Observable<(HTTPURLResponse, T)> { + func apiResponse(convertibleOptions: [ConvertibleOption] = []) -> Observable<(HTTPURLResponse, T)> { let mapperSerializer = DataResponseSerializer { request, response, data, error in if let err = error { return .failure(RequestError.network(error: err)) @@ -30,12 +30,10 @@ public extension Reactive where Base: DataRequest { switch result { case .success(let value): - if let responseObject = value as? NSDictionary, let mappedObject = T.from(responseObject) { - return .success(mappedObject) - } else { - let failureReason = "JSON could not be mapped into response object. JSON: \(value)" - - return .failure(RequestError.mapping(reason: failureReason)) + do { + return .success(try T.initializeWithJson(JsonValue(object: value), options: convertibleOptions)) + } catch let err { + return .failure(RequestError.mapping(error: err)) } case .failure(let error): return .failure(RequestError.jsonSerialization(error: error))