diff --git a/README.md b/README.md index ed16c7aa..622a1460 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,13 @@ Supported helpers for strings: - [Substring](#substring) - [ChunkString](#chunkstring) - [RuneLength](#runelength) +- [PascalCase](#pascalcase) +- [CamelCase](#camelcase) +- [KebabCase](#kebabcase) +- [SnakeCase](#snakecase) +- [Words](#words) +- [Capitalize](#capitalize) +- [Elipse](#elipse) Supported helpers for tuples: @@ -1395,11 +1402,24 @@ str := lo.Words("helloWorld") Converts the first character of string to upper case and the remaining to lower case. ```go -str := lo.PascalCase("heLLO") +str := lo.Capitalize("heLLO") // Hello ``` -[[play](https://go.dev/play/p/jBIJ_OFtFYp)] +### Elipse + +Truncates a string to a specified length and appends an ellipsis if truncated. + +```go +str := lo.Elipse("Lorem Ipsum", 5) +// Lo... + +str := lo.Elipse("Lorem Ipsum", 100) +// Lorem Ipsum + +str := lo.Elipse("Lorem Ipsum", 3) +// ... +``` ### T2 -> T9 diff --git a/string.go b/string.go index ea49ee80..02a2cbd1 100644 --- a/string.go +++ b/string.go @@ -1,13 +1,14 @@ package lo import ( - "golang.org/x/text/cases" - "golang.org/x/text/language" "math/rand" "regexp" "strings" "unicode" "unicode/utf8" + + "golang.org/x/text/cases" + "golang.org/x/text/language" ) var ( @@ -162,3 +163,15 @@ func Words(str string) []string { func Capitalize(str string) string { return cases.Title(language.English).String(str) } + +// Elipse truncates a string to a specified length and appends an ellipsis if truncated. +func Elipse(str string, length int) string { + if len(str) > length { + if len(str) < 3 || length < 3 { + return "..." + } + return str[0:length-3] + "..." + } + + return str +} diff --git a/string_test.go b/string_test.go index 97034320..e3d6eabf 100644 --- a/string_test.go +++ b/string_test.go @@ -483,3 +483,16 @@ func TestCapitalize(t *testing.T) { }) } } + +func TestElipse(t *testing.T) { + t.Parallel() + is := assert.New(t) + + is.Equal("12345", Elipse("12345", 5)) + is.Equal("1...", Elipse("12345", 4)) + is.Equal("12345", Elipse("12345", 6)) + is.Equal("12345", Elipse("12345", 10)) + is.Equal("...", Elipse("12345", 3)) + is.Equal("...", Elipse("12345", 2)) + is.Equal("...", Elipse("12345", -1)) +}