Skip to content

Commit d3a1325

Browse files
Stop double quoting JSON values (#57)
1 parent 2658134 commit d3a1325

File tree

10 files changed

+4
-74
lines changed

10 files changed

+4
-74
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ kotlin.code.style=official
22
kotlin.jvm.target=11
33

44
GROUP=io.github.kevincianfarini.monarch
5-
VERSION_NAME=0.2.0
5+
VERSION_NAME=0.2.1
66

77
POM_INCEPTION_YEAR=2024
88

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ kotlin = "1.9.22"
88
kotlin-nodejs = "18.16.12-pre.634"
99
kotlinx-coroutines = "1.8.0"
1010
kotlinx-serialization = "1.6.2"
11-
launchdarkly-android = "5.0.0"
11+
launchdarkly-android = "5.0.5"
1212
publish = "0.27.0"
1313
turbine = "1.0.0"
1414

integrations/launch-darkly/build.gradle.kts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ plugins {
22
alias(libs.plugins.android.library)
33
alias(libs.plugins.dokka)
44
alias(libs.plugins.kotlin.multiplatform)
5-
alias(libs.plugins.kotlin.serialization)
65
alias(libs.plugins.publish)
76
}
87

@@ -35,7 +34,6 @@ kotlin {
3534
commonTest.dependencies {
3635
implementation(libs.kotlin.test)
3736
implementation(libs.kotlinx.coroutines.test)
38-
implementation(libs.kotlinx.serialization.json)
3937
implementation(libs.turbine)
4038
}
4139
androidMain.dependencies {

integrations/launch-darkly/src/androidMain/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyFeatureFlagDataStore.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.github.kevincianfarini.monarch.launchdarkly
22

3-
import com.launchdarkly.sdk.LDValue
43
import com.launchdarkly.sdk.android.LDClientInterface
54
import io.github.kevincianfarini.monarch.ObservableFeatureFlagDataStore
65
import kotlinx.coroutines.channels.awaitClose
@@ -56,13 +55,7 @@ private inline fun <reified T : Any> LDClientInterface.observeValue(key: String,
5655
private inline fun <reified T : Any> LDClientInterface.getValue(key: String, default: T): T {
5756
return when (val clazz = T::class) {
5857
Boolean::class -> boolVariation(key, default as Boolean) as T
59-
String::class -> {
60-
val ldValue = jsonValueVariation(key, LDValue.ofNull())
61-
when (ldValue.isNull) {
62-
true -> stringVariation(key, default as String)
63-
false -> ldValue.toJsonString()
64-
} as T
65-
}
58+
String::class -> stringVariation(key, default as String) as T
6659
Double::class -> doubleVariation(key, default as Double) as T
6760
Long::class -> intVariation(key, (default as Long).toInt()).toLong() as T
6861
else -> throw IllegalArgumentException("Illegal type for getValue: $clazz")

integrations/launch-darkly/src/androidUnitTest/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyFeatureFlagDataStoreTest.android.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import com.launchdarkly.sdk.android.LDAllFlagsListener
99
import com.launchdarkly.sdk.android.LDClientInterface
1010
import com.launchdarkly.sdk.android.LDStatusListener
1111
import io.github.kevincianfarini.monarch.ObservableFeatureFlagDataStore
12-
import kotlinx.serialization.SerializationStrategy
13-
import kotlinx.serialization.json.Json
1412
import java.util.concurrent.ConcurrentHashMap
1513
import java.util.concurrent.Future
1614

@@ -74,11 +72,6 @@ private class FakeLDClient : LDClientInterface, MutableLDClientInterface {
7472
listeners[flagKey]?.forEach { it.onFeatureFlagChange(flagKey) }
7573
}
7674

77-
override fun <T> setVariation(flagKey: String, value: T, serialzer: SerializationStrategy<T>) {
78-
flagValues[flagKey] = LDValue.parse(Json.Default.encodeToString(serialzer, value))
79-
listeners[flagKey]?.forEach { it.onFeatureFlagChange(flagKey) }
80-
}
81-
8275
override fun boolVariationDetail(p0: String?, p1: Boolean): EvaluationDetail<Boolean> {
8376
TODO("Not yet implemented")
8477
}

integrations/launch-darkly/src/commonTest/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyFeatureFlagDataStoreTest.kt

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package io.github.kevincianfarini.monarch.launchdarkly
33
import app.cash.turbine.test
44
import io.github.kevincianfarini.monarch.ObservableFeatureFlagDataStore
55
import kotlinx.coroutines.test.runTest
6-
import kotlinx.serialization.Serializable
7-
import kotlinx.serialization.json.Json
86
import kotlin.test.*
97

108
class LaunchDarklyFeatureFlagDataStoreTest {
@@ -53,14 +51,6 @@ class LaunchDarklyFeatureFlagDataStoreTest {
5351
assertEquals("non_default", dataStore.getString("key", "default"))
5452
}
5553

56-
@Test fun getting_string_from_json_flag_returns_value() {
57-
val (dataStore, mutate) = sut()
58-
val expected = Thing(1, 2)
59-
mutate.setVariation("key", expected, Thing.serializer())
60-
val jsonString = dataStore.getString("key", "{}")
61-
assertEquals(expected, Json.Default.decodeFromString(Thing.serializer(), jsonString))
62-
}
63-
6454
@Test fun observing_string_coerces_initial_default_to_null() = runTest {
6555
val (dataStore, _) = sut()
6656
dataStore.observeString("key", "default").test {
@@ -156,22 +146,6 @@ class LaunchDarklyFeatureFlagDataStoreTest {
156146
assertEquals(3L, awaitItem())
157147
}
158148
}
159-
160-
@Test fun observing_json_string_emits_value_updates() = runTest {
161-
val (dataStore, mutate) = sut()
162-
val first = Thing(1, 2)
163-
val second = Thing(2, 3)
164-
mutate.setVariation("key", first, Thing.serializer())
165-
dataStore.observeString("key", "{}").test {
166-
val item = awaitItem()
167-
assertEquals(first, Json.Default.decodeFromString(Thing.serializer(), item))
168-
mutate.setVariation("key", second, Thing.serializer())
169-
assertEquals(second, Json.Default.decodeFromString(Thing.serializer(), awaitItem()))
170-
}
171-
}
172149
}
173150

174-
@Serializable
175-
private data class Thing(val first: Int, val second: Int)
176-
177151
expect fun sut(): Pair<ObservableFeatureFlagDataStore, MutableLDClientInterface>
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package io.github.kevincianfarini.monarch.launchdarkly
22

3-
import kotlinx.serialization.SerializationStrategy
4-
53
interface MutableLDClientInterface {
6-
74
fun setVariation(flagKey: String, value: Boolean)
85
fun setVariation(flagKey: String, value: String)
96
fun setVariation(flagKey: String, value: Double)
107
fun setVariation(flagKey: String, value: Int)
11-
fun <T> setVariation(flagKey: String, value: T, serialzer: SerializationStrategy<T>)
128
}
139

integrations/launch-darkly/src/iosMain/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyClientShim.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ public interface LaunchDarklyClientShim {
2828
*/
2929
public fun stringVariation(forKey: String, default: String): String
3030

31-
/**
32-
* Return a JSON encoded [String] value [forKey], or [default] if no value exists.
33-
*/
34-
public fun jsonStringVariation(forKey: String, default: String?): String?
35-
3631
/**
3732
* Register a [handler] to be invoked when the value associated with [key] changes, scoped
3833
* to [owner].

integrations/launch-darkly/src/iosMain/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyFeatureFlagDataStore.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,7 @@ private inline fun <reified T : Any> LaunchDarklyClientShim.observeValue(key: St
6868
private inline fun <reified T : Any> LaunchDarklyClientShim.getValue(key: String, default: T): T {
6969
return when (val clazz = T::class) {
7070
Boolean::class -> boolVariation(key, default as Boolean) as T
71-
String::class -> {
72-
val jsonString = jsonStringVariation(key, null)
73-
when (jsonString) {
74-
null -> stringVariation(key, default as String)
75-
else -> jsonString
76-
} as T
77-
}
71+
String::class -> stringVariation(key, default as String) as T
7872
Double::class -> doubleVariation(key, default as Double) as T
7973
Long::class -> intVariation(key, (default as Long).toInt()).toLong() as T
8074
else -> throw IllegalArgumentException("Illegal type for getValue: $clazz")

integrations/launch-darkly/src/iosTest/kotlin/io/github/kevincianfarini/monarch/launchdarkly/LaunchDarklyFeatureFlagDataStoreTest.ios.kt

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package io.github.kevincianfarini.monarch.launchdarkly
22

33
import io.github.kevincianfarini.monarch.ObservableFeatureFlagDataStore
4-
import kotlinx.serialization.SerializationStrategy
5-
import kotlinx.serialization.json.Json
64

75
actual fun sut(): Pair<ObservableFeatureFlagDataStore, MutableLDClientInterface> {
86
val client = FakeLDShim()
@@ -34,11 +32,6 @@ private class FakeLDShim : LaunchDarklyClientShim, MutableLDClientInterface {
3432
listeners.filter { it.key == flagKey }.forEach { it.handler() }
3533
}
3634

37-
override fun <T> setVariation(flagKey: String, value: T, serialzer: SerializationStrategy<T>) {
38-
flagValues[flagKey] = JsonValue(Json.Default.encodeToString(serialzer, value))
39-
listeners.filter { it.key == flagKey }.forEach { it.handler() }
40-
}
41-
4235
override fun boolVariation(forKey: String, default: Boolean): Boolean {
4336
return (flagValues[forKey] as? Boolean) ?: default
4437
}
@@ -55,10 +48,6 @@ private class FakeLDShim : LaunchDarklyClientShim, MutableLDClientInterface {
5548
return (flagValues[forKey] as? String) ?: default
5649
}
5750

58-
override fun jsonStringVariation(forKey: String, default: String?): String? {
59-
return (flagValues[forKey] as? JsonValue)?.jsonString ?: default
60-
}
61-
6251
override fun observe(key: String, owner: ObserverOwner, handler: () -> Unit) {
6352
listeners.add(FlagListener(key, owner, handler))
6453
}
@@ -73,5 +62,3 @@ private data class FlagListener(
7362
val owner: ObserverOwner,
7463
val handler: () -> Unit,
7564
)
76-
77-
private class JsonValue(val jsonString: String)

0 commit comments

Comments
 (0)