Skip to content

Commit 6c64b88

Browse files
committed
set project config logger, error handler, and user profile after initialization from jsonmodel. return nil for project config if any modules are invalid
1 parent 4a0a25b commit 6c64b88

File tree

4 files changed

+67
-56
lines changed

4 files changed

+67
-56
lines changed

OptimizelySDKCore/OptimizelySDKCore/OPTLYBuilder.m

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ - (id)initWithBlock:(OPTLYBuilderBlock)block {
5151
}
5252

5353
_config = [OPTLYProjectConfig initWithBuilderBlock:^(OPTLYProjectConfigBuilder * _Nullable builder) {
54-
builder.datafile = _datafile;
55-
builder.userProfile = _userProfile;
56-
builder.logger = _logger;
57-
builder.errorHandler = _errorHandler;
54+
builder.datafile = self.datafile;
55+
builder.userProfile = self.userProfile;
56+
builder.logger = self.logger;
57+
builder.errorHandler = self.errorHandler;
5858
}];
5959

6060
if (_config == nil) {

OptimizelySDKCore/OptimizelySDKCore/OPTLYProjectConfig.m

Lines changed: 53 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -54,82 +54,88 @@ + (nullable instancetype)initWithBuilderBlock:(nonnull OPTLYProjectConfigBuilder
5454
}
5555

5656
- (instancetype)initWithBuilder:(OPTLYProjectConfigBuilder *)builder {
57-
58-
if (!builder.datafile) {
59-
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
60-
code:OPTLYErrorTypesDatafileInvalid
61-
userInfo:@{NSLocalizedDescriptionKey :
62-
NSLocalizedString(OPTLYErrorHandlerMessagesDataFileInvalid, nil)}];
63-
[_errorHandler handleError:error];
64-
65-
NSString *logMessage = OPTLYErrorHandlerMessagesDataFileInvalid;
66-
[_logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
67-
return nil;
68-
}
69-
70-
NSError *datafileError;
71-
@try {
72-
self = [super initWithData:builder.datafile error:&datafileError];
73-
}
74-
@catch (NSException *datafileException) {
75-
[_errorHandler handleException:datafileException];
76-
}
77-
78-
if (datafileError)
79-
{
80-
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
81-
code:OPTLYErrorTypesDatafileInvalid
82-
userInfo:datafileError.userInfo];
83-
[_errorHandler handleError:error];
84-
return nil;
85-
}
86-
57+
// check for valid error handler and logger
8758
if (builder.errorHandler) {
88-
if ([OPTLYErrorHandler conformsToOPTLYErrorHandlerProtocol:[builder.errorHandler class]]) {
89-
_errorHandler = (id<OPTLYErrorHandler, Ignore>)builder.errorHandler;
90-
} else {
91-
_errorHandler = [OPTLYErrorHandlerDefault new];
59+
if (![OPTLYErrorHandler conformsToOPTLYErrorHandlerProtocol:[builder.errorHandler class]]) {
9260
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
9361
code:OPTLYErrorTypesErrorHandlerInvalid
9462
userInfo:@{NSLocalizedDescriptionKey :
9563
NSLocalizedString(OPTLYErrorHandlerMessagesErrorHandlerInvalid, nil)}];
96-
[_errorHandler handleError:error];
64+
[[[OPTLYErrorHandlerNoOp alloc] init] handleError:error];
9765

9866
NSString *logMessage = OPTLYErrorHandlerMessagesErrorHandlerInvalid;
99-
[_logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
67+
[[[OPTLYLoggerDefault alloc] initWithLogLevel:OptimizelyLogLevelAll] logMessage:logMessage withLevel:OptimizelyLogLevelError];
68+
return nil;
10069
}
10170
}
10271

72+
// check for valid logger
10373
if (builder.logger) {
104-
if ([builder.logger conformsToProtocol:@protocol(OPTLYLogger)]) {
105-
_logger = (id<OPTLYLogger, Ignore>)builder.logger;
106-
} else {
107-
_logger = [OPTLYLoggerDefault new];
74+
if (![builder.logger conformsToProtocol:@protocol(OPTLYLogger)]) {
75+
builder.logger = [OPTLYLoggerDefault new];
10876
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
10977
code:OPTLYErrorTypesLoggerInvalid
11078
userInfo:@{NSLocalizedDescriptionKey :
11179
NSLocalizedString(OPTLYErrorHandlerMessagesLoggerInvalid, nil)}];
112-
[_errorHandler handleError:error];
80+
[builder.errorHandler handleError:error];
11381

11482
NSString *logMessage = OPTLYErrorHandlerMessagesLoggerInvalid;
115-
[_logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
83+
[builder.logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
84+
return nil;
11685
}
11786
}
11887

88+
// check that datafile exists
89+
if (!builder.datafile) {
90+
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
91+
code:OPTLYErrorTypesDatafileInvalid
92+
userInfo:@{NSLocalizedDescriptionKey :
93+
NSLocalizedString(OPTLYErrorHandlerMessagesDataFileInvalid, nil)}];
94+
[builder.errorHandler handleError:error];
95+
96+
NSString *logMessage = OPTLYErrorHandlerMessagesDataFileInvalid;
97+
[builder.logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
98+
return nil;
99+
}
100+
101+
// check for valid user profile
119102
if (builder.userProfile) {
120-
if ([OPTLYUserProfileUtility conformsToOPTLYUserProfileProtocol:[builder.userProfile class]]) {
121-
_userProfile = (id<OPTLYUserProfile, Ignore>)builder.userProfile;
122-
} else {
103+
if (![OPTLYUserProfileUtility conformsToOPTLYUserProfileProtocol:[builder.userProfile class]]) {
123104
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
124105
code:OPTLYErrorTypesUserProfile
125106
userInfo:@{NSLocalizedDescriptionKey :
126107
NSLocalizedString(OPTLYErrorHandlerMessagesUserProfileInvalid, nil)}];
127-
[_errorHandler handleError:error];
108+
[builder.errorHandler handleError:error];
128109

129110
NSString *logMessage = OPTLYErrorHandlerMessagesUserProfileInvalid;
130-
[_logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
111+
[builder.logger logMessage:logMessage withLevel:OptimizelyLogLevelError];
112+
return nil;
113+
}
114+
}
115+
116+
// check datafile is valid
117+
@try {
118+
NSError *datafileError;
119+
OPTLYProjectConfig *projectConfig = [[OPTLYProjectConfig alloc] initWithData:builder.datafile error:&datafileError];
120+
if (datafileError)
121+
{
122+
NSError *error = [NSError errorWithDomain:OPTLYErrorHandlerMessagesDomain
123+
code:OPTLYErrorTypesDatafileInvalid
124+
userInfo:datafileError.userInfo];
125+
[builder.errorHandler handleError:error];
126+
return nil;
127+
}
128+
else {
129+
self = projectConfig;
131130
}
132131
}
132+
@catch (NSException *datafileException) {
133+
[builder.errorHandler handleException:datafileException];
134+
}
135+
136+
_errorHandler = (id<OPTLYErrorHandler, Ignore>)builder.errorHandler;
137+
_logger = (id<OPTLYLogger, Ignore>)builder.logger;
138+
_userProfile = (id<OPTLYUserProfile, Ignore>)builder.userProfile;
133139
return self;
134140
}
135141

OptimizelySDKCore/OptimizelySDKCore/OPTLYProjectConfigBuilder.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ - (id)initWithBlock:(OPTLYProjectConfigBuilderBlock)block {
3131
if (self != nil) {
3232
block(self);
3333
}
34+
else {
35+
return nil;
36+
}
37+
if (_datafile == nil) {
38+
return nil;
39+
}
40+
3441
return self;
3542
}
3643

OptimizelySDKCore/OptimizelySDKCoreTests/OPTLYProjectConfigTest.m

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ - (void)testInitWithBuilderBlockNoDatafile
7474
XCTAssertNil(projectConfig, @"project config should be nil.");
7575
}
7676

77-
- (void)testInitWithBuilderBlockInvalidModules {
77+
- (void)testInitWithBuilderBlockInvalidModulesFails {
7878
NSData *datafile = [OPTLYTestHelper loadJSONDatafileIntoDataObject:kDataModelDatafileName];
7979

8080
id<OPTLYUserProfile> userProfile = [NSObject new];
@@ -88,10 +88,7 @@ - (void)testInitWithBuilderBlockInvalidModules {
8888
builder.errorHandler = errorHandler;
8989
}];
9090

91-
XCTAssertNotNil(projectConfig, @"project config should not be nil.");
92-
XCTAssertNil(projectConfig.userProfile, @"userProfile should be nil.");
93-
XCTAssert(projectConfig.logger, @"logger should not be nil."); // default logger is set
94-
XCTAssert(projectConfig.errorHandler, @"error handler should not be nil."); // default error handler is set
91+
XCTAssertNil(projectConfig, @"project config should not be able to be created with invalid modules.");
9592
}
9693

9794
- (void)testInitWithDatafile
@@ -150,4 +147,5 @@ - (void)checkProjectConfigProperties:(OPTLYProjectConfig *)projectConfig
150147
NSAssert([event isKindOfClass:[OPTLYEvent class]], @"deserializeJSONArray failed to deserialize the event object in project config.");
151148
}
152149
}
150+
153151
@end

0 commit comments

Comments
 (0)