Skip to content

Commit 9cd69b8

Browse files
jaeoptthomaszurkan-optimizely
authored andcommitted
remove throw from isFeatureEnabled and getEnabledFeatures (#198)
1 parent 5103952 commit 9cd69b8

File tree

10 files changed

+56
-75
lines changed

10 files changed

+56
-75
lines changed

DemoObjCApp/Samples/SamplesForAPI.m

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,11 @@ +(void)run:(OptimizelyClient*)optimizely {
8383
// MARK: - isFeatureEnabled
8484

8585
{
86-
NSError *error = nil;
87-
NSNumber *enabled = [optimizely isFeatureEnabledWithFeatureKey:@"my_feature_key"
86+
BOOL enabled = [optimizely isFeatureEnabledWithFeatureKey:@"my_feature_key"
8887
userId:@"user_123"
89-
attributes:attributes
90-
error:&error];
88+
attributes:attributes];
9189

92-
if (enabled == nil) {
93-
NSLog(@"Error: %@", error);
94-
} else {
95-
NSLog(@"[isFeatureEnabled] %d", enabled.boolValue);
96-
}
90+
NSLog(@"[isFeatureEnabled] %@", enabled ? @"YES": @"NO");
9791
}
9892

9993
// MARK: - getFeatureVariable
@@ -115,15 +109,9 @@ +(void)run:(OptimizelyClient*)optimizely {
115109
// MARK: - getEnabledFeatures
116110

117111
{
118-
NSError *error = nil;
119112
NSArray *enabledFeatures = [optimizely getEnabledFeaturesWithUserId:@"user_123"
120-
attributes:attributes
121-
error:&error];
122-
if (enabledFeatures == nil) {
123-
NSLog(@"Error: %@", error);
124-
} else {
125-
NSLog(@"[getEnabledFeatures] %@", enabledFeatures);
126-
}
113+
attributes:attributes];
114+
NSLog(@"[getEnabledFeatures] %@", enabledFeatures);
127115
}
128116

129117
// MARK: - track

DemoSwiftApp/AppDelegate.swift

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
122122

123123
if let controller = self.window?.rootViewController as? VariationViewController {
124124
//controller.showCoupon = toggle == FeatureFlagToggle.on ? true : false;
125-
if let showCoupon = try? self.optimizely.isFeatureEnabled(featureKey: "show_coupon", userId: self.userId) {
126-
controller.showCoupon = showCoupon
127-
}
125+
controller.showCoupon = self.optimizely.isFeatureEnabled(featureKey: "show_coupon",
126+
userId: self.userId)
128127
}
129128
}
130129
})
@@ -167,10 +166,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
167166
func openVariationView(variationKey: String?) {
168167
let variationViewController = storyboard.instantiateViewController(withIdentifier: "VariationViewController") as! VariationViewController
169168

170-
if let showCoupon = try? optimizely.isFeatureEnabled(featureKey: "show_coupon", userId: userId) {
171-
variationViewController.showCoupon = showCoupon
172-
}
173-
169+
variationViewController.showCoupon = optimizely.isFeatureEnabled(featureKey: "show_coupon",
170+
userId: userId)
174171
variationViewController.optimizely = optimizely
175172
variationViewController.userId = userId
176173
variationViewController.variationKey = variationKey

DemoSwiftApp/Samples/SamplesForAPI.swift

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,10 @@ class SamplesForAPI {
7171

7272
// MARK: - isFeatureEnabled
7373

74-
do {
75-
let enabled = try optimizely.isFeatureEnabled(featureKey: "my_feature_key",
74+
let enabled = optimizely.isFeatureEnabled(featureKey: "my_feature_key",
7675
userId: "user_123",
7776
attributes: attributes)
78-
print("[isFeatureEnabled] \(enabled)")
79-
} catch {
80-
print(error)
81-
}
77+
print("[isFeatureEnabled] \(enabled)")
8278

8379
// MARK: - getFeatureVariable
8480

@@ -94,12 +90,8 @@ class SamplesForAPI {
9490

9591
// MARK: - getEnabledFeatures
9692

97-
do {
98-
let enabledFeatures = try optimizely.getEnabledFeatures(userId: "user_123", attributes: attributes)
99-
print("[getEnabledFeatures] \(enabledFeatures)")
100-
} catch {
101-
print(error)
102-
}
93+
let enabledFeatures = optimizely.getEnabledFeatures(userId: "user_123", attributes: attributes)
94+
print("[getEnabledFeatures] \(enabledFeatures)")
10395

10496
// MARK: - track
10597

OptimizelySDK/Optimizely/OptimizelyClient+ObjC.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ extension OptimizelyClient {
170170
}
171171

172172
@available(swift, obsoleted: 1.0)
173-
@objc(isFeatureEnabledWithFeatureKey:userId:attributes:error:)
173+
@objc(isFeatureEnabledWithFeatureKey:userId:attributes:)
174174
/// Determine whether a feature is enabled.
175175
///
176176
/// - Parameters:
@@ -181,11 +181,11 @@ extension OptimizelyClient {
181181
/// - Throws: `OptimizelyError` if feature parameter is not valid
182182
public func _objcIsFeatureEnabled(featureKey: String,
183183
userId: String,
184-
attributes: [String:Any]?) throws -> NSNumber {
185-
let enabled = try self.isFeatureEnabled(featureKey: featureKey,
184+
attributes: [String:Any]?) -> Bool {
185+
let enabled = self.isFeatureEnabled(featureKey: featureKey,
186186
userId: userId,
187187
attributes: attributes)
188-
return NSNumber(booleanLiteral: enabled)
188+
return enabled
189189
}
190190

191191

@@ -277,7 +277,7 @@ extension OptimizelyClient {
277277
}
278278

279279
@available(swift, obsoleted: 1.0)
280-
@objc(getEnabledFeaturesWithUserId:attributes:error:)
280+
@objc(getEnabledFeaturesWithUserId:attributes:)
281281
/// Get array of features that are enabled for the user.
282282
///
283283
/// - Parameters:
@@ -286,8 +286,8 @@ extension OptimizelyClient {
286286
/// - Returns: Array of feature keys that are enabled for the user.
287287
/// - Throws: `OptimizelyError` if feature parameter is not valid
288288
public func _objcGetEnabledFeatures(userId: String,
289-
attributes: [String: Any]?) throws -> [String] {
290-
return try self.getEnabledFeatures(userId:userId, attributes: attributes)
289+
attributes: [String: Any]?) -> [String] {
290+
return self.getEnabledFeatures(userId:userId, attributes: attributes)
291291
}
292292

293293
@available(swift, obsoleted: 1.0)

OptimizelySDK/Optimizely/OptimizelyClient.swift

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,15 @@ open class OptimizelyClient: NSObject {
371371
/// - Throws: `OptimizelyError` if feature parameter is not valid
372372
public func isFeatureEnabled(featureKey: String,
373373
userId: String,
374-
attributes: OptimizelyAttributes?=nil) throws -> Bool {
374+
attributes: OptimizelyAttributes?=nil) -> Bool {
375375

376-
guard let config = self.config else { throw OptimizelyError.sdkNotReady }
376+
guard let config = self.config else {
377+
logger.e(.sdkNotReady)
378+
return false
379+
}
377380

378381
guard let featureFlag = config.getFeatureFlag(key: featureKey) else {
382+
logger.e(.featureKeyInvalid(featureKey))
379383
return false
380384
}
381385

@@ -393,7 +397,8 @@ open class OptimizelyClient: NSObject {
393397
guard let variation = pair?.variation else {
394398
args.append(decisionInfo)
395399
self.notificationCenter.sendNotifications(type: NotificationType.Decision.rawValue, args: args)
396-
throw OptimizelyError.variationUnknown(userId, featureKey)
400+
logger.i(.variationUnknown(userId, featureKey))
401+
return false
397402
}
398403

399404
let featureEnabled = variation.featureEnabled ?? false
@@ -602,23 +607,24 @@ open class OptimizelyClient: NSObject {
602607
/// - Returns: Array of feature keys that are enabled for the user.
603608
/// - Throws: `OptimizelyError` if feature parameter is not valid
604609
public func getEnabledFeatures(userId: String,
605-
attributes: OptimizelyAttributes?=nil) throws -> [String] {
610+
attributes: OptimizelyAttributes?=nil) -> [String] {
606611

607-
guard let config = self.config else { throw OptimizelyError.sdkNotReady }
612+
var enabledFeatures = [String]()
608613

609-
guard let featureFlags = config.project?.featureFlags else {
610-
return [String]()
614+
guard let config = self.config else {
615+
logger.e(.sdkNotReady)
616+
return enabledFeatures
611617
}
612618

613-
let enabledFeatures = featureFlags.filter{
614-
do {
615-
return try isFeatureEnabled(featureKey: $0.key, userId: userId, attributes: attributes)
616-
} catch {
617-
return false
618-
}
619+
guard let featureFlags = config.project?.featureFlags else {
620+
return enabledFeatures
619621
}
620622

621-
return enabledFeatures.map{$0.key}
623+
enabledFeatures = featureFlags.filter{
624+
isFeatureEnabled(featureKey: $0.key, userId: userId, attributes: attributes)
625+
}.map{ $0.key }
626+
627+
return enabledFeatures
622628
}
623629

624630
/// Track an event

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyClientTests_Group.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class OptimizelyClientTests_Group: XCTestCase {
3131
let optimizely = OTUtils.createOptimizely(datafileName: "grouped_experiments",
3232
clearUserProfileService: true)!
3333

34-
let featureEnabled = try? optimizely.isFeatureEnabled(featureKey: "mutex_group_feature", userId: kUserId)
35-
XCTAssertTrue(featureEnabled!)
34+
let featureEnabled = optimizely.isFeatureEnabled(featureKey: "mutex_group_feature", userId: kUserId)
35+
XCTAssertTrue(featureEnabled)
3636
}
3737

3838
}

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyClientTests_Invalid.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ class OptimizelyClientTests_Invalid: XCTestCase {
6060
}
6161

6262
func testIsFeatureEnabled_WhenManagerNonInitialized() {
63-
let result: Bool? = try? self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
64-
XCTAssertNil(result)
63+
let result = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
64+
XCTAssertFalse(result)
6565
}
6666

6767
func testGetFeatureVariableBoolean_WhenManagerNonInitialized() {
@@ -93,8 +93,8 @@ class OptimizelyClientTests_Invalid: XCTestCase {
9393
}
9494

9595
func testGetEnabledFeatures_WhenManagerNonInitialized() {
96-
let result: [String]? = try? self.optimizely.getEnabledFeatures(userId: kUserId)
97-
XCTAssertNil(result)
96+
let result = self.optimizely.getEnabledFeatures(userId: kUserId)
97+
XCTAssert(result.count == 0)
9898
}
9999

100100
func testTrack_WhenManagerNonInitialized() {

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyClientTests_ObjcAPIs.m

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,7 @@ - (void)testSetForcedVariation {
148148
- (void)testIsFeatureEnabled {
149149
BOOL result = [self.optimizely isFeatureEnabledWithFeatureKey:kFeatureKey
150150
userId:kUserId
151-
attributes:self.attributes
152-
error:nil];
151+
attributes:self.attributes];
153152
XCTAssertTrue(result);
154153
}
155154

@@ -191,8 +190,7 @@ - (void)testGetFeatureVariableString {
191190

192191
- (void)testGetEnabledFeatures {
193192
NSArray *result = [self.optimizely getEnabledFeaturesWithUserId:kUserId
194-
attributes:self.attributes
195-
error:nil];
193+
attributes:self.attributes];
196194
XCTAssertEqualObjects(result, @[kFeatureKey]);
197195
}
198196

OptimizelySDK/OptimizelyTests/OptimizelyTests-APIs/OptimizelyClientTests_Valid.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class OptimizelyClientTests_Valid: XCTestCase {
8888
}
8989

9090
func testIsFeatureEnabled() {
91-
let result: Bool = try! self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
91+
let result = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
9292
XCTAssertTrue(result)
9393
}
9494

@@ -121,7 +121,7 @@ class OptimizelyClientTests_Valid: XCTestCase {
121121
}
122122

123123
func testGetEnabledFeatures() {
124-
let result: [String] = try! self.optimizely.getEnabledFeatures(userId: kUserId)
124+
let result: [String] = self.optimizely.getEnabledFeatures(userId: kUserId)
125125
XCTAssert(result == [kFeatureKey])
126126
}
127127

OptimizelySDK/OptimizelyTests/OptimizelyTests-Common/DecisionListenerTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ class DecisionListenerTests: XCTestCase {
488488
count += 1
489489
}
490490

491-
_ = try! optimizely.getEnabledFeatures(userId: kUserId)
491+
_ = optimizely.getEnabledFeatures(userId: kUserId)
492492
XCTAssertEqual(count, 2)
493493
}
494494

@@ -502,7 +502,7 @@ class DecisionListenerTests: XCTestCase {
502502
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment])
503503
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.variation])
504504
}
505-
_ = try? self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
505+
_ = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
506506
}
507507

508508
func testDecisionListenerWithUserInRollout() {
@@ -517,7 +517,7 @@ class DecisionListenerTests: XCTestCase {
517517
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment])
518518
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.variation])
519519
}
520-
_ = try! self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
520+
_ = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
521521

522522
variation.featureEnabled = false
523523
self.optimizely.setDecisionServiceData(experiment: nil, variation: variation)
@@ -528,7 +528,7 @@ class DecisionListenerTests: XCTestCase {
528528
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.experiment])
529529
XCTAssertNil(decisionInfo[Constants.ExperimentDecisionInfoKeys.variation])
530530
}
531-
_ = try! self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
531+
_ = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
532532
}
533533

534534
func testDecisionListenerWithUserInExperiment() {
@@ -546,7 +546,7 @@ class DecisionListenerTests: XCTestCase {
546546
XCTAssertEqual(sourceInfo[Constants.ExperimentDecisionInfoKeys.experiment] as! String, experiment.key)
547547
XCTAssertEqual(sourceInfo[Constants.ExperimentDecisionInfoKeys.variation] as! String, variation.key)
548548
}
549-
_ = try! self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
549+
_ = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
550550

551551
variation.featureEnabled = false
552552
self.optimizely.setDecisionServiceData(experiment: experiment, variation: variation)
@@ -559,7 +559,7 @@ class DecisionListenerTests: XCTestCase {
559559
XCTAssertEqual(sourceInfo[Constants.ExperimentDecisionInfoKeys.experiment] as! String, experiment.key)
560560
XCTAssertEqual(sourceInfo[Constants.ExperimentDecisionInfoKeys.variation] as! String, variation.key)
561561
}
562-
_ = try! self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
562+
_ = self.optimizely.isFeatureEnabled(featureKey: kFeatureKey, userId: kUserId)
563563
}
564564
}
565565

0 commit comments

Comments
 (0)