From 989f370624798936eb0c88d93e0eb616809b049a Mon Sep 17 00:00:00 2001 From: zaleslaw Date: Tue, 16 May 2023 16:31:47 +0200 Subject: [PATCH 1/2] Added test and fixed behaviour --- .../org/jetbrains/kotlinx/dataframe/api/rename.kt | 11 +++++++++++ .../org/jetbrains/kotlinx/dataframe/api/rename.kt | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt index c5015c71ec..2b8c88cb2c 100644 --- a/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt +++ b/core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt @@ -43,15 +43,26 @@ public fun DataFrame.rename(cols: Iterable>): Renam public data class RenameClause(val df: DataFrame, val columns: ColumnsSelector) public fun DataFrame.renameToCamelCase(): DataFrame { + // recursively rename all column groups to camel case return rename { dfs { it.isColumnGroup() && it.name() matches DELIMITED_STRING_REGEX } }.toCamelCase() + // recursively rename all other columns to camel case .rename { dfs { !it.isColumnGroup() && it.name() matches DELIMITED_STRING_REGEX } }.toCamelCase() + + // take all frame columns recursively and call renameToCamelCase() on all dataframes inside .update { dfsOf() }.with { it.renameToCamelCase() } + + // convert all first chars of all columns to the lowercase + .rename { + allDfs() + }.into { + it.name.replaceFirstChar { it.lowercaseChar() } + } } public fun RenameClause.into(vararg newColumns: ColumnReference<*>): DataFrame = diff --git a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt index 46890a1e25..c06df4459f 100644 --- a/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt +++ b/core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt @@ -55,4 +55,11 @@ class RenameTests { } } } + + @Test + fun `rename to camelCase`() { + val dfWithUpperCaseColumnNames = dataFrameOf("First_Column", "second_column", "ThirdColumn")(1, 2, 3) + val df = dfWithUpperCaseColumnNames.renameToCamelCase() + df.columnNames() shouldBe listOf("firstColumn", "secondColumn", "thirdColumn") + } } From d9907e2914c3d8636fd8eae6dcc6126c0be74707 Mon Sep 17 00:00:00 2001 From: zaleslaw Date: Tue, 16 May 2023 16:36:11 +0200 Subject: [PATCH 2/2] Regenerated docs --- .../org/jetbrains/kotlinx/dataframe/api/rename.kt | 11 +++++++++++ .../org/jetbrains/kotlinx/dataframe/api/rename.kt | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt index c5015c71ec..2b8c88cb2c 100644 --- a/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt +++ b/core/generated-sources/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt @@ -43,15 +43,26 @@ public fun DataFrame.rename(cols: Iterable>): Renam public data class RenameClause(val df: DataFrame, val columns: ColumnsSelector) public fun DataFrame.renameToCamelCase(): DataFrame { + // recursively rename all column groups to camel case return rename { dfs { it.isColumnGroup() && it.name() matches DELIMITED_STRING_REGEX } }.toCamelCase() + // recursively rename all other columns to camel case .rename { dfs { !it.isColumnGroup() && it.name() matches DELIMITED_STRING_REGEX } }.toCamelCase() + + // take all frame columns recursively and call renameToCamelCase() on all dataframes inside .update { dfsOf() }.with { it.renameToCamelCase() } + + // convert all first chars of all columns to the lowercase + .rename { + allDfs() + }.into { + it.name.replaceFirstChar { it.lowercaseChar() } + } } public fun RenameClause.into(vararg newColumns: ColumnReference<*>): DataFrame = diff --git a/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt b/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt index 46890a1e25..c06df4459f 100644 --- a/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt +++ b/core/generated-sources/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/rename.kt @@ -55,4 +55,11 @@ class RenameTests { } } } + + @Test + fun `rename to camelCase`() { + val dfWithUpperCaseColumnNames = dataFrameOf("First_Column", "second_column", "ThirdColumn")(1, 2, 3) + val df = dfWithUpperCaseColumnNames.renameToCamelCase() + df.columnNames() shouldBe listOf("firstColumn", "secondColumn", "thirdColumn") + } }