Skip to content

Commit d73a271

Browse files
Fixed broken data store test. Also cleaned up code comments and method names.
1 parent 00da17c commit d73a271

File tree

5 files changed

+146
-109
lines changed

5 files changed

+146
-109
lines changed

OptimizelySDKShared/OptimizelySDKShared/OPTLYDataStore.h

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#import <Foundation/Foundation.h>
1818

19+
// if adding data store data type, update: removeSavedEvents
1920
typedef NS_ENUM(NSUInteger, OPTLYDataStoreDataType)
2021
{
2122
OPTLYDataStoreDataTypeDatabase,
@@ -24,7 +25,7 @@ typedef NS_ENUM(NSUInteger, OPTLYDataStoreDataType)
2425
OPTLYDataStoreDataTypeUserProfile,
2526
};
2627

27-
// if adding event type, update: removeAllUserData!!
28+
// if adding event type, update: removeAllUserData
2829
typedef NS_ENUM(NSUInteger, OPTLYDataStoreEventType)
2930
{
3031
OPTLYDataStoreEventTypeImpression,
@@ -50,7 +51,7 @@ typedef NS_ENUM(NSUInteger, OPTLYDataStoreEventType)
5051
* Wipes all Optimizely data (saved and cached).
5152
*
5253
**/
53-
- (void)removeAll;
54+
- (void)removeAll:(NSError * _Nullable * _Nullable)error;
5455

5556
// -------- File Storage --------
5657
// Persists data in a file format using NSFileManager.
@@ -144,116 +145,123 @@ typedef NS_ENUM(NSUInteger, OPTLYDataStoreEventType)
144145
// If data is cached, then the events are stored in a runtime in-memory queue.
145146
// If data is not cached, the events are stored in an SQLite table.
146147
// Events are only persisted in the SQLite table for iOS platforms.
147-
// tvOS events are only cached to save on very limited memory usage.
148-
// A future enhancement for tvOS is to store data in iCloud.
148+
// tvOS events are only cached to save on very limited memory availability.
149+
// A future enhancement for tvOS is to store event data in iCloud.
149150

150151
/**
151152
* Saves an event.
152153
*
153154
* @param data The data to be saved.
154155
* @param eventType The event type of the data that needs to be saved.
155-
* @param cacheData Specify if the data should be cached (default is true for tvOS).
156+
* @param cachedData Specify if the data should be saved in the in-memory
157+
* cache and not saved in the database (this is always true for tvOS).
156158
* @param error An error object is returned if an error occurs.
157159
*/
158160
- (void)saveData:(nonnull NSDictionary *)data
159161
eventType:(OPTLYDataStoreEventType)eventType
160-
cacheData:(bool)cacheData
162+
cachedData:(bool)cachedData
161163
error:(NSError * _Nullable * _Nullable)error;
162164

163165
/**
164166
* Gets the oldest event.
165167
*
166168
* @param eventType The event type of the data that needs to be retrieved.
167-
* @param cacheData Specify if the data should be retrieved from cache (this is by default always true for tvOS).
169+
* @param cachedData Specify if the data should be retrieved from the in-memory
170+
* cache and not saved in the database (this is always true for tvOS).
168171
* @param error An error object is returned if an error occurs.
169172
*/
170173
- (nullable NSDictionary *)getOldestEvent:(OPTLYDataStoreEventType)eventType
171-
cacheData:(bool)cacheData
174+
cachedData:(bool)cachedData
172175
error:(NSError * _Nullable * _Nullable)error;
173176

174177
/**
175178
* Gets the first N entries (i.e., the N oldest events).
176179
*
177180
* @param numberOfEvents The number of events to retrieve.
178181
* @param eventType The event type of the data that needs to be removed.
179-
* @param cacheData Specify if the data should be retrieved from cache (this is by default always true for tvOS).
182+
* @param cachedData Specify if the data should be retrieved from the in-memory
183+
* cache and not saved in the database (this is always true for tvOS).
180184
* @param error An error object is returned if an error occurs.
181185
*/
182186
- (nullable NSArray *)getFirstNEvents:(NSInteger)numberOfEvents
183187
eventType:(OPTLYDataStoreEventType)eventType
184-
cacheData:(bool)cacheData
188+
cachedData:(bool)cachedData
185189
error:(NSError * _Nullable * _Nullable)error;
186190

187191
/**
188192
* Gets all events.
189193
*
190194
* @param eventType The event type of the data that needs to be retrieved.
191-
* @param cacheData Specify if the data should be retrieved from cache (this is by default always true for tvOS).
195+
* @param cachedData Specify if the data should be retrieved from the in-memory
196+
* cache and not saved in the database (this is always true for tvOS).
192197
* @param error An error object is returned if an error occurs.
193198
* @return The return value is an array of OPTLYDatabaseEntity.
194199
*/
195200
- (nullable NSArray *)getAllEvents:(OPTLYDataStoreEventType)eventType
196-
cacheData:(bool)cacheData
201+
cachedData:(bool)cachedData
197202
error:(NSError * _Nullable * _Nullable)error;
198203

199204
/**
200205
* Deletes the oldest event.
201206
*
202207
* @param eventType The event type of the data that needs to be removed.
203-
* @param cacheData Specify if the data should be removed from cache (this is by default always true for tvOS).
208+
* @param cachedData Specify if the data should be deleted from the in-memory
209+
* cache and not saved in the database (this is always true for tvOS).
204210
* @param error An error object is returned if an error occurs.
205211
*/
206212
- (void)removeOldestEvent:(OPTLYDataStoreEventType)eventType
207-
cacheData:(bool)cacheData
213+
cachedData:(bool)cachedData
208214
error:(NSError * _Nullable * _Nullable)error;
209215

210216
/**
211217
* Deletes the first N events (i.e., the N oldest events).
212218
*
213219
* @param numberOfEvents The number of events to retrieve.
214220
* @param eventType The event type of the data that needs to be removed.
215-
* @param cacheData Specify if the data should be removed from cache (this is by default always true for tvOS).
221+
* @param cachedData Specify if the data should be deleted from the in-memory
222+
* cache and not saved in the database (this is always true for tvOS).
216223
* @param error An error object is returned if an error occurs.
217224
*/
218225
- (void)removeFirstNEvents:(NSInteger)numberOfEvents
219226
eventType:(OPTLYDataStoreEventType)eventType
220-
cacheData:(bool)cacheData
227+
cachedData:(bool)cachedData
221228
error:(NSError * _Nullable * _Nullable)error;
222229

223230
/**
224231
* Deletes all events.
225232
*
226233
* @param eventType The event type of the data that needs to be removed.
227-
* @param cacheData Specify if the data should be removed from cache (this is by default always true for tvOS).
234+
* @param cachedData Specify if the data should be deleted from the in-memory
235+
* cache and not saved in the database (this is always true for tvOS).
228236
* @param error An error object is returned if an error occurs.
229237
*/
230238
- (void)removeAllEvents:(OPTLYDataStoreEventType)eventType
231-
cacheData:(bool)cacheData
239+
cachedData:(bool)cachedData
232240
error:(NSError * _Nullable * _Nullable)error;
233241

234242
/**
235243
* Returns the number of saved events.
236244
*
237245
* @param eventType The event type of the data.
238-
* @param cacheData Specify if the event count should be retrieved from cache (this is by default always true for tvOS).
246+
* @param cachedData Specify if the data should be retrieved from the in-memory
247+
* cache and not saved in the database (this is always true for tvOS).
239248
* @param error An error object is returned if an error occurs.
240249
* @return The number of events saved.
241250
*/
242251
- (NSInteger)numberOfEvents:(OPTLYDataStoreEventType)eventType
243-
cacheData:(bool)cacheData
252+
cachedData:(bool)cachedData
244253
error:(NSError * _Nullable * _Nullable)error;
245254

246255
/**
247-
* Removes all cached events.
248-
*/
249-
- (void)removeCachedEvents;
250-
251-
/**
252-
* Removes all saved events.
256+
* Removes all saved or cached events.
253257
*
258+
* @param cachedData Specify if the data should be deleted from the in-memory
259+
* cache and not saved in the database (this is always true for tvOS).
254260
* @param error An error object is returned if an error occurs.
255261
*/
256-
- (void)removeSavedEvents:(NSError * _Nullable * _Nullable)error;
262+
- (void)removeSavedEvents:(BOOL)cachedData
263+
error:(NSError * _Nullable * _Nullable)error;
264+
257265

258266
// -------- User Data Storage --------
259267
// Saves data in dictionary format in NSUserDefault

OptimizelySDKShared/OptimizelySDKShared/OPTLYDataStore.m

Lines changed: 42 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ - (OPTLYFileManager *)fileManager {
7171
return _fileManager;
7272
}
7373

74-
- (void)removeAll {
74+
- (void)removeAll:(NSError * _Nullable * _Nullable)error {
7575
[self removeAllUserData];
76-
[self removeAllFiles:nil];
77-
[self removeCachedEvents];
76+
[self removeEventsData:error];
77+
[self removeAllFiles:error];
7878
}
7979

8080
#if TARGET_OS_IOS
@@ -187,6 +187,7 @@ - (void)removeFilesForDataType:(OPTLYDataStoreDataType)dataType
187187

188188
- (void)removeAllFiles:(NSError * _Nullable * _Nullable)error {
189189
[self.fileManager removeAllFiles:error];
190+
self.fileManager = nil;
190191
}
191192

192193
# pragma mark - Event Storage Methods
@@ -203,19 +204,19 @@ - (void)createTable:(OPTLYDataStoreEventType)eventType
203204

204205
- (void)saveData:(nonnull NSDictionary *)data
205206
eventType:(OPTLYDataStoreEventType)eventType
206-
cacheData:(bool)cacheData
207+
cachedData:(bool)cachedData
207208
error:(NSError * _Nullable * _Nullable)error
208209
{
209210
// tvOS can only save to cached data
210211
#if TARGET_OS_TV
211-
if (!cacheData) {
212-
cacheData = true;
212+
if (!cachedData) {
213+
cachedData = true;
213214
OPTLYLogError(@"tvOS can only save to cached data.");
214215
}
215216
#endif
216217

217218
NSString *eventTypeName = [self stringForDataEventEnum:eventType];
218-
if (cacheData) {
219+
if (cachedData) {
219220
OPTLYQueue *queue = self.eventsCache[eventTypeName];
220221
[queue enqueue:data];
221222
} else {
@@ -227,20 +228,20 @@ - (void)saveData:(nonnull NSDictionary *)data
227228

228229
- (nullable NSArray *)getFirstNEvents:(NSInteger)numberOfEvents
229230
eventType:(OPTLYDataStoreEventType)eventType
230-
cacheData:(bool)cacheData
231+
cachedData:(bool)cachedData
231232
error:(NSError * _Nullable * _Nullable)error
232233
{
233234
// tvOS can only read from cached data
234235
#if TARGET_OS_TV
235-
if (!cacheData) {
236-
cacheData = true;
236+
if (!cachedData) {
237+
cachedData = true;
237238
OPTLYLogInfo(@"tvOS can only read from cached data.");
238239
}
239240
#endif
240241

241242
NSMutableArray *firstNEvents = [NSMutableArray new];
242243
NSString *eventTypeName = [self stringForDataEventEnum:eventType];
243-
if (cacheData) {
244+
if (cachedData) {
244245
OPTLYQueue *queue = self.eventsCache[eventTypeName];
245246
[firstNEvents addObjectsFromArray:[queue firstNItems:numberOfEvents]];
246247
} else {
@@ -257,45 +258,45 @@ - (nullable NSArray *)getFirstNEvents:(NSInteger)numberOfEvents
257258
}
258259

259260
- (nullable NSDictionary *)getOldestEvent:(OPTLYDataStoreEventType)eventType
260-
cacheData:(bool)cacheData
261+
cachedData:(bool)cachedData
261262
error:(NSError * _Nullable * _Nullable)error
262263
{
263264
NSDictionary *oldestEvent = nil;
264-
NSArray *oldestEvents = [self getFirstNEvents:1 eventType:eventType cacheData:cacheData error:error];
265+
NSArray *oldestEvents = [self getFirstNEvents:1 eventType:eventType cachedData:cachedData error:error];
265266

266267
if ([oldestEvents count] <= 0) {
267268
OPTLYLogInfo(@"No event(s).");
268269
} else {
269270
oldestEvent = oldestEvents[0];
270271
}
271-
272+
272273
return oldestEvent;
273274
}
274275

275276
- (nullable NSArray *)getAllEvents:(OPTLYDataStoreEventType)eventType
276-
cacheData:(bool)cacheData
277+
cachedData:(bool)cachedData
277278
error:(NSError * _Nullable * _Nullable)error
278279
{
279-
NSInteger numberOfEvents = [self numberOfEvents:eventType cacheData:cacheData error:error];
280-
NSArray *allEvents = [self getFirstNEvents:numberOfEvents eventType:eventType cacheData:cacheData error:error];
280+
NSInteger numberOfEvents = [self numberOfEvents:eventType cachedData:cachedData error:error];
281+
NSArray *allEvents = [self getFirstNEvents:numberOfEvents eventType:eventType cachedData:cachedData error:error];
281282
return allEvents;
282283
}
283284

284285
- (void)removeFirstNEvents:(NSInteger)numberOfEvents
285286
eventType:(OPTLYDataStoreEventType)eventType
286-
cacheData:(bool)cacheData
287+
cachedData:(bool)cachedData
287288
error:(NSError * _Nullable * _Nullable)error
288289
{
289290
// tvOS can only delete from cached data
290291
#if TARGET_OS_TV
291-
if (!cacheData) {
292-
cacheData = true;
292+
if (!cachedData) {
293+
cachedData = true;
293294
OPTLYLogInfo(@"tvOS can only delete cached data.");
294295
}
295296
#endif
296297

297298
NSString *eventTypeName = [self stringForDataEventEnum:eventType];
298-
if (cacheData) {
299+
if (cachedData) {
299300
OPTLYQueue *queue = self.eventsCache[eventTypeName];
300301
[queue dequeueNItems:numberOfEvents];
301302
} else {
@@ -318,36 +319,36 @@ - (void)removeFirstNEvents:(NSInteger)numberOfEvents
318319
}
319320

320321
- (void)removeOldestEvent:(OPTLYDataStoreEventType)eventType
321-
cacheData:(bool)cacheData
322+
cachedData:(bool)cachedData
322323
error:(NSError * _Nullable * _Nullable)error
323324
{
324-
[self removeFirstNEvents:1 eventType:eventType cacheData:cacheData error:error];
325+
[self removeFirstNEvents:1 eventType:eventType cachedData:cachedData error:error];
325326
}
326327

327328
- (void)removeAllEvents:(OPTLYDataStoreEventType)eventType
328-
cacheData:(bool)cacheData
329+
cachedData:(bool)cachedData
329330
error:(NSError * _Nullable * _Nullable)error
330331
{
331-
NSInteger numberOfEvents = [self numberOfEvents:eventType cacheData:cacheData error:error];
332-
[self removeFirstNEvents:numberOfEvents eventType:eventType cacheData:cacheData error:error];
332+
NSInteger numberOfEvents = [self numberOfEvents:eventType cachedData:cachedData error:error];
333+
[self removeFirstNEvents:numberOfEvents eventType:eventType cachedData:cachedData error:error];
333334
}
334335

335336

336337
- (NSInteger)numberOfEvents:(OPTLYDataStoreEventType)eventType
337-
cacheData:(bool)cacheData
338+
cachedData:(bool)cachedData
338339
error:(NSError * _Nullable * _Nullable)error
339340
{
340341
// tvOS can only read from cached data
341342
#if TARGET_OS_TV
342-
if (!cacheData) {
343-
cacheData = true;
343+
if (!cachedData) {
344+
cachedData = true;
344345
OPTLYLogInfo(@"tvOS can only read from cached data.");
345346
}
346347
#endif
347348

348349
NSString *eventTypeName = [self stringForDataEventEnum:eventType];
349350
NSInteger numberOfEvents = 0;
350-
if (cacheData) {
351+
if (cachedData) {
351352
OPTLYQueue *queue = self.eventsCache[eventTypeName];
352353
numberOfEvents = [queue size];
353354
} else {
@@ -359,13 +360,20 @@ - (NSInteger)numberOfEvents:(OPTLYDataStoreEventType)eventType
359360
return numberOfEvents;
360361
}
361362

362-
- (void)removeCachedEvents {
363-
self.eventsCache = nil;
363+
- (void)removeSavedEvents:(BOOL)cachedData
364+
error:(NSError * _Nullable * _Nullable)error {
365+
for (NSInteger i = 0; i <= OPTLYDataStoreEventTypeConversion; ++i ) {
366+
[self removeAllEvents:i cachedData:cachedData error:error];
367+
}
364368
}
365369

366-
- (void)removeSavedEvents:(NSError * _Nullable * _Nullable)error {
370+
- (void)removeEventsData:(NSError * _Nullable * _Nullable)error {
371+
[self removeSavedEvents:YES error:error];
372+
[self removeSavedEvents:NO error:error];
373+
self.eventsCache = nil;
367374
#if TARGET_OS_IOS
368-
[self.fileManager removeDataSubDir:[self stringForDataTypeEnum:OPTLYDataStoreDataTypeDatabase] error:error];
375+
[self.database deleteDatabase:error];
376+
self.database = nil;
369377
#endif
370378
}
371379

0 commit comments

Comments
 (0)