Skip to content

Commit f659a80

Browse files
committed
Add support for the methods upperFirst and lowerFirst in string and lodash plugins.
1 parent 2f15f01 commit f659a80

File tree

4 files changed

+132
-12
lines changed
  • lodash-plugin/src
  • string-plugin/src

4 files changed

+132
-12
lines changed

lodash-plugin/src/main/java/com/github/underscore/lodash/$.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,14 @@ public Chain<String> camelCase() {
422422
return new Chain<String>($.camelCase((String) item()));
423423
}
424424

425+
public Chain<String> lowerFirst() {
426+
return new Chain<String>($.lowerFirst((String) item()));
427+
}
428+
429+
public Chain<String> upperFirst() {
430+
return new Chain<String>($.upperFirst((String) item()));
431+
}
432+
425433
public Chain<String> capitalize() {
426434
return new Chain<String>($.capitalize((String) item()));
427435
}
@@ -910,16 +918,20 @@ public String apply(final String result, final String word, final Integer index)
910918
}).apply(string);
911919
}
912920

921+
public static String lowerFirst(final String string) {
922+
return createCaseFirst("toLowerCase").apply(string);
923+
}
924+
925+
public static String upperFirst(final String string) {
926+
return createCaseFirst("toUpperCase").apply(string);
927+
}
928+
913929
public static String capitalize(final String string) {
914-
final String localString = baseToString(string);
915-
return localString.isEmpty() ? "" : localString.substring(0, 1).toUpperCase(Locale.getDefault())
916-
+ (localString.length() > 1 ? localString.substring(1) : "");
930+
return upperFirst(baseToString(string).toLowerCase());
917931
}
918932

919933
public static String uncapitalize(final String string) {
920-
final String localString = baseToString(string);
921-
return localString.isEmpty() ? "" : localString.substring(0, 1).toLowerCase(Locale.getDefault())
922-
+ (localString.length() > 1 ? localString.substring(1) : "");
934+
return lowerFirst(baseToString(string).toLowerCase());
923935
}
924936

925937
private static String baseToString(String value) {
@@ -966,6 +978,17 @@ public String apply(final String string) {
966978
};
967979
}
968980

981+
private static Function1<String, String> createCaseFirst(final String methodName) {
982+
return new Function1<String, String>() {
983+
public String apply(final String string) {
984+
final String localString = baseToString(string);
985+
final String chr = localString.isEmpty() ? "" : localString.substring(0, 1);
986+
final String trailing = localString.length() > 1 ? localString.substring(1) : "";
987+
return $.invoke(Arrays.asList(chr), methodName).get(0) + trailing;
988+
}
989+
};
990+
}
991+
969992
public static boolean endsWith(final String string, final String target) {
970993
return endsWith(string, target, null);
971994
}
@@ -1967,6 +1990,14 @@ public String camelCase() {
19671990
return camelCase(getString().get());
19681991
}
19691992

1993+
public String lowerFirst() {
1994+
return lowerFirst(getString().get());
1995+
}
1996+
1997+
public String upperFirst() {
1998+
return upperFirst(getString().get());
1999+
}
2000+
19702001
public String capitalize() {
19712002
return capitalize(getString().get());
19722003
}

lodash-plugin/src/test/java/com/github/underscore/lodash/StringTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,34 @@ public void camelCase() {
6565
assertEquals("a", $.camelCase("\u00c0"));
6666
}
6767

68+
/*
69+
_.lowerFirst('Fred');
70+
// => 'fred'
71+
_.lowerFirst('FRED');
72+
// => 'fRED'
73+
*/
74+
@Test
75+
public void lowerFirst() {
76+
assertEquals("fred", $.lowerFirst("Fred"));
77+
assertEquals("fred", new $("Fred").lowerFirst());
78+
assertEquals("fred", $.chain("Fred").lowerFirst().item());
79+
assertEquals("fRED", $.lowerFirst("FRED"));
80+
}
81+
82+
/*
83+
_.upperFirst('fred');
84+
// => 'Fred'
85+
_.upperFirst('FRED');
86+
// => 'FRED'
87+
*/
88+
@Test
89+
public void upperFirst() {
90+
assertEquals("Fred", $.upperFirst("fred"));
91+
assertEquals("Fred", new $("fred").upperFirst());
92+
assertEquals("Fred", $.chain("fred").upperFirst().item());
93+
assertEquals("FRED", $.upperFirst("FRED"));
94+
}
95+
6896
/*
6997
_.capitalize('fred');
7098
=> 'Fred'

string-plugin/src/main/java/com/github/underscore/string/$.java

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,14 @@ public Chain<String> camelCase() {
322322
return new Chain<String>($.camelCase((String) item()));
323323
}
324324

325+
public Chain<String> lowerFirst() {
326+
return new Chain<String>($.lowerFirst((String) item()));
327+
}
328+
329+
public Chain<String> upperFirst() {
330+
return new Chain<String>($.upperFirst((String) item()));
331+
}
332+
325333
public Chain<String> capitalize() {
326334
return new Chain<String>($.capitalize((String) item()));
327335
}
@@ -467,16 +475,20 @@ public String apply(final String result, final String word, final Integer index)
467475
}).apply(string);
468476
}
469477

478+
public static String lowerFirst(final String string) {
479+
return createCaseFirst("toLowerCase").apply(string);
480+
}
481+
482+
public static String upperFirst(final String string) {
483+
return createCaseFirst("toUpperCase").apply(string);
484+
}
485+
470486
public static String capitalize(final String string) {
471-
final String localString = baseToString(string);
472-
return localString.isEmpty() ? "" : localString.substring(0, 1).toUpperCase(Locale.getDefault())
473-
+ (localString.length() > 1 ? localString.substring(1) : "");
487+
return upperFirst(baseToString(string).toLowerCase());
474488
}
475489

476490
public static String uncapitalize(final String string) {
477-
final String localString = baseToString(string);
478-
return localString.isEmpty() ? "" : localString.substring(0, 1).toLowerCase(Locale.getDefault())
479-
+ (localString.length() > 1 ? localString.substring(1) : "");
491+
return lowerFirst(baseToString(string).toLowerCase());
480492
}
481493

482494
private static String baseToString(String value) {
@@ -523,6 +535,17 @@ public String apply(final String string) {
523535
};
524536
}
525537

538+
private static Function1<String, String> createCaseFirst(final String methodName) {
539+
return new Function1<String, String>() {
540+
public String apply(final String string) {
541+
final String localString = baseToString(string);
542+
final String chr = localString.isEmpty() ? "" : localString.substring(0, 1);
543+
final String trailing = localString.length() > 1 ? localString.substring(1) : "";
544+
return $.invoke(Arrays.asList(chr), methodName).get(0) + trailing;
545+
}
546+
};
547+
}
548+
526549
public static boolean endsWith(final String string, final String target) {
527550
return endsWith(string, target, null);
528551
}
@@ -1524,6 +1547,14 @@ public String camelCase() {
15241547
return camelCase(getString().get());
15251548
}
15261549

1550+
public String lowerFirst() {
1551+
return lowerFirst(getString().get());
1552+
}
1553+
1554+
public String upperFirst() {
1555+
return upperFirst(getString().get());
1556+
}
1557+
15271558
public String capitalize() {
15281559
return capitalize(getString().get());
15291560
}

string-plugin/src/test/java/com/github/underscore/string/StringTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,36 @@ public void camelCase() {
6565
assertEquals("a", $.camelCase("\u00c0"));
6666
}
6767

68+
/*
69+
_.lowerFirst('Fred');
70+
// => 'fred'
71+
72+
_.lowerFirst('FRED');
73+
// => 'fRED'
74+
*/
75+
@Test
76+
public void lowerFirst() {
77+
assertEquals("fred", $.lowerFirst("Fred"));
78+
assertEquals("fred", new $("Fred").lowerFirst());
79+
assertEquals("fred", $.chain("Fred").lowerFirst().item());
80+
assertEquals("fRED", $.lowerFirst("FRED"));
81+
}
82+
83+
/*
84+
_.upperFirst('fred');
85+
// => 'Fred'
86+
87+
_.upperFirst('FRED');
88+
// => 'FRED'
89+
*/
90+
@Test
91+
public void upperFirst() {
92+
assertEquals("Fred", $.upperFirst("fred"));
93+
assertEquals("Fred", new $("fred").upperFirst());
94+
assertEquals("Fred", $.chain("fred").upperFirst().item());
95+
assertEquals("FRED", $.upperFirst("FRED"));
96+
}
97+
6898
/*
6999
_.capitalize('fred');
70100
=> 'Fred'

0 commit comments

Comments
 (0)