Skip to content

Commit

Permalink
Merge pull request #14 from HelioMesquita/feature/update_xcode15.3
Browse files Browse the repository at this point in the history
Update project to Xcode 15.3
  • Loading branch information
HelioMesquita committed Mar 30, 2024
2 parents 2ff61cd + 88e34ce commit c2c0b1e
Show file tree
Hide file tree
Showing 100 changed files with 3,189 additions and 3,164 deletions.
2 changes: 1 addition & 1 deletion Infrastructure/HttpVerb.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
import Foundation

public enum HttpVerbs: String {
case GET, POST, PUT, PATCH, DELETE
case GET, POST, PUT, PATCH, DELETE
}
63 changes: 33 additions & 30 deletions Infrastructure/Logger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,43 @@

internal class Logger {

static func show(request: URLRequest, _ response: URLResponse?, _ data: Data?, _ error: Error?) {
#if DEBUG
var requestLog = "REQUEST=================================================\n"
requestLog += "🎯🎯🎯 URL: \(request.url?.absoluteString ?? "")\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "⚒⚒⚒ HTTP METHOD: \(request.httpMethod ?? "")\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "📝📝📝 HEADERS: \(request.allHTTPHeaderFields ?? [:])\n"
requestLog += "-----------------------------------------------------------\n"
static func show(request: URLRequest, _ response: URLResponse?, _ data: Data?, _ error: Error?) {
#if DEBUG
var requestLog = "REQUEST=================================================\n"
requestLog += "🎯🎯🎯 URL: \(request.url?.absoluteString ?? "")\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "⚒⚒⚒ HTTP METHOD: \(request.httpMethod ?? "")\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "📝📝📝 HEADERS: \(request.allHTTPHeaderFields ?? [:])\n"
requestLog += "-----------------------------------------------------------\n"

requestLog += "RESPONSE================================================\n"
requestLog += "⚠️⚠️⚠️ STATUS CODE: \((response as? HTTPURLResponse)?.statusCode ?? 0)\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "📒📒📒 HEADERS: \((response as? HTTPURLResponse)?.allHeaderFields as? [String: String] ?? [:])\n"
requestLog += "-----------------------------------------------------------\n"
requestLog += "RESPONSE================================================\n"
requestLog += "⚠️⚠️⚠️ STATUS CODE: \((response as? HTTPURLResponse)?.statusCode ?? 0)\n"
requestLog += "-----------------------------------------------------------\n"
requestLog +=
"📒📒📒 HEADERS: \((response as? HTTPURLResponse)?.allHeaderFields as? [String: String] ?? [:])\n"
requestLog += "-----------------------------------------------------------\n"

if let dataObj = data {
do {
let json = try JSONSerialization.jsonObject(with: dataObj, options: .mutableContainers)
let prettyPrintedData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
requestLog += "⬇️⬇️⬇️ RESPONSE DATA: \n\(String(bytes: prettyPrintedData, encoding: .utf8) ?? "")"
} catch {
requestLog += "⬇️⬇️⬇️ RESPONSE DATA: \n\(String(data: dataObj, encoding: .utf8) ?? "")"
}
requestLog += "\n===========================================================\n"
if let dataObj = data {
do {
let json = try JSONSerialization.jsonObject(with: dataObj, options: .mutableContainers)
let prettyPrintedData = try JSONSerialization.data(
withJSONObject: json, options: .prettyPrinted)
requestLog +=
"⬇️⬇️⬇️ RESPONSE DATA: \n\(String(bytes: prettyPrintedData, encoding: .utf8) ?? "")"
} catch {
requestLog += "⬇️⬇️⬇️ RESPONSE DATA: \n\(String(data: dataObj, encoding: .utf8) ?? "")"
}
requestLog += "\n===========================================================\n"
}

if let error = error {
requestLog += "⬇️⬇️⬇️ RESPONSE ERROR: \n\(error)"
requestLog += "\n===========================================================\n"
}
if let error = error {
requestLog += "⬇️⬇️⬇️ RESPONSE ERROR: \n\(error)"
requestLog += "\n===========================================================\n"
}

print(requestLog)
#endif
}
print(requestLog)
#endif
}

}
2 changes: 1 addition & 1 deletion Infrastructure/RequestDecodable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
import Foundation

public protocol RequestDecodable: Decodable {
init()
init()
}
20 changes: 10 additions & 10 deletions Infrastructure/RequestError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ import Foundation

public enum RequestError: Int, Error, LocalizedError, Equatable {

public typealias RawValue = Int
public typealias RawValue = Int

case unknownError = 0
case invalidParser = 1
case badRequest = 400
case unauthorized = 401
case forbidden = 403
case notFound = 404
case unknownError = 0
case invalidParser = 1
case badRequest = 400
case unauthorized = 401
case forbidden = 403
case notFound = 404

public var localizedDescription: String {
return Text(rawValue: String(describing: self))?.value ?? ""
}
public var localizedDescription: String {
return Text(rawValue: String(describing: self))?.value ?? ""
}

}
54 changes: 27 additions & 27 deletions Infrastructure/RequestProviderProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,42 @@
import Foundation

public protocol RequestProviderProtocol {
var scheme: String { get }
var host: String { get }
var path: String { get }
var bodyParameters: Encodable? { get }
var queryParameters: [URLQueryItem]? { get }
var headers: [String: String] { get }
var httpVerb: HttpVerbs { get }
var asURLRequest: URLRequest { get }
var scheme: String { get }
var host: String { get }
var path: String { get }
var bodyParameters: Encodable? { get }
var queryParameters: [URLQueryItem]? { get }
var headers: [String: String] { get }
var httpVerb: HttpVerbs { get }
var asURLRequest: URLRequest { get }
}

public extension RequestProviderProtocol {
extension RequestProviderProtocol {

var asURLRequest: URLRequest {
var components = URLComponents()
components.scheme = scheme
components.host = host
components.path = path
components.queryItems = queryParameters
public var asURLRequest: URLRequest {
var components = URLComponents()
components.scheme = scheme
components.host = host
components.path = path
components.queryItems = queryParameters

var request = URLRequest(url: components.url!)
request.httpMethod = httpVerb.rawValue
headers.forEach { request.addValue($0.value, forHTTPHeaderField: $0.key) }
var request = URLRequest(url: components.url!)
request.httpMethod = httpVerb.rawValue
headers.forEach { request.addValue($0.value, forHTTPHeaderField: $0.key) }

if let bodyParameters = bodyParameters, let data = bodyParameters.toJSONData() {
request.httpBody = data
}

return request
if let bodyParameters = bodyParameters, let data = bodyParameters.toJSONData() {
request.httpBody = data
}

return request
}

}

fileprivate extension Encodable {
extension Encodable {

func toJSONData() -> Data? {
return try? JSONEncoder().encode(self)
}
fileprivate func toJSONData() -> Data? {
return try? JSONEncoder().encode(self)
}

}
16 changes: 8 additions & 8 deletions Infrastructure/Resources/Text.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ import Foundation

internal enum Text: String {

case unknownError
case invalidParser
case badRequest
case unauthorized
case notFound
case unknownError
case invalidParser
case badRequest
case unauthorized
case notFound

public var value: String {
return String(describing: self.rawValue).localized()
}
public var value: String {
return String(describing: self.rawValue).localized()
}

}
68 changes: 35 additions & 33 deletions Infrastructure/ServiceProviderProtocol.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,48 +10,50 @@ import Foundation
import PromiseKit

public protocol ServiceProviderProtocol {
var urlSession: URLSession { get }
var jsonDecoder: JSONDecoder { get }
func execute<T: RequestDecodable>(request: RequestProviderProtocol, parser: T.Type) -> Promise<T>
var urlSession: URLSession { get }
var jsonDecoder: JSONDecoder { get }
func execute<T: RequestDecodable>(request: RequestProviderProtocol, parser: T.Type) -> Promise<T>
}

extension ServiceProviderProtocol {

public var jsonDecoder: JSONDecoder {
return JSONDecoder()
}
public var jsonDecoder: JSONDecoder {
return JSONDecoder()
}

public func execute<T: RequestDecodable>(request: RequestProviderProtocol, parser: T.Type)
-> Promise<T>
{
return Promise<T> { seal in
urlSession.dataTask(with: request.asURLRequest) { (data, response, error) in
Logger.show(request: request.asURLRequest, response, data, error)

public func execute<T: RequestDecodable>(request: RequestProviderProtocol, parser: T.Type) -> Promise<T> {
return Promise<T> { seal in
urlSession.dataTask(with: request.asURLRequest) { (data, response, error) in
Logger.show(request: request.asURLRequest, response, data, error)

guard let statusCode = (response as? HTTPURLResponse)?.statusCode, let data = data else {
seal.reject(RequestError.unknownError)
return
}

if 200...299 ~= statusCode {
do {
let model = try self.jsonDecoder.decode(T.self, from: data)
seal.fulfill(model)
} catch {
seal.reject(RequestError.invalidParser)
}

} else {
seal.reject(self.identify(statusCode: statusCode))
}
}.resume()
guard let statusCode = (response as? HTTPURLResponse)?.statusCode, let data = data else {
seal.reject(RequestError.unknownError)
return
}
}

fileprivate func identify(statusCode: Int) -> RequestError {
guard let error = RequestError(rawValue: statusCode) else {
return .unknownError
if 200...299 ~= statusCode {
do {
let model = try self.jsonDecoder.decode(T.self, from: data)
seal.fulfill(model)
} catch {
seal.reject(RequestError.invalidParser)
}

} else {
seal.reject(self.identify(statusCode: statusCode))
}
}.resume()
}
}

return error
fileprivate func identify(statusCode: Int) -> RequestError {
guard let error = RequestError(rawValue: statusCode) else {
return .unknownError
}

return error
}

}
10 changes: 5 additions & 5 deletions Infrastructure/Utils/Bundle+Utils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@

import Foundation

internal extension Bundle {
extension Bundle {

private static let bundleID = "com.infrastructure"
private static let bundleID = "com.infrastructure"

static var module: Bundle {
return Bundle(identifier: bundleID) ?? .main
}
static var module: Bundle {
return Bundle(identifier: bundleID) ?? .main
}

}
8 changes: 4 additions & 4 deletions Infrastructure/Utils/String+Utils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@

import Foundation

internal extension String {
extension String {

func localized(withComment comment: String = "") -> String {
return NSLocalizedString(self, bundle: Bundle.module, comment: comment)
}
func localized(withComment comment: String = "") -> String {
return NSLocalizedString(self, bundle: Bundle.module, comment: comment)
}

}
16 changes: 8 additions & 8 deletions InfrastructureTests/BundleTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@
// Copyright © 2020 Hélio Mesquita. All rights reserved.
//

import Quick
import Nimble
import Quick

@testable import Infrastructure

class BundleTests: QuickSpec {

override func spec() {
super.spec()
override class func spec() {
super.spec()

describe("#module") {
it("returns module name") {
expect(Bundle.module.bundleIdentifier).to(equal("com.infrastructure"))
}
}
describe("#module") {
it("returns module name") {
expect(Bundle.module.bundleIdentifier).to(equal("com.infrastructure"))
}
}
}

}
Loading

0 comments on commit c2c0b1e

Please sign in to comment.