Skip to content

Commit

Permalink
Lints code + clean
Browse files Browse the repository at this point in the history
  • Loading branch information
s4cha committed Jul 29, 2020
1 parent 05f89f6 commit adcc6ad
Show file tree
Hide file tree
Showing 21 changed files with 241 additions and 264 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ let package = Package(
products: [.library(name: "Networking", targets: ["Networking"])],
targets: [
.target(name: "Networking"),
.testTarget(name: "NetworkingTests", dependencies: ["Networking"]),
.testTarget(name: "NetworkingTests", dependencies: ["Networking"])
]
)
6 changes: 3 additions & 3 deletions Sources/Networking/Calls/NetworkingClient+Data.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ public extension NetworkingClient {
func get(_ route: String, params: Params = Params()) -> AnyPublisher<Data, Error> {
request(.get, route, params: params).publisher()
}

func post(_ route: String, params: Params = Params()) -> AnyPublisher<Data, Error> {
request(.post, route, params: params).publisher()
}

func put(_ route: String, params: Params = Params()) -> AnyPublisher<Data, Error> {
request(.put, route, params: params).publisher()
}

func delete(_ route: String, params: Params = Params()) -> AnyPublisher<Data, Error> {
request(.delete, route, params: params).publisher()
}
Expand Down
36 changes: 22 additions & 14 deletions Sources/Networking/Calls/NetworkingClient+Multipart.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,33 @@ import Foundation
import Combine

public extension NetworkingClient {

func post(_ route: String, params: Params = Params(), multipartData: MultipartData) -> AnyPublisher<(Data?, Progress), Error> {

func post(_ route: String,
params: Params = Params(),
multipartData: MultipartData) -> AnyPublisher<(Data?, Progress), Error> {
return post(route, params: params, multipartData: [multipartData])
}

func put(_ route: String, params: Params = Params(), multipartData: MultipartData) -> AnyPublisher<(Data?, Progress), Error> {

func put(_ route: String,
params: Params = Params(),
multipartData: MultipartData) -> AnyPublisher<(Data?, Progress), Error> {
return put(route, params: params, multipartData: [multipartData])
}

// Allow multiple multipart data
func post(_ route: String, params: Params = Params(), multipartData: [MultipartData]) -> AnyPublisher<(Data?, Progress), Error> {
let r = request(.post, route, params: params)
r.multipartData = multipartData
return r.uploadPublisher()
func post(_ route: String,
params: Params = Params(),
multipartData: [MultipartData]) -> AnyPublisher<(Data?, Progress), Error> {
let req = request(.post, route, params: params)
req.multipartData = multipartData
return req.uploadPublisher()
}

func put(_ route: String, params: Params = Params(), multipartData: [MultipartData]) -> AnyPublisher<(Data?, Progress), Error> {
let r = request(.put, route, params: params)
r.multipartData = multipartData
return r.uploadPublisher()

func put(_ route: String,
params: Params = Params(),
multipartData: [MultipartData]) -> AnyPublisher<(Data?, Progress), Error> {
let req = request(.put, route, params: params)
req.multipartData = multipartData
return req.uploadPublisher()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,48 +14,48 @@ public protocol NetworkingJSONDecodable {
}

public extension NetworkingClient {

func get<T: NetworkingJSONDecodable>(_ route: String,
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
return get(route, params: params)
.tryMap { json -> T in try NetworkingParser().toModel(json, keypath: keypath) }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}

// Array version
func get<T: NetworkingJSONDecodable>(_ route: String,
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<[T], Error> {
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<[T], Error> {
let keypath = keypath ?? defaultCollectionParsingKeyPath
return get(route, params: params)
.map { json -> [T] in NetworkingParser().toModels(json, keypath: keypath) }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}

func post<T: NetworkingJSONDecodable>(_ route: String,
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
return post(route, params: params)
.tryMap { json -> T in try NetworkingParser().toModel(json, keypath: keypath) }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}

func put<T: NetworkingJSONDecodable>(_ route: String,
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
return put(route, params: params)
.tryMap { json -> T in try NetworkingParser().toModel(json, keypath: keypath) }
.receive(on: RunLoop.main)
.eraseToAnyPublisher()
}

func delete<T: NetworkingJSONDecodable>(_ route: String,
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
params: Params = Params(),
keypath: String? = nil) -> AnyPublisher<T, Error> {
return delete(route, params: params)
.tryMap { json -> T in try NetworkingParser().toModel(json, keypath: keypath) }
.receive(on: RunLoop.main)
Expand All @@ -65,7 +65,7 @@ public extension NetworkingClient {

// Provide default implementation for Decodable models.
public extension NetworkingJSONDecodable where Self: Decodable {

static func decode(_ json: Any) throws -> Self {
let decoder = JSONDecoder()
let data = try JSONSerialization.data(withJSONObject: json, options: [])
Expand Down
26 changes: 13 additions & 13 deletions Sources/Networking/Calls/NetworkingClient+Requests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,31 @@ import Foundation
import Combine

public extension NetworkingClient {

func getRequest(_ route: String, params: Params = Params()) -> NetworkingRequest {
request(.get, route, params: params)
}

func postRequest(_ route: String, params: Params = Params()) -> NetworkingRequest {
request(.post, route, params: params)
}

func putRequest(_ route: String, params: Params = Params()) -> NetworkingRequest {
request(.put, route, params: params)
}

func deleteRequest(_ route: String, params: Params = Params()) -> NetworkingRequest {
request(.delete, route, params: params)
}

internal func request(_ httpVerb: HTTPVerb, _ route: String, params: Params = Params()) -> NetworkingRequest {
let r = NetworkingRequest()
r.baseURL = baseURL
r.logLevels = logLevels
r.headers = headers
r.httpVerb = httpVerb
r.route = route
r.params = params
return r
let req = NetworkingRequest()
req.baseURL = baseURL
req.logLevels = logLevels
req.headers = headers
req.httpVerb = httpVerb
req.route = route
req.params = params
return req
}
}
8 changes: 4 additions & 4 deletions Sources/Networking/Calls/NetworkingClient+Void.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,25 @@ import Foundation
import Combine

public extension NetworkingClient {

func get(_ route: String, params: Params = Params()) -> AnyPublisher<Void, Error> {
get(route, params: params)
.map { (data: Data) -> Void in () }
.eraseToAnyPublisher()
}

func post(_ route: String, params: Params = Params()) -> AnyPublisher<Void, Error> {
post(route, params: params)
.map { (data: Data) -> Void in () }
.eraseToAnyPublisher()
}

func put(_ route: String, params: Params = Params()) -> AnyPublisher<Void, Error> {
put(route, params: params)
.map { (data: Data) -> Void in () }
.eraseToAnyPublisher()
}

func delete(_ route: String, params: Params = Params()) -> AnyPublisher<Void, Error> {
delete(route, params: params)
.map { (data: Data) -> Void in () }
Expand Down
1 change: 0 additions & 1 deletion Sources/Networking/Logging/NetworkingLogLevel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,3 @@ public enum NetworkingLogLevel {
case info
case debug
}

12 changes: 6 additions & 6 deletions Sources/Networking/Logging/NetworkingLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import Foundation

class NetworkingLogger {

var logLevels = NetworkingLogLevel.off

func log(request: URLRequest) {
guard logLevels != .off else {
return
Expand All @@ -22,7 +22,7 @@ class NetworkingLogger {
logBody(request)
}
}

func log(response: URLResponse, data: Data) {
guard logLevels != .off else {
return
Expand All @@ -36,11 +36,11 @@ class NetworkingLogger {
}
}
}

private func logHeaders(_ urlRequest: URLRequest) {
if let allHTTPHeaderFields = urlRequest.allHTTPHeaderFields {
for (k, v) in allHTTPHeaderFields {
print(" \(k) : \(v)")
for (key, value) in allHTTPHeaderFields {
print(" \(key) : \(value)")
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion Sources/Networking/Multipart/MultipartData.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public struct MultipartData {
let fileData: Data
let fileName: String
let mimeType: String

public init(name: String, fileData: Data, fileName: String, mimeType: String) {
self.name = name
self.fileData = fileData
Expand Down
7 changes: 3 additions & 4 deletions Sources/Networking/NetworkingClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import Foundation
import Combine

public struct NetworkingClient {

/**
Instead of using the same keypath for every call eg: "collection",
this enables to use a default keypath for parsing collections.
Expand All @@ -22,11 +22,10 @@ public struct NetworkingClient {
get { return logger.logLevels }
set { logger.logLevels = newValue }
}

private let logger = NetworkingLogger()

public init(baseURL: String) {
self.baseURL = baseURL
}
}

22 changes: 10 additions & 12 deletions Sources/Networking/NetworkingError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ public struct NetworkingError: Error {
public enum Status: Int {
case unknown = -1
case networkUnreachable = 0

case unableToParseResponse = 1

// 4xx Client Error
case badRequest = 400
case unauthorized = 401
Expand Down Expand Up @@ -44,14 +44,14 @@ public struct NetworkingError: Error {
case tooManyRequests = 429
case requestHeaderFieldsTooLarge = 431
case unavailableForLegalReasons = 451

// 4xx nginx
case noResponse = 444
case sslCertificateError = 495
case sslCertificateRequired = 496
case httpRequestSentToHTTPSPort = 497
case clientClosedRequest = 499

// 5xx Server Error
case internalServerError = 500
case notImplemented = 501
Expand All @@ -65,34 +65,32 @@ public struct NetworkingError: Error {
case notExtended = 510
case networkAuthenticationRequired = 511
}

public var status: Status
public var code: Int { return status.rawValue }

public var jsonPayload: Any?

public init(httpStatusCode: Int) {
self.status = Status(rawValue: httpStatusCode) ?? .unknown
}

}

extension NetworkingError: CustomStringConvertible {

public var description: String {
return String(describing: self.status)
.replacingOccurrences(of: "(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])",
with: " ",
options: [.regularExpression])
.capitalized
}

}

extension NetworkingError {

public static var unableToParseResponse: NetworkingError {
return NetworkingError(httpStatusCode: Status.unableToParseResponse.rawValue)
}

}
Loading

0 comments on commit adcc6ad

Please sign in to comment.