Skip to content

Commit

Permalink
Adding feature flag for segment
Browse files Browse the repository at this point in the history
  • Loading branch information
singhhari committed Feb 22, 2021
1 parent a7b8d48 commit c670788
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 4 deletions.
4 changes: 4 additions & 0 deletions Library/Extensions/Feature+Helpers.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ public func featureEmailVerificationSkipIsEnabled() -> Bool {
return Feature.emailVerificationSkip.isEnabled()
}

public func featureSegmentIsEnabled() -> Bool {
return Feature.segment.isEnabled()
}

extension Feature {
fileprivate func isEnabled(in environment: Environment = AppEnvironment.current) -> Bool {
guard let features = environment.config?.features, !features.isEmpty else { return false }
Expand Down
26 changes: 26 additions & 0 deletions Library/Extensions/Feature+HelpersTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,30 @@ final class FeatureHelpersTests: TestCase {
XCTAssertFalse(featureEmailVerificationSkipIsEnabled())
}
}

// MARK: - Segment

func testFeatureSegment_isTrue() {
let config = Config.template
|> \.features .~ [Feature.segment.rawValue: true]

withEnvironment(config: config) {
XCTAssertTrue(featureSegmentIsEnabled())
}
}

func testFeatureSegment_isFalse() {
let config = Config.template
|> \.features .~ [Feature.segment.rawValue: false]

withEnvironment(config: config) {
XCTAssertFalse(featureSegmentIsEnabled())
}
}

func testFeatureSegment_isFalse_whenNil() {
withEnvironment(config: .template) {
XCTAssertFalse(featureSegmentIsEnabled())
}
}
}
2 changes: 2 additions & 0 deletions Library/Feature.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public enum Feature: String {
case qualtrics = "ios_qualtrics"
case emailVerificationFlow = "ios_email_verification_flow"
case emailVerificationSkip = "ios_email_verification_skip"
case segment = "ios_segment"
}

extension Feature: CustomStringConvertible {
Expand All @@ -12,6 +13,7 @@ extension Feature: CustomStringConvertible {
case .qualtrics: return "Qualtrics"
case .emailVerificationFlow: return "Email Verification Flow"
case .emailVerificationSkip: return "Email Verification Skip"
case .segment: return "Segment"
}
}
}
9 changes: 6 additions & 3 deletions Library/Tracking/Segment.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,24 @@ public extension Analytics {

extension Analytics: IdentifyingTrackingClient {
public func identify(userId: String?, traits: [String: Any]?) {
guard AppEnvironment.current.environmentVariables.isTrackingEnabled else { return }
guard AppEnvironment.current.environmentVariables.isTrackingEnabled,
featureSegmentIsEnabled() else { return }

self.identify(userId, traits: traits)
}

public func resetIdentity() {
guard AppEnvironment.current.environmentVariables.isTrackingEnabled else { return }
guard AppEnvironment.current.environmentVariables.isTrackingEnabled,
featureSegmentIsEnabled() else { return }

self.reset()
}
}

extension Analytics: TrackingClientType {
public func track(event: String, properties: [String: Any]) {
guard AppEnvironment.current.environmentVariables.isTrackingEnabled else { return }
guard AppEnvironment.current.environmentVariables.isTrackingEnabled,
featureSegmentIsEnabled() else { return }

self.track(event, properties: properties)
}
Expand Down
3 changes: 2 additions & 1 deletion Library/ViewModels/FeatureFlagToolsViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ final class FeatureFlagToolsViewModelTests: TestCase {
let featureEnabled = featureEnabledFromDictionaries([[
"ios_qualtrics": false,
"ios_email_verification_flow": false,
"ios_email_verification_skip": false
"ios_email_verification_skip": false,
"ios_segment": false
]])

XCTAssertFalse(featureEnabled.isEmpty, "Known features produce Feature enums")
Expand Down

0 comments on commit c670788

Please sign in to comment.