Commit 23b1a3f

mo khan <mo@mokhan.ca>
2022-09-24 02:27:54
feat: add helper to read entire env
1 parent 9e590c3
Changed files (3)
pkg/env/env.go
@@ -1,6 +1,9 @@
 package env
 
-import "os"
+import (
+	"os"
+	"strings"
+)
 
 func Fetch(key string, defaultValue string) string {
 	if x := os.Getenv(key); x != "" {
@@ -8,3 +11,12 @@ func Fetch(key string, defaultValue string) string {
 	}
 	return defaultValue
 }
+
+func Variables() Vars {
+	items := Vars{}
+	for _, line := range os.Environ() {
+		segments := strings.SplitN(line, "=", 2)
+		items[segments[0]] = segments[1]
+	}
+	return items
+}
pkg/env/env_test.go
@@ -20,4 +20,11 @@ func TestEnv(t *testing.T) {
 			})
 		})
 	})
+
+	t.Run("Variables", func(t *testing.T) {
+		for key, value := range Variables() {
+			assert.False(t, key == "", "key: '%v'", key)
+			assert.False(t, value == "", "key: '%v', value: '%v'", key, value)
+		}
+	})
 }
pkg/env/with.go
@@ -1,20 +1,27 @@
 package env
 
-import "os"
+import (
+	"os"
+)
 
 func With(env Vars, callback func()) {
 	original := Vars{}
 
 	for key, value := range env {
-		original[key] = os.Getenv(key)
+		if val, ok := os.LookupEnv(key); ok {
+			original[key] = val
+		}
 		os.Setenv(key, value)
 	}
 
-	defer func(o Vars) {
-		for key, value := range o {
+	defer func() {
+		for key, _ := range env {
+			os.Unsetenv(key)
+		}
+		for key, value := range original {
 			os.Setenv(key, value)
 		}
-	}(original)
+	}()
 
 	callback()
 }