|
|
|
@ -47,15 +47,31 @@ private class EventWrapper<T : Enum<T>>(
|
|
|
|
|
private val recorder: ((Map<T, String>?) -> Unit),
|
|
|
|
|
private val keyMapper: ((String) -> T)? = null
|
|
|
|
|
) {
|
|
|
|
|
private val String.asCamelCase: String
|
|
|
|
|
get() = this.split("_").reduceIndexed { index, acc, s ->
|
|
|
|
|
if (index == 0) acc + s
|
|
|
|
|
else acc + s.capitalize()
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Converts snake_case string to camelCase.
|
|
|
|
|
*/
|
|
|
|
|
private fun String.asCamelCase(): String {
|
|
|
|
|
val parts = split("_")
|
|
|
|
|
val builder = StringBuilder()
|
|
|
|
|
|
|
|
|
|
for ((index, part) in parts.withIndex()) {
|
|
|
|
|
if (index == 0) {
|
|
|
|
|
builder.append(part)
|
|
|
|
|
} else {
|
|
|
|
|
builder.append(part[0].toUpperCase())
|
|
|
|
|
builder.append(part.substring(1))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return builder.toString()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun track(event: Event) {
|
|
|
|
|
val extras = if (keyMapper != null) {
|
|
|
|
|
event.extras?.mapKeys { keyMapper.invoke(it.key.toString().asCamelCase) }
|
|
|
|
|
event.extras?.mapKeys { (key) ->
|
|
|
|
|
keyMapper.invoke(key.toString().asCamelCase())
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
null
|
|
|
|
|
}
|
|
|
|
|