From a2ead58e16856bcdeb210f961939e4e1ba034819 Mon Sep 17 00:00:00 2001 From: CrunchieDCD <105612643+CrunchieDCD@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:54:31 +1300 Subject: [PATCH] Add persistent object storage (#5) * Add persistent object storage * Add remove persistent value function * Do persistent object storage a better way * Fix tests * Remove code that is no longer needed * PR Update Sources/GKStorageKit/Storage/ObjectStorageService.swift * PR Update Sources/GKStorageKit/Storage/ObjectStorageService.swift Co-authored-by: Gligor Kotushevski --- .../Default Impl/DefaultStorage.swift | 8 ++++++++ .../GKStorageKit/Protocol/StorageProtocol.swift | 2 ++ Sources/GKStorageKit/StorageKit.swift | 4 ++++ .../Test Helpers/TestStorage.swift | 16 ++++++++++++++++ 4 files changed, 30 insertions(+) diff --git a/Sources/GKStorageKit/Default Impl/DefaultStorage.swift b/Sources/GKStorageKit/Default Impl/DefaultStorage.swift index ae57da3..20cf424 100644 --- a/Sources/GKStorageKit/Default Impl/DefaultStorage.swift +++ b/Sources/GKStorageKit/Default Impl/DefaultStorage.swift @@ -16,6 +16,10 @@ public final class DefaultStorage: StorageProtocol { public var storageIdentifier: String { return "defaultStorage" } + + public var persistentStorageIdentifier: String { + return "persistentStorage" + } public var secureStorage: SecureStorage { guard let valetIdentifier = Identifier(nonEmpty: storageIdentifier) else { @@ -27,6 +31,10 @@ public final class DefaultStorage: StorageProtocol { public var userDefaults: UserDefaults { return UserDefaults(suiteName: storageIdentifier)! } + + public var persistentUserDefaults: UserDefaults { + return UserDefaults(suiteName: persistentStorageIdentifier)! + } public var fileStorageUrl: URL { // documents storage is the default fileStorageUrl diff --git a/Sources/GKStorageKit/Protocol/StorageProtocol.swift b/Sources/GKStorageKit/Protocol/StorageProtocol.swift index 480573a..39e2b62 100644 --- a/Sources/GKStorageKit/Protocol/StorageProtocol.swift +++ b/Sources/GKStorageKit/Protocol/StorageProtocol.swift @@ -10,7 +10,9 @@ import Foundation public protocol StorageProtocol { var storageIdentifier: String { get } + var persistentStorageIdentifier: String { get } var secureStorage: SecureStorage { get } var userDefaults: UserDefaults { get } + var persistentUserDefaults: UserDefaults { get } var fileStorageUrl: URL { get } } diff --git a/Sources/GKStorageKit/StorageKit.swift b/Sources/GKStorageKit/StorageKit.swift index f25390e..3a59756 100644 --- a/Sources/GKStorageKit/StorageKit.swift +++ b/Sources/GKStorageKit/StorageKit.swift @@ -49,6 +49,10 @@ public final class StorageKit { public class var objectStorage: ObjectStorageInterface { return ObjectStorageService(storage: StorageKitConfiguration.shared.storage.userDefaults) } + + public class var persistentObjectStorage: ObjectStorageInterface { + return ObjectStorageService(storage: StorageKitConfiguration.shared.storage.persistentUserDefaults) + } public class var fileStorage: FileStorageInterface { return FileStorageService(documentsUrl: StorageKitConfiguration.shared.storage.fileStorageUrl) diff --git a/Tests/GKStorageKitTests/Test Helpers/TestStorage.swift b/Tests/GKStorageKitTests/Test Helpers/TestStorage.swift index 87c5558..fef1d0f 100644 --- a/Tests/GKStorageKitTests/Test Helpers/TestStorage.swift +++ b/Tests/GKStorageKitTests/Test Helpers/TestStorage.swift @@ -15,6 +15,10 @@ final class TestStorage: StorageProtocol { var storageIdentifier: String { return "testStorage" } + + var persistentStorageIdentifier: String { + return "testPersistentStorage" + } var secureStorage: SecureStorage { return Valet.iCloudValet(with: Identifier(nonEmpty: storageIdentifier)!, accessibility: .whenUnlocked) @@ -23,6 +27,10 @@ final class TestStorage: StorageProtocol { var userDefaults: UserDefaults { return UserDefaults(suiteName: storageIdentifier)! } + + var persistentUserDefaults: UserDefaults { + return UserDefaults(suiteName: persistentStorageIdentifier)! + } var fileStorageUrl: URL { return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! @@ -34,6 +42,10 @@ final class ErrorStorage: StorageProtocol { var storageIdentifier: String { return "errorTestStorage" } + + var persistentStorageIdentifier: String { + return "errorTestPersistentStorage" + } var secureStorage: SecureStorage { return ErrorValet() @@ -42,6 +54,10 @@ final class ErrorStorage: StorageProtocol { var userDefaults: UserDefaults { return UserDefaults(suiteName: storageIdentifier)! } + + var persistentUserDefaults: UserDefaults { + return UserDefaults(suiteName: persistentStorageIdentifier)! + } var fileStorageUrl: URL { return URL(string: "errorUrl")!