Add CAMELCASE_TO_HYPHEN in RelaxedNames

Fixes gh-1499
pull/1840/head
David Liu 10 years ago committed by Phillip Webb
parent c906524df6
commit b948e61465

@ -19,6 +19,8 @@ package org.springframework.boot.bind;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.util.StringUtils;
@ -32,6 +34,8 @@ import org.springframework.util.StringUtils;
*/
public final class RelaxedNames implements Iterable<String> {
private static final Pattern CAMEL_CASE_PATTERN = Pattern.compile("([^A-Z-])([A-Z])");
private final String name;
private final Set<String> values = new LinkedHashSet<String>();
@ -126,17 +130,28 @@ public final class RelaxedNames implements Iterable<String> {
CAMELCASE_TO_UNDERSCORE {
@Override
public String apply(String value) {
value = value.replaceAll("([^A-Z-])([A-Z])", "$1_$2");
StringBuilder builder = new StringBuilder();
for (String field : value.split("_")) {
if (builder.length() == 0) {
builder.append(field);
}
else {
builder.append("_").append(StringUtils.uncapitalize(field));
}
Matcher matcher = CAMEL_CASE_PATTERN.matcher(value);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(result, matcher.group(1) + '_'
+ StringUtils.uncapitalize(matcher.group(2)));
}
return builder.toString();
matcher.appendTail(result);
return result.toString();
}
},
CAMELCASE_TO_HYPHEN {
@Override
public String apply(String value) {
Matcher matcher = CAMEL_CASE_PATTERN.matcher(value);
StringBuffer result = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(result, matcher.group(1) + '-'
+ StringUtils.uncapitalize(matcher.group(2)));
}
matcher.appendTail(result);
return result.toString();
}
},

@ -72,9 +72,24 @@ public class RelaxedNamesTests {
Iterator<String> iterator = new RelaxedNames("caMel").iterator();
assertThat(iterator.next(), equalTo("caMel"));
assertThat(iterator.next(), equalTo("ca_mel"));
assertThat(iterator.next(), equalTo("ca-mel"));
assertThat(iterator.next(), equalTo("camel"));
assertThat(iterator.next(), equalTo("CAMEL"));
assertThat(iterator.next(), equalTo("CA_MEL"));
assertThat(iterator.next(), equalTo("CA-MEL"));
assertThat(iterator.hasNext(), equalTo(false));
}
@Test
public void fromCompoundCamelCase() throws Exception {
Iterator<String> iterator = new RelaxedNames("caMelCase").iterator();
assertThat(iterator.next(), equalTo("caMelCase"));
assertThat(iterator.next(), equalTo("ca_mel_case"));
assertThat(iterator.next(), equalTo("ca-mel-case"));
assertThat(iterator.next(), equalTo("camelcase"));
assertThat(iterator.next(), equalTo("CAMELCASE"));
assertThat(iterator.next(), equalTo("CA_MEL_CASE"));
assertThat(iterator.next(), equalTo("CA-MEL-CASE"));
assertThat(iterator.hasNext(), equalTo(false));
}

Loading…
Cancel
Save