Refactoring
This commit is contained in:
parent
c49fce14a2
commit
bd47336cfb
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue