Skip to content

Commit

Permalink
refactor: Revert "feat: CreateConfidence from Provider for Metadata (#…
Browse files Browse the repository at this point in the history
…141)" (#142)

* Revert "feat: CreateConfidence from Provider for Metadata (#141)"

This reverts commit bf368df.

* refactor: minor polishing

* refacor: Remove unused metadata from Provider
  • Loading branch information
fabriziodemaria committed Jun 25, 2024
1 parent 0a4d522 commit 643a49a
Show file tree
Hide file tree
Showing 5 changed files with 14 additions and 85 deletions.
19 changes: 5 additions & 14 deletions Sources/Confidence/Confidence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,9 @@ public class Confidence: ConfidenceEventSender {
}
}

/**
Sets the initial Context.
*/
public func withContext(_ context: ConfidenceStruct) -> Self {
return Self.init(
clientSecret: clientSecret,
Expand Down Expand Up @@ -302,9 +305,6 @@ extension Confidence {
return self
}

/**
Sets the initial Context.
*/
public func withContext(initialContext: ConfidenceStruct) -> Builder {
self.initialContext = initialContext
return self
Expand All @@ -319,21 +319,12 @@ extension Confidence {
return self
}

/**
Overrides the Metadata for the Confidence instance. In normal production scenarios, Metadata is
handled automatically by the SDK and this overrides should not be applied.
*/
public func withMetadata(metadata: ConfidenceMetadata) -> Builder {
self.metadata = metadata
return self
}

public func build() -> Confidence {
let options = ConfidenceClientOptions(
credentials: ConfidenceClientCredentials.clientSecret(secret: clientSecret),
region: region)
let metadata = metadata ?? ConfidenceMetadata(
name: Confidence.sdkId,
let metadata = ConfidenceMetadata(
name: sdkId,
version: "0.2.2") // x-release-please-version
let uploader = RemoteConfidenceClient(
options: options,
Expand Down
5 changes: 2 additions & 3 deletions Sources/Confidence/RemoteResolveConfidenceClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ import Foundation
public class RemoteConfidenceResolveClient: ConfidenceResolveClient {
private let targetingKey = "targeting_key"
private var options: ConfidenceClientOptions
private let metadata: ConfidenceMetadata

private var httpClient: HttpClient
private var applyOnResolve: Bool

// Internal for testing
internal let metadata: ConfidenceMetadata

init(
options: ConfidenceClientOptions,
session: URLSession? = nil,
Expand Down
48 changes: 6 additions & 42 deletions Sources/ConfidenceProvider/ConfidenceFeatureProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,64 +5,27 @@ import OpenFeature
import os

struct Metadata: ProviderMetadata {
var name: String? = ConfidenceFeatureProvider.providerId
var name: String?
}

/// The implementation of the Confidence Feature Provider. This implementation allows to pre-cache evaluations.
public class ConfidenceFeatureProvider: FeatureProvider {
public static let providerId: String = "SDK_ID_SWIFT_PROVIDER"

public var metadata: ProviderMetadata = Metadata()
public var metadata: ProviderMetadata
public var hooks: [any Hook] = []
private let lock = UnfairLock()
private let initializationStrategy: InitializationStrategy
private let eventHandler = EventHandler(ProviderEvent.notReady)
private let confidence: Confidence
private let confidenceFeatureProviderQueue = DispatchQueue(label: "com.provider.queue")
private var cancellables = Set<AnyCancellable>()
private var currentResolveTask: Task<Void, Never>?
private let confidenceFeatureProviderQueue = DispatchQueue(label: "com.provider.queue")

/**
Creates the `Confidence` object to be used as init parameter for this Provider.
*/
public static func createConfidence(clientSecret: String) -> ConfidenceForOpenFeature {
return ConfidenceForOpenFeature.init(confidence: Confidence.Builder.init(clientSecret: clientSecret)
.withRegion(region: .global)
.withMetadata(metadata: ConfidenceMetadata.init(
name: providerId,
version: "0.2.2") // x-release-please-version
)
.build())
}

/**
Proxy holder to ensure correct Confidence configuration passed into the Provider's init.
Do not instantiate directly.
*/
public class ConfidenceForOpenFeature {
internal init(confidence: Confidence) {
self.confidence = confidence
}
let confidence: Confidence
}

/**
Initialize the Provider via a `Confidence` object.
The `Confidence` object must be creted via the `createConfidence` function available from this same class,
rather then be instantiated directly via `Confidence.init(...)` as you would if not using the OpenFeature integration.
The `initializationStrategy` defines when the Provider is ready to read flags, before or after a refresh of the flag evaluation fata.
*/
public convenience init(
confidenceForOF: ConfidenceForOpenFeature,
initializationStrategy: InitializationStrategy = .fetchAndActivate
) {
self.init(confidence: confidenceForOF.confidence, session: nil)
}

// Allows to pass a confidence object with injected configurations for testing
internal convenience init(
confidence: Confidence,
initializationStrategy: InitializationStrategy = .fetchAndActivate
) {
public convenience init(confidence: Confidence, initializationStrategy: InitializationStrategy = .fetchAndActivate) {
self.init(confidence: confidence, session: nil)
}

Expand All @@ -71,6 +34,7 @@ public class ConfidenceFeatureProvider: FeatureProvider {
initializationStrategy: InitializationStrategy = .fetchAndActivate,
session: URLSession?
) {
self.metadata = Metadata(name: ConfidenceFeatureProvider.providerId)
self.initializationStrategy = initializationStrategy
self.confidence = confidence
}
Expand Down
20 changes: 1 addition & 19 deletions Tests/ConfidenceProviderTests/ConfidenceProviderTest.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import Foundation
import ConfidenceProvider
import Combine
import OpenFeature
import XCTest

@testable import Confidence
@testable import ConfidenceProvider

class ConfidenceProviderTest: XCTestCase {
private var readyExpectation = XCTestExpectation(description: "Ready")
Expand Down Expand Up @@ -74,22 +74,4 @@ class ConfidenceProviderTest: XCTestCase {
await fulfillment(of: [errorExpectation], timeout: 5.0)
cancellable.cancel()
}

func testMetadata() async throws {
class FakeClient: ConfidenceResolveClient {
func resolve(ctx: ConfidenceStruct) async throws -> ResolvesResult {
throw ConfidenceError.internalError(message: "test")
}
}

let confidenceForOpenFeature = ConfidenceFeatureProvider.createConfidence(clientSecret: "testSecret")
let provider = ConfidenceFeatureProvider(
confidenceForOF: confidenceForOpenFeature,
initializationStrategy: .activateAndFetchAsync
)
XCTAssertEqual("SDK_ID_SWIFT_PROVIDER", provider.metadata.name)
let remoteClient = confidenceForOpenFeature.confidence.remoteFlagResolver as? RemoteConfidenceResolveClient
XCTAssertEqual("SDK_ID_SWIFT_PROVIDER", remoteClient?.metadata.name)
XCTAssertNotEqual("", remoteClient?.metadata.version)
}
}
7 changes: 0 additions & 7 deletions Tests/ConfidenceTests/ConfidenceTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -581,13 +581,6 @@ class ConfidenceTest: XCTestCase {
XCTAssertEqual(error as? ConfidenceError, ConfidenceError.invalidContextInMessage)
}
}

func testConfidenceMetadata() {
let confidence = Confidence.Builder(clientSecret: "").build()
let remoteClient = confidence.remoteFlagResolver as? RemoteConfidenceResolveClient
XCTAssertEqual("SDK_ID_SWIFT_CONFIDENCE", remoteClient?.metadata.name)
XCTAssertNotEqual("", remoteClient?.metadata.version)
}
}

final class DispatchQueueFake: DispatchQueueType {
Expand Down

0 comments on commit 643a49a

Please sign in to comment.