From efa525be49b6746f9f4f67903130aab6689555b6 Mon Sep 17 00:00:00 2001 From: Nicolas Carlier Date: Tue, 4 Feb 2020 21:27:07 +0000 Subject: [PATCH] chore(): strcase usage generalization --- pkg/model/work_request.go | 4 ++-- pkg/strcase/snake.go | 2 +- pkg/strcase/test/snake_test.go | 25 +++++++++++++++++++++++++ pkg/tools/http.go | 23 ++++------------------- pkg/tools_test/http_test.go | 17 ----------------- pkg/worker/work_log.go | 4 ++-- 6 files changed, 34 insertions(+), 41 deletions(-) create mode 100644 pkg/strcase/test/snake_test.go diff --git a/pkg/model/work_request.go b/pkg/model/work_request.go index 74cb798..1902471 100644 --- a/pkg/model/work_request.go +++ b/pkg/model/work_request.go @@ -12,7 +12,7 @@ import ( "time" "github.com/ncarlier/webhookd/pkg/logger" - "github.com/ncarlier/webhookd/pkg/tools" + "github.com/ncarlier/webhookd/pkg/strcase" ) var workID uint64 @@ -58,7 +58,7 @@ func NewWorkRequest(name, script, payload, output string, args []string, timeout MessageChan: make(chan []byte), Status: Idle, } - w.LogFilename = path.Join(output, fmt.Sprintf("%s_%d_%s.txt", tools.ToSnakeCase(w.Name), w.ID, time.Now().Format("20060102_1504"))) + w.LogFilename = path.Join(output, fmt.Sprintf("%s_%d_%s.txt", strcase.ToSnake(w.Name), w.ID, time.Now().Format("20060102_1504"))) return w } diff --git a/pkg/strcase/snake.go b/pkg/strcase/snake.go index 4243953..2ee6351 100644 --- a/pkg/strcase/snake.go +++ b/pkg/strcase/snake.go @@ -77,7 +77,7 @@ func ToScreamingDelimited(s string, del uint8, screaming bool) string { } else if v >= 'a' && v <= 'z' { n += string(v) + string(del) } - } else if v == ' ' || v == '_' || v == '-' { + } else if v == ' ' || v == '_' || v == '-' || v == '/' { // replace spaces/underscores with delimiters n += string(del) } else { diff --git a/pkg/strcase/test/snake_test.go b/pkg/strcase/test/snake_test.go new file mode 100644 index 0000000..a99a3fd --- /dev/null +++ b/pkg/strcase/test/snake_test.go @@ -0,0 +1,25 @@ +package test + +import ( + "testing" + + "github.com/ncarlier/webhookd/pkg/assert" + "github.com/ncarlier/webhookd/pkg/strcase" +) + +func TestToSnakeCase(t *testing.T) { + testCases := []struct { + value string + expected string + }{ + {"hello-world", "hello_world"}, + {"helloWorld", "hello_world"}, + {"HelloWorld", "hello_world"}, + {"Hello/_World", "hello__world"}, + {"Hello/world", "hello_world"}, + } + for _, tc := range testCases { + value := strcase.ToSnake(tc.value) + assert.Equal(t, tc.expected, value, "") + } +} diff --git a/pkg/tools/http.go b/pkg/tools/http.go index 50f511d..e790d82 100644 --- a/pkg/tools/http.go +++ b/pkg/tools/http.go @@ -5,25 +5,10 @@ import ( "net/http" "net/url" "strings" - "unicode" + + "github.com/ncarlier/webhookd/pkg/strcase" ) -// ToSnakeCase convert string to snakecase. -func ToSnakeCase(in string) string { - runes := []rune(in) - length := len(runes) - - var out []rune - for i := 0; i < length; i++ { - if i > 0 && unicode.IsUpper(runes[i]) && ((i+1 < length && unicode.IsLower(runes[i+1])) || unicode.IsLower(runes[i-1])) { - out = append(out, '_') - } - out = append(out, unicode.ToLower(runes[i])) - } - result := strings.Replace(string(out), "/", "_", -1) - return strings.Replace(result, "-", "", -1) -} - // QueryParamsToShellVars convert URL query parameters to shell vars. func QueryParamsToShellVars(q url.Values) []string { var params []string @@ -33,7 +18,7 @@ func QueryParamsToShellVars(q url.Values) []string { if err != nil { continue } - buf.WriteString(ToSnakeCase(k)) + buf.WriteString(strcase.ToSnake(k)) buf.WriteString("=") buf.WriteString(value) params = append(params, buf.String()) @@ -50,7 +35,7 @@ func HTTPHeadersToShellVars(h http.Header) []string { if err != nil { continue } - buf.WriteString(ToSnakeCase(k)) + buf.WriteString(strcase.ToSnake(k)) buf.WriteString("=") buf.WriteString(value) params = append(params, buf.String()) diff --git a/pkg/tools_test/http_test.go b/pkg/tools_test/http_test.go index 7103fe5..b8171bf 100644 --- a/pkg/tools_test/http_test.go +++ b/pkg/tools_test/http_test.go @@ -9,23 +9,6 @@ import ( "github.com/ncarlier/webhookd/pkg/tools" ) -func TestToSnakeCase(t *testing.T) { - testCases := []struct { - value string - expected string - }{ - {"hello-world", "helloworld"}, - {"helloWorld", "hello_world"}, - {"HelloWorld", "hello_world"}, - {"Hello/World", "hello__world"}, - {"Hello/world", "hello_world"}, - } - for _, tc := range testCases { - value := tools.ToSnakeCase(tc.value) - assert.Equal(t, tc.expected, value, "") - } -} - func TestQueryParamsToShellVars(t *testing.T) { tc := url.Values{ "string": []string{"foo"}, diff --git a/pkg/worker/work_log.go b/pkg/worker/work_log.go index a82dd02..6cb6370 100644 --- a/pkg/worker/work_log.go +++ b/pkg/worker/work_log.go @@ -6,12 +6,12 @@ import ( "path" "path/filepath" - "github.com/ncarlier/webhookd/pkg/tools" + "github.com/ncarlier/webhookd/pkg/strcase" ) // RetrieveLogFile retrieve work log with its name and id func RetrieveLogFile(id, name, base string) (*os.File, error) { - logPattern := path.Join(base, fmt.Sprintf("%s_%s_*.txt", tools.ToSnakeCase(name), id)) + logPattern := path.Join(base, fmt.Sprintf("%s_%s_*.txt", strcase.ToSnake(name), id)) files, err := filepath.Glob(logPattern) if err != nil { return nil, err