1
0
Fork 0

Refactor asCamelCase to use string builder (#6141)

master
Tiger Oakes 2019-10-22 14:33:44 -07:00 committed by Sawyer Blatz
parent 5d5358ae45
commit cbc449d3b6
2 changed files with 22 additions and 6 deletions

View File

@ -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
}

View File

@ -297,7 +297,7 @@ sealed class Event {
}
override val extras: Map<Events.browserMenuActionKeys, String>?
get() = mapOf(Events.browserMenuActionKeys.item to item.toString().toLowerCase())
get() = mapOf(Events.browserMenuActionKeys.item to item.toString().toLowerCase(Locale.ROOT))
}
sealed class Search