Refactoring

This commit is contained in:
Ivan Babkin 2019-03-25 19:56:25 +03:00
parent 5088c20e82
commit b30447e877
3 changed files with 29 additions and 27 deletions

View File

@ -8,6 +8,7 @@
- **Add**: `handleMappingError` method to `ObservableType`, `Single`, `Completable` extensions, that handles a mapping error and serialize response to a model.
- **Add**: `validate` method to `DataRequest` observable extension, that validates status codes and catch network errors.
- **Add**: `dataApiResponse` method to `DataRequest` reactive extension, that serializes response into data.
- **Update**: `validStatusCodes` parameter in network methods renamed to `additionalValidStatusCodes`.
### 0.9.11
- **[Breaking change]**: Renamed `NumberFormat`'s `allOptions` to `allCases`

View File

@ -57,16 +57,16 @@ open class NetworkService {
///
/// - Parameters:
/// - parameters: api parameters to pass to Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: 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> = [],
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.responseObservableModel(requestParameters: parameters,
validStatusCodes: validStatusCodes,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}
@ -75,16 +75,16 @@ open class NetworkService {
///
/// - Parameters:
/// - parameters: api parameters to pass to Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: 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,
validStatusCodes: Set<Int> = [],
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.responseModel(requestParameters: parameters,
validStatusCodes: validStatusCodes,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}
@ -93,12 +93,13 @@ open class NetworkService {
///
/// - Parameters:
/// - parameters: api parameters to pass to Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: set of additional valid status codes
/// - Returns: Observable of tuple containing (HTTPURLResponse, Data)
public func rxDataRequest(with parameters: ApiRequestParameters, validStatusCodes: Set<Int> = [])
public func rxDataRequest(with parameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int> = [])
-> Observable<SessionManager.DataResponse> {
return sessionManager.rx.responseData(requestParameters: parameters, validStatusCodes: validStatusCodes)
return sessionManager.rx.responseData(requestParameters: parameters,
additionalValidStatusCodes: additionalValidStatusCodes)
.counterTracking(for: self)
}
@ -106,16 +107,16 @@ open class NetworkService {
///
/// - Parameters:
/// - parameters: api upload parameters to pass Alamofire
/// - validStatusCodes: et of additional valid status codes
/// - additionalValidStatusCodes: set of additional valid status codes
/// - decoder: json decoder to decode response data
/// - Returns: Observable of model response
public func rxUploadRequest<T: Decodable>(with parameters: ApiUploadRequestParameters,
validStatusCodes: Set<Int> = [],
additionalValidStatusCodes: Set<Int> = [],
decoder: JSONDecoder = JSONDecoder())
-> Observable<SessionManager.ModelResponse<T>> {
return sessionManager.rx.uploadResponseModel(requestParameters: parameters,
validStatusCodes: validStatusCodes,
additionalValidStatusCodes: additionalValidStatusCodes,
decoder: decoder)
.counterTracking(for: self)
}

View File

@ -70,9 +70,9 @@ public extension Reactive where Base: SessionManager {
///
/// - Parameters:
/// - requestParameters: api parameters to pass Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: set of additional valid status codes
/// - Returns: Observable with request
func apiRequest(requestParameters: ApiRequestParameters, validStatusCodes: Set<Int>)
func apiRequest(requestParameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int>)
-> Observable<DataRequest> {
let requestObservable: Observable<DataRequest>
@ -106,22 +106,22 @@ public extension Reactive where Base: SessionManager {
}
return requestObservable
.validate(statusCodes: self.base.acceptableStatusCodes.union(validStatusCodes))
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes))
}
/// Method that executes request and serializes response into target object
///
/// - Parameters:
/// - requestParameters: api parameters to pass Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: 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>,
additionalValidStatusCodes: Set<Int>,
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes)
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}
@ -131,15 +131,15 @@ public extension Reactive where Base: SessionManager {
///
/// - Parameters:
/// - requestParameters: api parameters to pass Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: 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>,
additionalValidStatusCodes: Set<Int>,
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes)
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.observableApiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}
@ -149,12 +149,12 @@ public extension Reactive where Base: SessionManager {
///
/// - Parameters:
/// - requestParameters: api parameters to pass Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: set of additional valid status codes
/// - Returns: Observable with HTTP URL Response and Data
func responseData(requestParameters: ApiRequestParameters, validStatusCodes: Set<Int>)
func responseData(requestParameters: ApiRequestParameters, additionalValidStatusCodes: Set<Int>)
-> Observable<SessionManager.DataResponse> {
return apiRequest(requestParameters: requestParameters, validStatusCodes: validStatusCodes)
return apiRequest(requestParameters: requestParameters, additionalValidStatusCodes: additionalValidStatusCodes)
.flatMap {
$0.rx.dataApiResponse(mappingQueue: self.base.mappingQueue)
}
@ -164,11 +164,11 @@ public extension Reactive where Base: SessionManager {
///
/// - Parameters:
/// - requestParameters: api upload parameters to pass Alamofire
/// - validStatusCodes: set of additional valid status codes
/// - additionalValidStatusCodes: set of additional valid status codes
/// - decoder: json decoder to decode response data
/// - Returns: Observable with HTTP URL Response and target object
func uploadResponseModel<T: Decodable>(requestParameters: ApiUploadRequestParameters,
validStatusCodes: Set<Int>,
additionalValidStatusCodes: Set<Int>,
decoder: JSONDecoder)
-> Observable<SessionManager.ModelResponse<T>> {
@ -179,7 +179,7 @@ public extension Reactive where Base: SessionManager {
return self.upload(data, urlRequest: urlRequest)
.map { $0 as DataRequest }
.validate(statusCodes: self.base.acceptableStatusCodes.union(validStatusCodes))
.validate(statusCodes: self.base.acceptableStatusCodes.union(additionalValidStatusCodes))
.flatMap {
$0.rx.apiResponse(mappingQueue: self.base.mappingQueue, decoder: decoder)
}