From b2be864c5d3c6e50a4c0a1c88b6e721c7658aa54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Sun, 10 Nov 2024 00:40:45 +0100 Subject: [PATCH] add LoadEnvFile and Slugify functions to utils package --- utils/utils.go | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/utils/utils.go b/utils/utils.go index 69e1411..5f9b6ce 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,9 +1,16 @@ package utils import ( + "bufio" "fmt" + "golang.org/x/text/transform" + "golang.org/x/text/unicode/norm" "log/slog" + "os" + "regexp" + "strings" "time" + "unicode" ) func CorrectTimezone(timeStamp time.Time) time.Time { @@ -26,3 +33,55 @@ func GetBoolFromString(s string) bool { } return false } + +func LoadEnvFile(filename string) error { + file, err := os.Open(filename) + if err != nil { + return err + } + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if len(line) == 0 || strings.HasPrefix(line, "#") { + continue + } + parts := strings.SplitN(line, "=", 2) + if len(parts) != 2 { + continue + } + key := strings.TrimSpace(parts[0]) + value := strings.TrimSpace(parts[1]) + os.Setenv(key, value) + } + return scanner.Err() +} + +func Slugify(s string) string { + s = strings.ToLower(s) + + t := transform.Chain(norm.NFD, transform.RemoveFunc(isMn), norm.NFC) + s, _, _ = transform.String(t, s) + + s = strings.ReplaceAll(s, " ", "-") + + var b strings.Builder + for _, r := range s { + if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' { + b.WriteRune(r) + } + } + s = b.String() + + re := regexp.MustCompile(`-+`) + s = re.ReplaceAllString(s, "-") + + s = strings.Trim(s, "-") + + return s +} + +func isMn(r rune) bool { + return unicode.Is(unicode.Mn, r) +}