-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathInjectableEventHandlerProvider.swift
73 lines (61 loc) · 2.21 KB
/
InjectableEventHandlerProvider.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import Foundation
import OpenFeature
import Combine
class InjectableEventHandlerProvider: FeatureProvider {
public static let name = "InjectableEventHandler"
private let eventHandler: EventHandler
init(eventHandler: EventHandler) {
self.eventHandler = eventHandler
}
func onContextSet(oldContext: OpenFeature.EvaluationContext?, newContext: OpenFeature.EvaluationContext) {
// Emit stale, then let the parent test control events via eventHandler
eventHandler.send(.stale)
}
func initialize(initialContext: OpenFeature.EvaluationContext?) {
// Emit stale, then let the parent test control events via eventHandler
eventHandler.send(.stale)
}
var hooks: [any OpenFeature.Hook] = []
var metadata: OpenFeature.ProviderMetadata = InjectableEventHandlerMetadata()
func getBooleanEvaluation(key: String, defaultValue: Bool, context: EvaluationContext?) throws
-> ProviderEvaluation<
Bool
>
{
return ProviderEvaluation(value: !defaultValue)
}
func getStringEvaluation(key: String, defaultValue: String, context: EvaluationContext?) throws
-> ProviderEvaluation<
String
>
{
return ProviderEvaluation(value: String(defaultValue.reversed()))
}
func getIntegerEvaluation(key: String, defaultValue: Int64, context: EvaluationContext?) throws
-> ProviderEvaluation<
Int64
>
{
return ProviderEvaluation(value: defaultValue * 100)
}
func getDoubleEvaluation(key: String, defaultValue: Double, context: EvaluationContext?) throws
-> ProviderEvaluation<
Double
>
{
return ProviderEvaluation(value: defaultValue * 100)
}
func getObjectEvaluation(key: String, defaultValue: Value, context: EvaluationContext?) throws
-> ProviderEvaluation<
Value
>
{
return ProviderEvaluation(value: .null)
}
func observe() -> AnyPublisher<OpenFeature.ProviderEvent, Never> {
eventHandler.observe()
}
public struct InjectableEventHandlerMetadata: ProviderMetadata {
public var name: String? = InjectableEventHandlerProvider.name
}
}