Refactoring

This commit is contained in:
Ivan Babkin 2018-12-18 16:10:46 +03:00
parent c49fce14a2
commit bd47336cfb
3 changed files with 56 additions and 38 deletions

View File

@ -26,35 +26,37 @@ import RxAlamofire
public extension Reactive where Base: SessionManager {
/**
Creates an observable of the `Request`.
- parameter method: Alamofire method object
- parameter url: An object adopting `URLConvertible`
- parameter parameters: An array of dictionaries containing all necessary options
- parameter encoding: The kind of encoding used to process parameters
- parameter header: A dictionary containing all the additional headers
- returns: An observable of the `Request`
*/
/// Creates an observable of the `Request`.
///
/// - Parameters:
/// - method: Alamofire method object
/// - url: An object adopting `URLConvertible`
/// - parameters: An array of dictionaries containing all necessary options
/// - encoding: The kind of encoding used to process parameters
/// - headers: A dictionary containing all the additional headers
/// - Returns: An observable of the `Request`
public func request(_ method: Alamofire.HTTPMethod,
_ url: URLConvertible,
parameters: [Parameters]? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: [String: String]? = nil
)
-> Observable<DataRequest>
{
parameters: [Any]? = nil,
encoding: ParameterEncoding = JSONEncoding.default,
headers: [String: String]? = nil)
-> Observable<DataRequest> {
return Observable.deferred {
var urlRequest = URLRequest(url: try url.asURL())
urlRequest.httpMethod = method.rawValue
urlRequest.allHTTPHeaderFields = headers
urlRequest.httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: [])
if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
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 {
assertionFailure("Unable to pass array in get request")
}
return self.request(urlRequest: urlRequest)
}
}
@ -69,18 +71,24 @@ public extension Reactive where Base: SessionManager {
let requestObservable: Observable<DataRequest>
switch requestParameters.parameters {
case .dictionary(let parameters):
case .dictionary(let parameters)?:
requestObservable = request(requestParameters.method,
requestParameters.url,
parameters: parameters,
encoding: requestParameters.encoding,
headers: requestParameters.headers)
case .array(let parameters):
case .array(let parameters)?:
requestObservable = request(requestParameters.method,
requestParameters.url,
parameters: parameters,
encoding: requestParameters.encoding,
headers: requestParameters.headers)
case .none:
requestObservable = request(requestParameters.method,
requestParameters.url,
parameters: nil as Parameters?,
encoding: requestParameters.encoding,
headers: requestParameters.headers)
}
return requestObservable

View File

@ -22,12 +22,14 @@
import Alamofire
/**
* Enum which keeps parameters type for request body
*/
public enum ParametersType {
case dictionary(_ parameter: Parameters?)
case array(_ array: [Parameters]?)
/// Enum which keeps parameters type for request body
///
/// - dictionary: dictionary parameter
/// - array: array parameter
public enum RequestParameters {
case dictionary(Parameters)
case array([Any])
}
/**
@ -37,7 +39,7 @@ public struct ApiRequestParameters {
let method: HTTPMethod
let url: URLConvertible
let parameters: ParametersType
let parameters: RequestParameters?
let encoding: ParameterEncoding
let headers: HTTPHeaders?
@ -49,22 +51,30 @@ public struct ApiRequestParameters {
self.method = method
self.url = url
self.parameters = .dictionary(parameters)
self.encoding = encoding
self.headers = headers
if let parameters = parameters {
self.parameters = .dictionary(parameters)
} else {
self.parameters = nil
}
}
public init(url: URLConvertible,
method: HTTPMethod = .get,
parameters: [Parameters]? = nil,
parameters: [Any]? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil) {
self.method = method
self.url = url
self.parameters = .array(parameters)
self.encoding = encoding
self.headers = headers
if let parameters = parameters {
self.parameters = .array(parameters)
} else {
self.parameters = nil
}
}
}

View File

@ -107,7 +107,7 @@ public extension NetworkServiceConfiguration {
/// - Returns: Initialized instance of ApiRequestParameters with given parameters.
func apiRequestParameters(relativeUrl: String,
method: HTTPMethod = .get,
parameters: [Parameters]? = nil,
parameters: [Any]? = nil,
requestEncoding: ParameterEncoding? = nil,
requestHeaders: HTTPHeaders? = nil) -> ApiRequestParameters {
return ApiRequestParameters(url: baseUrl + relativeUrl,