Merge pull request #188 from TouchInstinct/feature/validStatusCodes

Add validStatusCodes pararmeter to request methods
This commit is contained in:
Ivan Babkin 2019-03-06 18:19:11 +03:00 committed by GitHub
commit 09da4ce234
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 49 additions and 24 deletions

View File

@ -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.

View File

@ -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"

View File

@ -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<T: ObservableMappable>(with parameters: ApiRequestParameters,
validStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
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<T: Decodable>(with parameters: ApiRequestParameters, decoder: JSONDecoder = JSONDecoder())
public func rxRequest<T: Decodable>(with parameters: ApiRequestParameters,
validStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
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<Int> = [])
-> Observable<SessionManager.DataResponse> {
return sessionManager.rx.responseData(requestParameters: parameters)
return sessionManager.rx.responseData(requestParameters: parameters, validStatusCodes: validStatusCodes)
.counterTracking(for: self)
}
}

View File

@ -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<Int>)
-> Observable<DataRequest> {
let requestObservable: Observable<DataRequest>
@ -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<T: Decodable>(requestParameters: ApiRequestParameters,
validStatusCodes: Set<Int>,
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
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<T: ObservableMappable>(requestParameters: ApiRequestParameters,
validStatusCodes: Set<Int>,
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
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<Int>)
-> Observable<SessionManager.DataResponse> {
return apiRequest(requestParameters: requestParameters)
return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes)
.flatMap {
$0.rx.responseResult(queue: self.base.mappingQueue,
responseSerializer: DataRequest.dataResponseSerializer())

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.9.7</string>
<string>0.9.9</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.9.7</string>
<string>0.9.9</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>

View File

@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.9.7</string>
<string>0.9.9</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPrincipalClass</key>