diff --git a/CHANGELOG.md b/CHANGELOG.md index abfac830..240e0cf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +### 0.9.9 +- **Add**: `validStatusCodes` parameter to request methods in `NetworkService` class, that expands valid status codes for request. +- **Add**: `validStatusCodes` parameter to response methods in `SessionManager` extension, that expands valid status codes for request. + ### 0.9.8 - **Add**: `rxDataRequest` method to `NetworkService` class, that performs reactive request to get data and http response. - **Add**: `responseData` method to `SessionManager` extension, that executes request and returns data. diff --git a/LeadKit.podspec b/LeadKit.podspec index ed665e75..935c3e96 100644 --- a/LeadKit.podspec +++ b/LeadKit.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "LeadKit" - s.version = "0.9.8" + s.version = "0.9.9" 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/Sources/Classes/Services/NetworkService.swift b/Sources/Classes/Services/NetworkService.swift index 08879f45..5205ce0c 100644 --- a/Sources/Classes/Services/NetworkService.swift +++ b/Sources/Classes/Services/NetworkService.swift @@ -55,39 +55,50 @@ open class NetworkService { /// Perform reactive request to get mapped ObservableMappable model and http response /// - /// - Parameter parameters: api parameters to pass Alamofire - /// - Parameter decoder: json decoder to decode response data + /// - Parameters: + /// - parameters: api parameters to pass to Alamofire + /// - validStatusCodes: set of additional valid status codes + /// - decoder: json decoder to decode response data /// - Returns: Observable of tuple containing (HTTPURLResponse, ObservableMappable) public func rxObservableRequest(with parameters: ApiRequestParameters, + validStatusCodes: Set = [], decoder: JSONDecoder = JSONDecoder()) -> Observable> { return sessionManager.rx.responseObservableModel(requestParameters: parameters, + validStatusCodes: validStatusCodes, decoder: decoder) .counterTracking(for: self) } /// Perform reactive request to get mapped ImmutableMappable model and http response /// - /// - Parameter parameters: api parameters to pass Alamofire - /// - Parameter decoder: json decoder to decode response data + /// - Parameters: + /// - parameters: api parameters to pass to Alamofire + /// - validStatusCodes: set of additional valid status codes + /// - decoder: json decoder to decode response data /// - Returns: Observable of tuple containing (HTTPURLResponse, ImmutableMappable) - public func rxRequest(with parameters: ApiRequestParameters, decoder: JSONDecoder = JSONDecoder()) + public func rxRequest(with parameters: ApiRequestParameters, + validStatusCodes: Set = [], + decoder: JSONDecoder = JSONDecoder()) -> Observable> { return sessionManager.rx.responseModel(requestParameters: parameters, + validStatusCodes: validStatusCodes, decoder: decoder) .counterTracking(for: self) } /// Perform reactive request to get data and http response /// - /// - Parameter parameters: api parameters to pass Alamofire + /// - Parameters: + /// - parameters: api parameters to pass to Alamofire + /// - validStatusCodes: set of additional valid status codes /// - Returns: Observable of tuple containing (HTTPURLResponse, Data) - public func rxDataRequest(with parameters: ApiRequestParameters) + public func rxDataRequest(with parameters: ApiRequestParameters, validStatusCodes: Set = []) -> Observable { - return sessionManager.rx.responseData(requestParameters: parameters) + return sessionManager.rx.responseData(requestParameters: parameters, validStatusCodes: validStatusCodes) .counterTracking(for: self) } } diff --git a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift index 161230ba..52399baf 100644 --- a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift +++ b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift @@ -68,9 +68,11 @@ public extension Reactive where Base: SessionManager { /// Method which executes request with given api parameters /// - /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameters: + /// - requestParameters: api parameters to pass Alamofire + /// - validStatusCodes: set of additional valid status codes /// - Returns: Observable with request - func apiRequest(requestParameters: ApiRequestParameters) + func apiRequest(requestParameters: ApiRequestParameters, validStatusCodes: Set) -> Observable { let requestObservable: Observable @@ -104,20 +106,23 @@ public extension Reactive where Base: SessionManager { } return requestObservable - .map { $0.validate(statusCode: self.base.acceptableStatusCodes) } + .map { $0.validate(statusCode: self.base.acceptableStatusCodes.union(validStatusCodes)) } .catchAsRequestError() } /// Method that executes request and serializes response into target object /// - /// - Parameter requestParameters: api parameters to pass Alamofire - /// - Parameter decoder: json decoder to decode response data + /// - Parameters: + /// - requestParameters: api parameters to pass Alamofire + /// - validStatusCodes: set of additional valid status codes + /// - decoder: json decoder to decode response data /// - Returns: Observable with HTTP URL Response and target object func responseModel(requestParameters: ApiRequestParameters, + validStatusCodes: Set, decoder: JSONDecoder) -> Observable> { - return apiRequest(requestParameters: requestParameters) + return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes) .flatMap { $0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder) .catchAsRequestError(with: $0) @@ -126,14 +131,17 @@ public extension Reactive where Base: SessionManager { /// Method that executes request and serializes response into target object /// - /// - Parameter requestParameters: api parameters to pass Alamofire - /// - Parameter decoder: json decoder to decode response data + /// - Parameters: + /// - requestParameters: api parameters to pass Alamofire + /// - validStatusCodes: set of additional valid status codes + /// - decoder: json decoder to decode response data /// - Returns: Observable with HTTP URL Response and target object func responseObservableModel(requestParameters: ApiRequestParameters, + validStatusCodes: Set, decoder: JSONDecoder) -> Observable> { - return apiRequest(requestParameters: requestParameters) + return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes) .flatMap { $0.rx.observableApiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder) .catchAsRequestError(with: $0) @@ -142,12 +150,14 @@ public extension Reactive where Base: SessionManager { /// Method that executes request and returns data /// - /// - Parameter requestParameters: api parameters to pass Alamofire + /// - Parameters: + /// - requestParameters: api parameters to pass Alamofire + /// - validStatusCodes: set of additional valid status codes /// - Returns: Observable with HTTP URL Response and Data - func responseData(requestParameters: ApiRequestParameters) + func responseData(requestParameters: ApiRequestParameters, validStatusCodes: Set) -> Observable { - return apiRequest(requestParameters: requestParameters) + return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes) .flatMap { $0.rx.responseResult(queue: self.base.mappingQueue, responseSerializer: DataRequest.dataResponseSerializer()) diff --git a/Sources/Info-iOS.plist b/Sources/Info-iOS.plist index 1d137243..dd711d9f 100644 --- a/Sources/Info-iOS.plist +++ b/Sources/Info-iOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.9.7 + 0.9.9 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Info-tvOS.plist b/Sources/Info-tvOS.plist index 1d137243..dd711d9f 100644 --- a/Sources/Info-tvOS.plist +++ b/Sources/Info-tvOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.9.7 + 0.9.9 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Sources/Info-watchOS.plist b/Sources/Info-watchOS.plist index 1d137243..dd711d9f 100644 --- a/Sources/Info-watchOS.plist +++ b/Sources/Info-watchOS.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.9.7 + 0.9.9 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass