Merge pull request #108 from TouchInstinct/network_fixes
Ability to handle responses with non-default status codes.
This commit is contained in:
commit
e961be9cb6
|
|
@ -1,5 +1,9 @@
|
|||
# Changelog
|
||||
|
||||
### 0.6.5
|
||||
|
||||
- **Add**: Ability to handle responses with non-default status codes.
|
||||
|
||||
### 0.6.4
|
||||
|
||||
- **Fix**: SpinnerView bug(no animation) in Swift 4.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = "LeadKit"
|
||||
s.version = "0.6.4"
|
||||
s.version = "0.6.5"
|
||||
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"
|
||||
|
|
|
|||
|
|
@ -37,6 +37,8 @@ open class NetworkService {
|
|||
|
||||
public let sessionManager: Alamofire.SessionManager
|
||||
|
||||
private let acceptableStatusCodes: [Int]
|
||||
|
||||
var requestCount: Driver<Int> {
|
||||
return requestCountVariable.asDriver()
|
||||
}
|
||||
|
|
@ -44,8 +46,11 @@ open class NetworkService {
|
|||
/// Creates new instance of NetworkService with given Alamofire session manager
|
||||
///
|
||||
/// - Parameter sessionManager: Alamofire.SessionManager to use for requests
|
||||
public init(sessionManager: Alamofire.SessionManager) {
|
||||
public init(sessionManager: Alamofire.SessionManager,
|
||||
acceptableStatusCodes: [Int] = Alamofire.SessionManager.defaultAcceptableStatusCodes) {
|
||||
|
||||
self.sessionManager = sessionManager
|
||||
self.acceptableStatusCodes = acceptableStatusCodes
|
||||
}
|
||||
|
||||
/// Perform reactive request to get mapped ObservableMappable model and http response
|
||||
|
|
@ -55,7 +60,8 @@ open class NetworkService {
|
|||
public func rxRequest<T: ObservableMappable>(with parameters: ApiRequestParameters)
|
||||
-> Observable<(response: HTTPURLResponse, model: T)> where T.ModelType == T {
|
||||
|
||||
return sessionManager.rx.responseObservableModel(requestParameters: parameters)
|
||||
return sessionManager.rx.responseObservableModel(requestParameters: parameters,
|
||||
acceptableStatusCodes: acceptableStatusCodes)
|
||||
.counterTracking(for: self)
|
||||
}
|
||||
|
||||
|
|
@ -66,7 +72,8 @@ open class NetworkService {
|
|||
public func rxRequest<T: ImmutableMappable>(with parameters: ApiRequestParameters)
|
||||
-> Observable<(response: HTTPURLResponse, model: T)> {
|
||||
|
||||
return sessionManager.rx.responseModel(requestParameters: parameters)
|
||||
return sessionManager.rx.responseModel(requestParameters: parameters,
|
||||
acceptableStatusCodes: acceptableStatusCodes)
|
||||
.counterTracking(for: self)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,18 +25,29 @@ import RxSwift
|
|||
import RxAlamofire
|
||||
import ObjectMapper
|
||||
|
||||
public extension Alamofire.SessionManager {
|
||||
|
||||
/// The default acceptable range 200...299
|
||||
static let defaultAcceptableStatusCodes = Array(200..<300)
|
||||
|
||||
}
|
||||
|
||||
public extension Reactive where Base: Alamofire.SessionManager {
|
||||
|
||||
/// Method which executes request with given api parameters
|
||||
///
|
||||
/// - Parameter requestParameters: api parameters to pass Alamofire
|
||||
/// - Returns: Observable with request
|
||||
func apiRequest(requestParameters: ApiRequestParameters) -> Observable<DataRequest> {
|
||||
func apiRequest(requestParameters: ApiRequestParameters,
|
||||
acceptableStatusCodes: [Int] = Base.defaultAcceptableStatusCodes)
|
||||
-> Observable<DataRequest> {
|
||||
|
||||
return request(requestParameters.method,
|
||||
requestParameters.url,
|
||||
parameters: requestParameters.parameters,
|
||||
encoding: requestParameters.encoding,
|
||||
headers: requestParameters.headers)
|
||||
.map { $0.validate(statusCode: acceptableStatusCodes) }
|
||||
}
|
||||
|
||||
/// Method which executes request and serializes response into target object
|
||||
|
|
@ -45,11 +56,12 @@ public extension Reactive where Base: Alamofire.SessionManager {
|
|||
/// - Parameter mappingQueue: The dispatch queue to use for mapping
|
||||
/// - Returns: Observable with HTTP URL Response and target object
|
||||
func responseModel<T: ImmutableMappable>(requestParameters: ApiRequestParameters,
|
||||
mappingQueue: DispatchQueue = .global())
|
||||
mappingQueue: DispatchQueue = .global(),
|
||||
acceptableStatusCodes: [Int] = Base.defaultAcceptableStatusCodes)
|
||||
-> Observable<(response: HTTPURLResponse, model: T)> {
|
||||
|
||||
return apiRequest(requestParameters: requestParameters)
|
||||
.flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) }
|
||||
return apiRequest(requestParameters: requestParameters, acceptableStatusCodes: acceptableStatusCodes)
|
||||
.flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) }
|
||||
}
|
||||
|
||||
/// Method which executes request and serializes response into array of target objects
|
||||
|
|
@ -58,11 +70,12 @@ public extension Reactive where Base: Alamofire.SessionManager {
|
|||
/// - Parameter mappingQueue: The dispatch queue to use for mapping
|
||||
/// - Returns: Observable with HTTP URL Response and array of target objects
|
||||
func responseModel<T: ImmutableMappable>(requestParameters: ApiRequestParameters,
|
||||
mappingQueue: DispatchQueue = .global())
|
||||
mappingQueue: DispatchQueue = .global(),
|
||||
acceptableStatusCodes: [Int] = Base.defaultAcceptableStatusCodes)
|
||||
-> Observable<(response: HTTPURLResponse, models: [T])> {
|
||||
|
||||
return apiRequest(requestParameters: requestParameters)
|
||||
.flatMap { $0.validate().rx.apiResponse(mappingQueue: mappingQueue) }
|
||||
return apiRequest(requestParameters: requestParameters, acceptableStatusCodes: acceptableStatusCodes)
|
||||
.flatMap { $0.rx.apiResponse(mappingQueue: mappingQueue) }
|
||||
}
|
||||
|
||||
/// Method which executes request and serializes response into target object
|
||||
|
|
@ -71,11 +84,12 @@ public extension Reactive where Base: Alamofire.SessionManager {
|
|||
/// - Parameter mappingQueue: The dispatch queue to use for mapping
|
||||
/// - Returns: Observable with HTTP URL Response and target object
|
||||
func responseObservableModel<T: ObservableMappable>(requestParameters: ApiRequestParameters,
|
||||
mappingQueue: DispatchQueue = .global())
|
||||
mappingQueue: DispatchQueue = .global(),
|
||||
acceptableStatusCodes: [Int] = Base.defaultAcceptableStatusCodes)
|
||||
-> Observable<(response: HTTPURLResponse, model: T)> where T.ModelType == T {
|
||||
|
||||
return apiRequest(requestParameters: requestParameters)
|
||||
.flatMap { $0.validate().rx.observableApiResponse(mappingQueue: mappingQueue) }
|
||||
return apiRequest(requestParameters: requestParameters, acceptableStatusCodes: acceptableStatusCodes)
|
||||
.flatMap { $0.rx.observableApiResponse(mappingQueue: mappingQueue) }
|
||||
}
|
||||
|
||||
/// Method which executes request and serializes response into array of target objects
|
||||
|
|
@ -84,11 +98,12 @@ public extension Reactive where Base: Alamofire.SessionManager {
|
|||
/// - Parameter mappingQueue: The dispatch queue to use for mapping
|
||||
/// - Returns: Observable with HTTP URL Response and array of target objects
|
||||
func responseObservableModel<T: ObservableMappable>(requestParameters: ApiRequestParameters,
|
||||
mappingQueue: DispatchQueue = .global())
|
||||
mappingQueue: DispatchQueue = .global(),
|
||||
acceptableStatusCodes: [Int] = Base.defaultAcceptableStatusCodes)
|
||||
-> Observable<(response: HTTPURLResponse, models: [T])> where T.ModelType == T {
|
||||
|
||||
return apiRequest(requestParameters: requestParameters)
|
||||
.flatMap { $0.validate().rx.observableApiResponse(mappingQueue: mappingQueue) }
|
||||
return apiRequest(requestParameters: requestParameters, acceptableStatusCodes: acceptableStatusCodes)
|
||||
.flatMap { $0.rx.observableApiResponse(mappingQueue: mappingQueue) }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue