Skip to content

Commit 3ec73f2

Browse files
authored
refactor: make targeting key immutable (#66)
Signed-off-by: Nicklas Lundin <[email protected]> Release-As: 0.1.0
1 parent cdcb2df commit 3ec73f2

File tree

3 files changed

+15
-9
lines changed

3 files changed

+15
-9
lines changed

OpenFeature/src/main/java/dev/openfeature/sdk/EvaluationContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package dev.openfeature.sdk
22

33
interface EvaluationContext : Structure {
44
fun getTargetingKey(): String
5-
fun setTargetingKey(targetingKey: String)
5+
fun withTargetingKey(targetingKey: String): EvaluationContext
66

77
// Make sure these are implemented for correct object comparisons
88
override fun hashCode(): Int

OpenFeature/src/main/java/dev/openfeature/sdk/ImmutableContext.kt

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package dev.openfeature.sdk
22

3-
class ImmutableContext
4-
(private var targetingKey: String = "", attributes: Map<String, Value> = mapOf()) : EvaluationContext {
3+
class ImmutableContext(
4+
private val targetingKey: String = "",
5+
attributes: Map<String, Value> = mapOf()
6+
) : EvaluationContext {
57
private val structure: ImmutableStructure = ImmutableStructure(attributes)
68
override fun getTargetingKey(): String {
79
return targetingKey
810
}
911

10-
override fun setTargetingKey(targetingKey: String) {
11-
this.targetingKey = targetingKey
12-
}
12+
override fun withTargetingKey(targetingKey: String): ImmutableContext =
13+
ImmutableContext(
14+
targetingKey = targetingKey,
15+
attributes = this.structure.asMap()
16+
)
1317

1418
override fun keySet(): Set<String> {
1519
return structure.keySet()

OpenFeature/src/test/java/dev/openfeature/sdk/EvalContextTests.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import java.util.Date
77
class EvalContextTests {
88

99
@Test
10-
fun testContextStoresTargetingKey() {
10+
fun testContextIsImmutableButStoresTargetingKey() {
1111
val ctx = ImmutableContext()
12-
ctx.setTargetingKey("test")
13-
Assert.assertEquals("test", ctx.getTargetingKey())
12+
Assert.assertEquals("", ctx.getTargetingKey())
13+
14+
val newCtx = ctx.withTargetingKey("test")
15+
Assert.assertEquals("test", newCtx.getTargetingKey())
1416
}
1517

1618
@Test

0 commit comments

Comments
 (0)