From 598ae1adadd82e72ad54d1feffe713c630ffe297 Mon Sep 17 00:00:00 2001 From: Ivan Babkin Date: Wed, 19 Dec 2018 12:58:05 +0300 Subject: [PATCH] Throwing error when using invalid parameters --- .../Alamofire/SessionManager+Extensions.swift | 48 ++++++++++++------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift index d098971c..7190913f 100644 --- a/Sources/Extensions/Alamofire/SessionManager+Extensions.swift +++ b/Sources/Extensions/Alamofire/SessionManager+Extensions.swift @@ -24,6 +24,17 @@ import Alamofire import RxSwift import RxAlamofire +/// Enum that represents wrong usage of requset parameters +/// +/// - getMethodForbidden: invalid usage of get method +/// - urlEncodingForbidden: invalid usage of URLEncoding +enum RequestUsageError: Error { + + case getMethodForbidden + case urlEncodingForbidden + +} + public extension Reactive where Base: SessionManager { @@ -39,25 +50,21 @@ public extension Reactive where Base: SessionManager { public func request(_ method: Alamofire.HTTPMethod, _ url: URLConvertible, parameters: [Any]? = nil, - encoding: ParameterEncoding = JSONEncoding.default, + encoding: JSONEncoding = .default, headers: [String: String]? = nil) -> Observable { return Observable.deferred { - let urlRequest = try URLRequest(url: try url.asURL(), method: method, headers: headers) - - if let encoding = encoding as? JSONEncoding { - let encodedUrlRequest = try encoding.encode(urlRequest, withJSONObject: parameters) - self.request(urlRequest: encodedUrlRequest) - } else { - assertionFailure("Invalid encoding type") - } - - if method == .get { + + guard method != .get else { assertionFailure("Unable to pass array in get request") + throw RequestUsageError.getMethodForbidden } - - return self.request(urlRequest: urlRequest) + + let urlRequest = try URLRequest(url: try url.asURL(), method: method, headers: headers) + let encodedUrlRequest = try encoding.encode(urlRequest, withJSONObject: parameters) + + return self.request(urlRequest: encodedUrlRequest) } } @@ -78,11 +85,16 @@ public extension Reactive where Base: SessionManager { encoding: requestParameters.encoding, headers: requestParameters.headers) case .array(let parameters)?: - requestObservable = request(requestParameters.method, - requestParameters.url, - parameters: parameters, - encoding: requestParameters.encoding, - headers: requestParameters.headers) + if let encoding = requestParameters.encoding as? JSONEncoding { + requestObservable = request(requestParameters.method, + requestParameters.url, + parameters: parameters, + encoding: encoding, + headers: requestParameters.headers) + } else { + assertionFailure("Invalid encoding type with array parameter") + requestObservable = .error(RequestUsageError.urlEncodingForbidden) + } case .none: requestObservable = request(requestParameters.method, requestParameters.url,