From 06ee56eedf4542e508a422e5c79fa3f590dafcfb Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Sun, 23 Oct 2022 17:27:23 +0200 Subject: [PATCH] fix the prefix of the env function now works --- env.go | 7 +++++++ env_test.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/env.go b/env.go index 7271930..050a920 100644 --- a/env.go +++ b/env.go @@ -7,6 +7,7 @@ import ( "os" "reflect" "strconv" + "strings" ) func (s *Settings[C]) InitFromEnv(prefix string) *Settings[C] { @@ -21,12 +22,18 @@ func (s *Settings[C]) InitFromEnv(prefix string) *Settings[C] { } }() + if prefix != "" { + prefix = strings.ToUpper(prefix) + "_" + } + err := runOnTags(&s.config, []string{envTagKey}, func(k string, field reflect.Value) { if !field.CanSet() { return } + k = prefix + strings.ToUpper(k) + v, found := os.LookupEnv(k) if !found { return // env not found diff --git a/env_test.go b/env_test.go index 99ef4b4..d85d372 100644 --- a/env_test.go +++ b/env_test.go @@ -20,6 +20,7 @@ func TestReadmeExample2(t *testing.T) { // Set value os.Setenv("HOST", "www.example.com") + defer os.Unsetenv("HOST") s := New(config) //fmt.Println(s.Config().Host) // localhost @@ -31,6 +32,27 @@ func TestReadmeExample2(t *testing.T) { } +func TestWithPrefix(t *testing.T) { + config := struct { + Host string `env:"HOST"` + }{ + Host: "localhost", + } + + // Set value + os.Setenv("XYZ_HOST", "www.example.com") + defer os.Unsetenv("XYZ_HOST") + + s := New(config) + //fmt.Println(s.Config().Host) // localhost + assert.Equal(t, s.Config().Host, "localhost") + + s.InitFromEnv("XYZ") // no prefix + //fmt.Println(s.Config().Host) // www.example.com + assert.Equal(t, s.Config().Host, "www.example.com") + +} + func TestFromEnvNotSet(t *testing.T) { config := ConfigStruct6{ IA: 1234, @@ -43,6 +65,7 @@ func TestFromEnvNotSet(t *testing.T) { // Value not set s.InitFromEnv("VALUE_IB") + defer os.Unsetenv("VALUE_IB") if s.Config().IA != 1234 { t.Errorf("Expected 1234, got %d", s.Config().IA) @@ -61,7 +84,7 @@ func TestFromEnv(t *testing.T) { s := New(config) // Value not set - s.InitFromEnv("VALUE_IB") + s.InitFromEnv("NIX") if s.Config().IA != 1234 { t.Errorf("Expected 1234, got %d", s.Config().IA) @@ -69,7 +92,8 @@ func TestFromEnv(t *testing.T) { // Set value os.Setenv("VALUE_IB", "i-am-b") - s.InitFromEnv("VALUE_IB") + defer os.Unsetenv("VALUE_IB") + s.InitFromEnv("") if s.Config().IB != "i-am-b" { t.Errorf("Expected i-am-b, got %s", s.Config().IB) -- GitLab