Skip to content

Commit e8d70e3

Browse files
authored
Merge pull request #42 from optimizely/josh.wang/user_profile/refactor_protocol
refactor protocol to be explicit that we are saving user
2 parents 8457def + d5113e1 commit e8d70e3

File tree

6 files changed

+55
-88
lines changed

6 files changed

+55
-88
lines changed

OptimizelySDKCore/OptimizelySDKCore/OPTLYBucketer.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ - (OPTLYVariation *)bucketExperiment:(OPTLYExperiment *)experiment
6767
return whitelistedVariation;
6868
}
6969

70-
NSString *stickyBucketingVariationKey = [self.config.userProfile getVariationFor:userId experiment:experiment.experimentKey];
70+
NSString *stickyBucketingVariationKey = [self.config.userProfile getVariationForUser:userId experiment:experiment.experimentKey];
7171
if ([stickyBucketingVariationKey length] > 0) {
7272
OPTLYVariation *stickyBucketingVariation = [experiment getVariationForVariationKey:stickyBucketingVariationKey];
7373
if (stickyBucketingVariation) {
@@ -103,7 +103,7 @@ - (OPTLYVariation *)bucketExperiment:(OPTLYExperiment *)experiment
103103
if (experiment != nil) {
104104
OPTLYVariation *variation = [self bucketToVariation:experiment withUserId:userId];
105105
if (variation) {
106-
[self.config.userProfile save:userId experiment:experiment.experimentKey variation:variation.variationKey];
106+
[self.config.userProfile saveUser:userId experiment:experiment.experimentKey variation:variation.variationKey];
107107

108108
NSString *logMessage = [NSString stringWithFormat:OPTLYLoggerMessagesBucketerSavingUserData, userId, experiment.experimentKey, variation.variationKey];
109109
[self.config.logger logMessage:logMessage withLevel:OptimizelyLogLevelDebug];

OptimizelySDKCore/OptimizelySDKCore/OPTLYUserProfile.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
* @param variationKey The bucketed variation key.
2727
*
2828
**/
29-
- (void)save:(nonnull NSString *)userId
30-
experiment:(nonnull NSString *)experimentKey
31-
variation:(nonnull NSString *)variationKey;
29+
- (void)saveUser:(nonnull NSString *)userId
30+
experiment:(nonnull NSString *)experimentKey
31+
variation:(nonnull NSString *)variationKey;
3232

3333
/**
3434
* Gets the saved variation for a given user ID, project ID, and experiment key.
@@ -38,8 +38,8 @@
3838
* @returns The variation that the user was bucketed into for the given project id and experiment key.
3939
*
4040
**/
41-
- (nullable NSString *)getVariationFor:(nonnull NSString *)userId
42-
experiment:(nonnull NSString *)experimentKey;
41+
- (nullable NSString *)getVariationForUser:(nonnull NSString *)userId
42+
experiment:(nonnull NSString *)experimentKey;
4343

4444
/**
4545
* Removes a user ID's project-to-experiment-to-variation mapping.
@@ -48,8 +48,8 @@
4848
* @param experimentKey An active experiment for which the user should be bucketed into.
4949
*
5050
**/
51-
- (void)remove:(nonnull NSString *)userId
52-
experiment:(nonnull NSString *)experimentKey;
51+
- (void)removeUser:(nonnull NSString *)userId
52+
experiment:(nonnull NSString *)experimentKey;
5353

5454
@end
5555

OptimizelySDKCore/OptimizelySDKCore/OPTLYUserProfile.m

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ + (BOOL)conformsToOPTLYUserProfileProtocol:(nonnull Class)instanceClass {
2323
BOOL isValidProtocolDeclaration = [instanceClass conformsToProtocol:@protocol(OPTLYUserProfile)];
2424

2525
// runtime checks
26-
BOOL implementsHandleSaveVariationMethod = [instanceClass instancesRespondToSelector:@selector(save:experiment:variation:)];
27-
BOOL implementsHandleGetVariationMethod = [instanceClass instancesRespondToSelector:@selector(getVariationFor:experiment:)];
28-
BOOL implementsHandleRemoveVariationMethod = [instanceClass instancesRespondToSelector:@selector(remove:experiment:)];
26+
BOOL implementsHandleSaveVariationMethod = [instanceClass instancesRespondToSelector:@selector(saveUser:experiment:variation:)];
27+
BOOL implementsHandleGetVariationMethod = [instanceClass instancesRespondToSelector:@selector(getVariationForUser:experiment:)];
28+
BOOL implementsHandleRemoveVariationMethod = [instanceClass instancesRespondToSelector:@selector(removeUser:experiment:)];
2929

3030
return isValidProtocolDeclaration && implementsHandleSaveVariationMethod && implementsHandleGetVariationMethod && implementsHandleRemoveVariationMethod;
3131
}
@@ -34,20 +34,19 @@ + (BOOL)conformsToOPTLYUserProfileProtocol:(nonnull Class)instanceClass {
3434

3535
@implementation OPTLYUserProfileNoOp
3636

37-
- (void)save:(nonnull NSString *)userId
38-
experiment:(nonnull NSString *)experimentKey
39-
variation:(nonnull NSString *)variationKey {
37+
- (void)saveUser:(nonnull NSString *)userId
38+
experiment:(nonnull NSString *)experimentKey
39+
variation:(nonnull NSString *)variationKey {
4040
return;
4141
}
4242

43-
- (nullable NSString *)getVariationFor:(nonnull NSString *)userId
44-
experiment:(nonnull NSString *)experimentKey
45-
{
43+
- (nullable NSString *)getVariationForUser:(nonnull NSString *)userId
44+
experiment:(nonnull NSString *)experimentKey {
4645
return nil;
4746
}
4847

49-
- (void)remove:(nonnull NSString *)userId
50-
experiment:(nonnull NSString *)experimentKey {
48+
- (void)removeUser:(nonnull NSString *)userId
49+
experiment:(nonnull NSString *)experimentKey {
5150
return;
5251
}
5352

OptimizelySDKUserProfile/OptimizelySDKUserProfile/OPTLYUserProfile.h

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -38,39 +38,6 @@
3838
*/
3939
- (nullable instancetype)init;
4040

41-
/**
42-
* Saves a user ID's project-to-experiment-to-variation mapping.
43-
*
44-
* @param userId The user ID that was used to generate the bucket value.
45-
* @param experimentKey An active experiment for which the user should be bucketed into.
46-
* @param variationKey The bucketed variation key.
47-
*
48-
**/
49-
- (void)save:(nonnull NSString *)userId
50-
experiment:(nonnull NSString *)experimentKey
51-
variation:(nonnull NSString *)variationKey;
52-
53-
/**
54-
* Gets the saved variation for a given user ID, project ID, and experiment key.
55-
*
56-
* @param userId The user ID that was used to generate the bucket value.
57-
* @param experimentKey An active experiment which the user was bucketed into.
58-
* @returns The variation that the user was bucketed into for the given project id and experiment key.
59-
*
60-
**/
61-
- (nullable NSString *)getVariationFor:(nonnull NSString *)userId
62-
experiment:(nonnull NSString *)experimentKey;
63-
64-
/**
65-
* Removes a user ID's project-to-experiment-to-variation mapping.
66-
*
67-
* @param userId The user ID that was used to generate the bucket value.
68-
* @param experimentKey An active experiment for which the user should be bucketed into.
69-
*
70-
**/
71-
- (void)remove:(nonnull NSString *)userId
72-
experiment:(nonnull NSString *)experimentKey;
73-
7441
/**
7542
* Cleans and removes all bucketing mapping for specific userId.
7643
* @param userId The user ID to remove all bucketing value.
@@ -81,4 +48,5 @@
8148
* Cleans and removes all bucketing mapping.
8249
**/
8350
- (void)removeAllUserExperimentRecords;
51+
8452
@end

OptimizelySDKUserProfile/OptimizelySDKUserProfile/OPTLYUserProfile.m

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,18 @@ - (instancetype)initWithBuilder:(OPTLYUserProfileBuilder *)builder {
4141
}
4242

4343

44-
- (void)save:(nonnull NSString *)userId
45-
experiment:(nonnull NSString *)experimentKey
46-
variation:(nonnull NSString *)variationKey {
44+
- (void)saveUser:(nonnull NSString *)userId
45+
experiment:(nonnull NSString *)experimentKey
46+
variation:(nonnull NSString *)variationKey {
4747

4848
NSDictionary *userProfileData = [self.dataStore getUserDataForType:OPTLYDataStoreDataTypeUserProfile];
4949
NSMutableDictionary *userProfileDataMutable = userProfileData ? [userProfileData mutableCopy] : [NSMutableDictionary new];
5050
userProfileDataMutable[userId] = @{ experimentKey : variationKey };
5151
[self.dataStore saveUserData:userProfileDataMutable type:OPTLYDataStoreDataTypeUserProfile];
5252
}
5353

54-
- (nullable NSString *)getVariationFor:(nonnull NSString *)userId
55-
experiment:(nonnull NSString *)experimentKey {
54+
- (nullable NSString *)getVariationForUser:(nonnull NSString *)userId
55+
experiment:(nonnull NSString *)experimentKey {
5656
NSDictionary *userData = [self userData:userId];
5757
NSString *variationKey = [userData objectForKey:experimentKey];
5858

@@ -67,8 +67,8 @@ - (nullable NSString *)getVariationFor:(nonnull NSString *)userId
6767
return variationKey;
6868
}
6969

70-
- (void)remove:(nonnull NSString *)userId
71-
experiment:(nonnull NSString *)experimentKey {
70+
- (void)removeUser:(nonnull NSString *)userId
71+
experiment:(nonnull NSString *)experimentKey {
7272

7373
NSMutableDictionary *userProfileDataMutable = [[self.dataStore getUserDataForType:OPTLYDataStoreDataTypeUserProfile] mutableCopy];
7474
NSMutableDictionary *userDataMutable = [userProfileDataMutable[userId] mutableCopy];

OptimizelySDKUserProfile/OptimizelySDKUserProfileTests/OptimizelySDKUserProfileTests.m

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ - (void)setUp {
4646
self.userProfile = [OPTLYUserProfile initWithBuilderBlock:^(OPTLYUserProfileBuilder *builder) {
4747
builder.logger = [OPTLYLoggerDefault new];
4848
}];
49-
[self.userProfile save:kUserId1 experiment:kExperimentKey1 variation:kVariationKey1];
50-
[self.userProfile save:kUserId2 experiment:kExperimentKey2 variation:kVariationKey2];
51-
[self.userProfile save:kUserId3 experiment:kExperimentKey3a variation:kVariationKey3a];
52-
[self.userProfile save:kUserId3 experiment:kExperimentKey3b variation:kVariationKey3b];
53-
[self.userProfile save:kUserId3 experiment:kExperimentKey3c variation:kVariationKey3c];
49+
[self.userProfile saveUser:kUserId1 experiment:kExperimentKey1 variation:kVariationKey1];
50+
[self.userProfile saveUser:kUserId2 experiment:kExperimentKey2 variation:kVariationKey2];
51+
[self.userProfile saveUser:kUserId3 experiment:kExperimentKey3a variation:kVariationKey3a];
52+
[self.userProfile saveUser:kUserId3 experiment:kExperimentKey3b variation:kVariationKey3b];
53+
[self.userProfile saveUser:kUserId3 experiment:kExperimentKey3c variation:kVariationKey3c];
5454
[super setUp];
5555
}
5656

@@ -94,60 +94,60 @@ - (void)testSaveUserData
9494

9595
- (void)testGetVariation
9696
{
97-
NSString *variationKey1 = [self.userProfile getVariationFor:kUserId1 experiment:kExperimentKey1];
97+
NSString *variationKey1 = [self.userProfile getVariationForUser:kUserId1 experiment:kExperimentKey1];
9898
XCTAssert([variationKey1 isEqualToString:kVariationKey1], @"Invalid variation for userId 1 for getVariation.");
9999

100-
NSString *variationKey2 = [self.userProfile getVariationFor:kUserId2 experiment:kExperimentKey2];
100+
NSString *variationKey2 = [self.userProfile getVariationForUser:kUserId2 experiment:kExperimentKey2];
101101
XCTAssert([variationKey2 isEqualToString:kVariationKey2], @"Invalid variation for userId 2 for getVariation.");
102102

103-
NSString *variationKey3a = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3a];
103+
NSString *variationKey3a = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3a];
104104
XCTAssert([variationKey3a isEqualToString:kVariationKey3a], @"Invalid variation for userId 3a for getVariation.");
105105

106-
NSString *variationKey3b = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3b];
106+
NSString *variationKey3b = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3b];
107107
XCTAssert([variationKey3b isEqualToString:kVariationKey3b], @"Invalid variation for userId 3b for getVariation.");
108108

109-
NSString *variationKey3c = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3c];
109+
NSString *variationKey3c = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3c];
110110
XCTAssert([variationKey3c isEqualToString:kVariationKey3c], @"Invalid variation for userId 3c for getVariation.");
111111

112112
}
113113

114114
- (void)testRemoveVariation
115115
{
116-
[self.userProfile remove:kUserId1 experiment:kExperimentKey1];
117-
NSString *variationKey1 = [self.userProfile getVariationFor:kUserId1 experiment:kExperimentKey1];
116+
[self.userProfile removeUser:kUserId1 experiment:kExperimentKey1];
117+
NSString *variationKey1 = [self.userProfile getVariationForUser:kUserId1 experiment:kExperimentKey1];
118118
XCTAssertNil(variationKey1, @"Variation for userId 1 should be removed.");
119119

120-
[self.userProfile remove:kUserId2 experiment:kExperimentKey1];
121-
NSString *variationKey2 = [self.userProfile getVariationFor:kUserId2 experiment:kExperimentKey2];
120+
[self.userProfile removeUser:kUserId2 experiment:kExperimentKey1];
121+
NSString *variationKey2 = [self.userProfile getVariationForUser:kUserId2 experiment:kExperimentKey2];
122122
XCTAssertNotNil(variationKey2, @"Variation for userId 1 should not have been removed.");
123123

124-
[self.userProfile remove:kUserId3 experiment:kExperimentKey2];
124+
[self.userProfile removeUser:kUserId3 experiment:kExperimentKey2];
125125

126-
NSString *variationKey3a = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3a];
126+
NSString *variationKey3a = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3a];
127127
XCTAssertNotNil(variationKey3a, @"Variation for userId 3a should not have been removed.");
128128

129-
[self.userProfile remove:kUserId3 experiment:kExperimentKey3c];
130-
NSString *variationKey3c = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3c];
129+
[self.userProfile removeUser:kUserId3 experiment:kExperimentKey3c];
130+
NSString *variationKey3c = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3c];
131131
XCTAssertNil(variationKey3c, @"Variation for userId 3c should have been removed.");
132132
}
133133

134134
- (void)testClearUserExperimentRecordsForUser
135135
{
136136
[self.userProfile removeUserExperimentRecordsForUser:kUserId1];
137137

138-
NSString *variationKey1 = [self.userProfile getVariationFor:kUserId1 experiment:kExperimentKey1];
138+
NSString *variationKey1 = [self.userProfile getVariationForUser:kUserId1 experiment:kExperimentKey1];
139139
XCTAssertNil(variationKey1, @"Variation for userId 1 should have been removed.");
140140

141-
NSString *variationKey2 = [self.userProfile getVariationFor:kUserId2 experiment:kExperimentKey2];
141+
NSString *variationKey2 = [self.userProfile getVariationForUser:kUserId2 experiment:kExperimentKey2];
142142
XCTAssertNotNil(variationKey2, @"Variation for userId 2 should not be removed.");
143143

144-
NSString *variationKey3a = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3a];
144+
NSString *variationKey3a = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3a];
145145
XCTAssertNotNil(variationKey3a, @"Variation for userId 3a should not be removed.");
146146

147-
NSString *variationKey3b = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3b];
147+
NSString *variationKey3b = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3b];
148148
XCTAssertNotNil(variationKey3b, @"Variation for userId 3b should not be removed.");
149149

150-
NSString *variationKey3c = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3c];
150+
NSString *variationKey3c = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3c];
151151
XCTAssertNotNil(variationKey3c, @"Variation for userId 3c should not be removed.");
152152

153153
NSDictionary *userData = [self.userProfile.dataStore getUserDataForType:OPTLYDataStoreDataTypeUserProfile];
@@ -158,19 +158,19 @@ - (void)testCleanUserExperimentRecords
158158
{
159159
[self.userProfile removeAllUserExperimentRecords];
160160

161-
NSString *variationKey1 = [self.userProfile getVariationFor:kUserId1 experiment:kExperimentKey1];
161+
NSString *variationKey1 = [self.userProfile getVariationForUser:kUserId1 experiment:kExperimentKey1];
162162
XCTAssertNil(variationKey1, @"Variation for userId 1 should be removed.");
163163

164-
NSString *variationKey2 = [self.userProfile getVariationFor:kUserId2 experiment:kExperimentKey2];
164+
NSString *variationKey2 = [self.userProfile getVariationForUser:kUserId2 experiment:kExperimentKey2];
165165
XCTAssertNil(variationKey2, @"Variation for userId 2 should be removed.");
166166

167-
NSString *variationKey3a = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3a];
167+
NSString *variationKey3a = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3a];
168168
XCTAssertNil(variationKey3a, @"Variation for userId 3 should be removed.");
169169

170-
NSString *variationKey3b = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3b];
170+
NSString *variationKey3b = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3b];
171171
XCTAssertNil(variationKey3b, @"Variation for userId 3b should be removed.");
172172

173-
NSString *variationKey3c = [self.userProfile getVariationFor:kUserId3 experiment:kExperimentKey3c];
173+
NSString *variationKey3c = [self.userProfile getVariationForUser:kUserId3 experiment:kExperimentKey3c];
174174
XCTAssertNil(variationKey3c, @"Variation for userId 3c should be removed.");
175175

176176
NSDictionary *userData = [self.userProfile.dataStore getUserDataForType:OPTLYDataStoreDataTypeUserProfile];

0 commit comments

Comments
 (0)