Skip to content

Commit

Permalink
Use associated enum for the key information
Browse files Browse the repository at this point in the history
  • Loading branch information
vadymmarkov committed Aug 3, 2018
1 parent b77619f commit 364d2ec
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 14 deletions.
8 changes: 4 additions & 4 deletions Source/Shared/Storage/HybridStorage.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,25 +27,25 @@ extension HybridStorage: StorageAware {
public func removeObject(forKey key: String) throws {
memoryStorage.removeObject(forKey: key)
try diskStorage.removeObject(forKey: key)
storageObservationRegistry.notifyObservers(about: .singleDeletion, in: self)
storageObservationRegistry.notifyObservers(about: .remove(key: key), in: self)
}

public func setObject(_ object: T, forKey key: String, expiry: Expiry? = nil) throws {
memoryStorage.setObject(object, forKey: key, expiry: expiry)
try diskStorage.setObject(object, forKey: key, expiry: expiry)
storageObservationRegistry.notifyObservers(about: .addition, in: self)
storageObservationRegistry.notifyObservers(about: .add(key: key), in: self)
}

public func removeAll() throws {
memoryStorage.removeAll()
try diskStorage.removeAll()
storageObservationRegistry.notifyObservers(about: .allDeletion, in: self)
storageObservationRegistry.notifyObservers(about: .removeAll, in: self)
}

public func removeExpiredObjects() throws {
memoryStorage.removeExpiredObjects()
try diskStorage.removeExpiredObjects()
storageObservationRegistry.notifyObservers(about: .expiredDeletion, in: self)
storageObservationRegistry.notifyObservers(about: .removeExpired, in: self)
}
}

Expand Down
21 changes: 16 additions & 5 deletions Source/Shared/Storage/StoreChange.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
public enum StorageChange {
case addition
case singleDeletion
case allDeletion
case expiredDeletion
public enum StorageChange: Equatable {
case add(key: String)
case remove(key: String)
case removeAll
case removeExpired
}

public func == (lhs: StorageChange, rhs: StorageChange) -> Bool {
switch (lhs, rhs) {
case (.add(let key1), .add(let key2)), (.remove(let key1), .remove(let key2)):
return key1 == key2
case (.removeAll, .removeAll), (.removeExpired, .removeExpired):
return true
default:
return false
}
}
10 changes: 9 additions & 1 deletion Tests/iOS/Tests/Storage/HybridStorageTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,14 @@ final class HybridStorageTests: XCTestCase {
try storage.removeExpiredObjects()
try storage.removeAll()

XCTAssertEqual(changes, [.addition, .addition, .singleDeletion, .expiredDeletion, .allDeletion])
let expectedChanges: [StorageChange] = [
.add(key: "user1"),
.add(key: "user2"),
.remove(key: "user1"),
.removeExpired,
.removeAll
]

XCTAssertEqual(changes, expectedChanges)
}
}
6 changes: 3 additions & 3 deletions Tests/iOS/Tests/Storage/StorageObservationRegistryTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ final class StorageObservationRegistryTests: XCTestCase {
change2 = change
}

registry.notifyObservers(about: .addition, in: storage)
registry.notifyObservers(about: .add(key: "key"), in: storage)

XCTAssertEqual(change1, .addition)
XCTAssertEqual(change2, .addition)
XCTAssertEqual(change1, StorageChange.add(key: "key"))
XCTAssertEqual(change2, StorageChange.add(key: "key"))
}
}
10 changes: 9 additions & 1 deletion Tests/iOS/Tests/Storage/StorageTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,14 @@ final class StorageTests: XCTestCase {
try storage.removeExpiredObjects()
try storage.removeAll()

XCTAssertEqual(changes, [.addition, .addition, .singleDeletion, .expiredDeletion, .allDeletion])
let expectedChanges: [StorageChange] = [
.add(key: "user1"),
.add(key: "user2"),
.remove(key: "user1"),
.removeExpired,
.removeAll
]

XCTAssertEqual(changes, expectedChanges)
}
}

0 comments on commit 364d2ec

Please sign in to comment.