Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
Fábio Salata committed Oct 30, 2021
2 parents 7735098 + ff3a405 commit 2423217
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 14 deletions.
4 changes: 4 additions & 0 deletions Counters.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

/* Begin PBXBuildFile section */
00039F6C268210520061B2A2 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00039F6B268210520061B2A2 /* String+Extensions.swift */; };
000BB85126B1CA79001B2C7E /* URLResponse+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 000BB85026B1CA79001B2C7E /* URLResponse+Extensions.swift */; };
001978632695D13B0092FFF1 /* UserDefaultsProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001978622695D13B0092FFF1 /* UserDefaultsProtocol.swift */; };
001978692695D1D80092FFF1 /* UserDefaultsMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001978682695D1D80092FFF1 /* UserDefaultsMock.swift */; };
002ABA3126666F5500F5B3C9 /* CreateCounterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 002ABA2626666F5500F5B3C9 /* CreateCounterViewModel.swift */; };
Expand Down Expand Up @@ -98,6 +99,7 @@

/* Begin PBXFileReference section */
00039F6B268210520061B2A2 /* String+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
000BB85026B1CA79001B2C7E /* URLResponse+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "URLResponse+Extensions.swift"; sourceTree = "<group>"; };
001978622695D13B0092FFF1 /* UserDefaultsProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsProtocol.swift; sourceTree = "<group>"; };
001978682695D1D80092FFF1 /* UserDefaultsMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsMock.swift; sourceTree = "<group>"; };
002ABA2626666F5500F5B3C9 /* CreateCounterViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateCounterViewModel.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -496,6 +498,7 @@
children = (
00A1035C26651BF200E661CD /* URL+Extensions.swift */,
00A1035826651BF200E661CD /* URLRequest+Extensions.swift */,
000BB85026B1CA79001B2C7E /* URLResponse+Extensions.swift */,
);
path = Extensions;
sourceTree = "<group>";
Expand Down Expand Up @@ -830,6 +833,7 @@
00A1036226651BF200E661CD /* APIClient.swift in Sources */,
007C166C2681046800EB74C5 /* ExampleCollectionViewCell.swift in Sources */,
00A103922665204200E661CD /* CustomTextField.swift in Sources */,
000BB85126B1CA79001B2C7E /* URLResponse+Extensions.swift in Sources */,
00CF700C269CB7D100F5AB5E /* ExamplesCollectionViewDataSource.swift in Sources */,
00A103AA266522C800E661CD /* UIImage+Badge.swift in Sources */,
002ABA3326666F5500F5B3C9 /* CreateCounterStrings.swift in Sources */,
Expand Down
31 changes: 18 additions & 13 deletions Counters/Counters/ViewModel/CountersViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@

import Foundation

final class CountersViewModel: ObservableObject {
final class CountersViewModel {
private let service: CountersService
private let userDefaults: UserDefaultsProtocol

private(set) var counters: [Counter] = []
private(set) var filteredCounters: [Counter] = []
private let firstTimeOpenKey = "FirstOpen"

private var cache = Cache.shared
private var countersCacheKey = "counters"

private(set) var viewState: ViewState = .noContent {
didSet {
switch viewState {
Expand All @@ -26,9 +29,21 @@ final class CountersViewModel: ObservableObject {
}
}

private var cache = Cache.shared
private var countersCacheKey = "counters"
// View bindings
var didChangeState: ((ViewState, ViewStateError?) -> Void)? = { (_, _) in
fatalError("Not implemented")
}

// Init
init(service: CountersService = CountersService(),
userDefaults: UserDefaultsProtocol = UserDefaults.standard) {
self.service = service
self.userDefaults = userDefaults
}
}

// MARK: - Computed properties
extension CountersViewModel {
var totalCountersText: String {
guard counters.count > 0 else {
return ""
Expand All @@ -50,16 +65,6 @@ final class CountersViewModel: ObservableObject {
var isFilteredCountersEmpty: Bool {
return filteredCounters.count == 0
}

// View bindings
var didChangeState: ((ViewState, ViewStateError?) -> Void)?

// Init
init(service: CountersService = CountersService(),
userDefaults: UserDefaultsProtocol = UserDefaults.standard) {
self.service = service
self.userDefaults = userDefaults
}
}

// MARK: - Public methods
Expand Down
2 changes: 1 addition & 1 deletion Counters/Network/APIClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class APIClient {
}

if let response = response as? HTTPURLResponse,
!(200..<300 ~= response.statusCode) {
response.validationStatus != .success {
completion(.failure(APIError(response)), response)
return
}
Expand Down
41 changes: 41 additions & 0 deletions Counters/Network/Extensions/URLResponse+Extensions.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
//
// URLResponse+Extensions.swift
// Counters
//
// Created by Fabio Cezar Salata on 28/07/21.
//

import Foundation

enum ValidationStatus {
case informational // 100
case success // 200
case redirection // 300
case clientError // 400
case serverError // 500
case unknown
}

extension URLResponse {
var validationStatus: ValidationStatus {
if let httpResponse = self as? HTTPURLResponse {
let statusCode = httpResponse.statusCode
switch statusCode {
case 0...199:
return .informational
case 200...299:
return .success
case 300...399:
return .redirection
case 400...499:
return .clientError
case 500...599:
return .serverError
default:
return .unknown
}
} else {
return .unknown
}
}
}

0 comments on commit 2423217

Please sign in to comment.