Commit 23b1a3f
Changed files (3)
pkg
env
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()
}