From 26dfd4d6b5a2255f9147e6ace77ad707896152ec Mon Sep 17 00:00:00 2001 From: Pierce Thompson <52843537+Insprill@users.noreply.github.com> Date: Thu, 4 Aug 2022 08:35:42 -0400 Subject: [PATCH] Add kebab-case name formatters (#16) --- .../de/exlll/configlib/NameFormatters.java | 46 +++++++++++++++++++ .../exlll/configlib/NameFormattersTest.java | 22 +++++++++ 2 files changed, 68 insertions(+) diff --git a/configlib-core/src/main/java/de/exlll/configlib/NameFormatters.java b/configlib-core/src/main/java/de/exlll/configlib/NameFormatters.java index 67000b9..0434397 100644 --- a/configlib-core/src/main/java/de/exlll/configlib/NameFormatters.java +++ b/configlib-core/src/main/java/de/exlll/configlib/NameFormatters.java @@ -51,5 +51,51 @@ public enum NameFormatters implements NameFormatter { } return builder.toString(); } + }, + /** + * A {@code NameFormatter} that transforms camelCase to + * lower-kebab-case. + *

+ * For example, myPrivateField becomes my-private-field. + */ + LOWER_KEBAB_CASE { + @Override + public String format(String name) { + StringBuilder builder = new StringBuilder(name.length()); + for (int i = 0; i < name.length(); i++) { + char c = name.charAt(i); + if (Character.isUpperCase(c)) { + builder.append('-'); + builder.append(Character.toLowerCase(c)); + } else { + builder.append(c); + } + } + return builder.toString(); + } + }, + /** + * A {@code NameFormatter} that transforms camelCase to + * UPPER-KEBAB-CASE. + *

+ * For example, myPrivateField becomes MY-PRIVATE-FIELD. + */ + UPPER_KEBAB_CASE { + @Override + public String format(String name) { + StringBuilder builder = new StringBuilder(name.length()); + for (int i = 0; i < name.length(); i++) { + char c = name.charAt(i); + if (Character.isLowerCase(c)) { + builder.append(Character.toUpperCase(c)); + } else if (Character.isUpperCase(c)) { + builder.append('-'); + builder.append(c); + } else { + builder.append(c); + } + } + return builder.toString(); + } } } diff --git a/configlib-core/src/test/java/de/exlll/configlib/NameFormattersTest.java b/configlib-core/src/test/java/de/exlll/configlib/NameFormattersTest.java index 83ac328..49455ce 100644 --- a/configlib-core/src/test/java/de/exlll/configlib/NameFormattersTest.java +++ b/configlib-core/src/test/java/de/exlll/configlib/NameFormattersTest.java @@ -44,4 +44,26 @@ class NameFormattersTest { assertThat(formatter.format(NAME_4), is("WITH123_NUMBER")); assertThat(formatter.format(NAME_5), is("WITH_$")); } + + @Test + void formatLowerKebab() { + NameFormatters formatter = NameFormatters.LOWER_KEBAB_CASE; + + assertThat(formatter.format(NAME_1), is("lowercase")); + assertThat(formatter.format(NAME_2), is("camel-case")); + assertThat(formatter.format(NAME_3), is("with-number123")); + assertThat(formatter.format(NAME_4), is("with123-number")); + assertThat(formatter.format(NAME_5), is("with_$")); + } + + @Test + void formatUpperKebab() { + NameFormatters formatter = NameFormatters.UPPER_KEBAB_CASE; + + assertThat(formatter.format(NAME_1), is("LOWERCASE")); + assertThat(formatter.format(NAME_2), is("CAMEL-CASE")); + assertThat(formatter.format(NAME_3), is("WITH-NUMBER123")); + assertThat(formatter.format(NAME_4), is("WITH123-NUMBER")); + assertThat(formatter.format(NAME_5), is("WITH_$")); + } } \ No newline at end of file