Skip to content

Commit 86a0c61

Browse files
committed
use proper types rather than json types
1 parent 33de197 commit 86a0c61

File tree

4 files changed

+28
-34
lines changed

4 files changed

+28
-34
lines changed

core/src/main/java/com/segment/analytics/kotlin/core/Events.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ class DateSerializer : KSerializer<Instant> {
3535

3636
@Serializable
3737
data class DestinationMetadata(
38-
var bundled: JsonArray = emptyJsonArray,
39-
var unbundled: JsonArray = emptyJsonArray,
40-
var bundledIds: JsonArray = emptyJsonArray,
38+
var bundled: List<String>? = emptyList(),
39+
var unbundled: List<String>? = emptyList(),
40+
var bundledIds: List<String>? = emptyList(),
4141
)
4242

4343
@Serializable

core/src/main/java/com/segment/analytics/kotlin/core/HTTPClient.kt

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import java.net.HttpURLConnection
1111
import java.net.MalformedURLException
1212
import java.net.URL
1313
import java.util.zip.GZIPOutputStream
14-
1514
class HTTPClient(private val writeKey: String) {
1615
internal val authHeader = authorizationHeader(writeKey)
1716

@@ -30,7 +29,6 @@ class HTTPClient(private val writeKey: String) {
3029
fun upload(apiHost: String): Connection {
3130
val connection: HttpURLConnection = openConnection("https://$apiHost/b")
3231
connection.setRequestProperty("Content-Type", "text/plain")
33-
connection.setRequestProperty("Content-Encoding", "gzip")
3432
connection.setRequestProperty("Authorization", authHeader)
3533
connection.doOutput = true
3634
connection.setChunkedStreamingMode(0)
@@ -99,6 +97,7 @@ internal fun HttpURLConnection.createGetConnection(): Connection {
9997

10098
internal fun HttpURLConnection.createPostConnection(): Connection {
10199
val outputStream: OutputStream
100+
setRequestProperty("Content-Encoding", "gzip")
102101
outputStream = GZIPOutputStream(this.outputStream)
103102
return object : Connection(this, null, outputStream) {
104103
@Throws(IOException::class)
@@ -138,4 +137,16 @@ internal class HTTPException(
138137
fun is4xx(): Boolean {
139138
return responseCode in 400..499
140139
}
141-
}
140+
}
141+
/*
142+
143+
curl -H "Authorization:Basic: 2Iv5ifBwYxcTWwYPsfIwrzY9bKRtabKi" -H "Content-Type:application/json" \
144+
-d '{"type":"identify","userId":"bob","traits":{"email":"[email protected]"},"timestamp":"2022-01-06T12:34:56.789Z"}' \
145+
https://api.segment.build/v1/i
146+
147+
148+
curl -H "Authorization:Basic: 2Iv5ifBwYxcTWwYPsfIwrzY9bKRtabKi" -H "Content-Encoding:gzip" -H "Content-Type:application/json" \
149+
--data-binary @<(echo '{"type":"identify","userId":"bob","traits":{"email":"[email protected]"},"timestamp":"2022-01-06T12:34:56.789Z"}' | gzip) \
150+
https://api.segment.build/v1/i
151+
152+
*/

core/src/main/java/com/segment/analytics/kotlin/core/platform/plugins/DestinationMetadataPlugin.kt

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@ import com.segment.analytics.kotlin.core.platform.DestinationPlugin
88
import com.segment.analytics.kotlin.core.platform.Plugin
99
import com.segment.analytics.kotlin.core.utilities.safeJsonArray
1010
import com.segment.analytics.kotlin.core.utilities.safeJsonObject
11-
import kotlinx.serialization.json.JsonArray
12-
import kotlinx.serialization.json.add
13-
import kotlinx.serialization.json.buildJsonArray
11+
import kotlinx.serialization.json.JsonPrimitive
1412

1513
/**
1614
* DestinationMetadataPlugin adds `_metadata` information to payloads that Segment uses to
@@ -33,24 +31,15 @@ class DestinationMetadataPlugin : Plugin {
3331
?.filter { it.enabled && it !is SegmentDestination }
3432
val metadata = DestinationMetadata().apply {
3533
// Mark all loaded destinations as bundled
36-
this.bundled = buildJsonArray {
37-
enabledDestinations?.forEach {
38-
add(it.key)
39-
}
40-
}
34+
this.bundled = enabledDestinations?.map { it.key }
35+
4136
// All unbundledIntegrations not in `bundled` are put in `unbundled`
42-
this.unbundled = buildJsonArray {
43-
analyticsSettings.integrations["Segment.io"]?.safeJsonObject
44-
?.get("unbundledIntegrations")?.safeJsonArray?.let { unbundledList ->
45-
unbundledList.forEach {
46-
if (!bundled.contains(it)) {
47-
add(it)
48-
}
49-
}
50-
}
51-
}
37+
this.unbundled = analyticsSettings.integrations["Segment.io"]?.safeJsonObject
38+
?.get("unbundledIntegrations")?.safeJsonArray?.map { (it as JsonPrimitive).content }
39+
?.filter { !(bundled?.contains(it) ?: false) }
40+
5241
// `bundledIds` for mobile is empty
53-
this.bundledIds = JsonArray(emptyList())
42+
this.bundledIds = emptyList()
5443
}
5544

5645
val payload = event.copy<BaseEvent>().apply {

core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationMetadataPluginTests.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import io.mockk.mockkConstructor
1818
import io.mockk.mockkStatic
1919
import kotlinx.coroutines.test.TestCoroutineDispatcher
2020
import kotlinx.coroutines.test.TestCoroutineScope
21-
import kotlinx.serialization.json.JsonArray
2221
import kotlinx.serialization.json.add
2322
import kotlinx.serialization.json.buildJsonArray
2423
import kotlinx.serialization.json.buildJsonObject
@@ -104,14 +103,9 @@ class DestinationMetadataPluginTests {
104103

105104
val expected = trackEvent.copy<TrackEvent>().apply {
106105
_metadata = DestinationMetadata(
107-
unbundled = buildJsonArray {
108-
add("Customer.io")
109-
add("Amplitude")
110-
},
111-
bundled = buildJsonArray {
112-
add("Mixpanel")
113-
},
114-
bundledIds = JsonArray(emptyList())
106+
unbundled = listOf("Customer.io","Amplitude"),
107+
bundled = listOf("Mixpanel"),
108+
bundledIds = emptyList()
115109
)
116110
}
117111
val actual = plugin.execute(trackEvent)

0 commit comments

Comments
 (0)