From 0d3bc0b6acf3e6bd9c54c1ab92fbe0ac99d9490f Mon Sep 17 00:00:00 2001 From: Inhere Date: Sun, 12 Jun 2022 13:57:46 +0800 Subject: [PATCH] feat: add LoadFiles, LoadExistFiles direct load from a file --- dotenv/dotenv.go | 24 ++++++++++++++++++++++++ dotenv/dotenv_test.go | 26 ++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/dotenv/dotenv.go b/dotenv/dotenv.go index 3ed854a..9726f4f 100644 --- a/dotenv/dotenv.go +++ b/dotenv/dotenv.go @@ -33,6 +33,9 @@ func LoadedData() map[string]string { return loadedData } +// Reset clear the previously set ENV value +func Reset() { ClearLoaded() } + // ClearLoaded clear the previously set ENV value func ClearLoaded() { for key := range loadedData { @@ -77,6 +80,27 @@ func LoadExists(dir string, filenames ...string) error { return err } +// LoadFiles load ENV from given file +func LoadFiles(filePaths ...string) (err error) { + for _, filePath := range filePaths { + if err = loadFile(filePath); err != nil { + break + } + } + return +} + +// LoadExistFiles load ENV from given files, only load exists +func LoadExistFiles(filePaths ...string) error { + oldVal := OnlyLoadExists + defer func() { + OnlyLoadExists = oldVal + }() + + OnlyLoadExists = true + return LoadFiles(filePaths...) +} + // LoadFromMap load data from given string map func LoadFromMap(kv map[string]string) (err error) { for key, val := range kv { diff --git a/dotenv/dotenv_test.go b/dotenv/dotenv_test.go index 06f784e..50ff35f 100644 --- a/dotenv/dotenv_test.go +++ b/dotenv/dotenv_test.go @@ -10,6 +10,7 @@ import ( ) func TestLoad(t *testing.T) { + defer ClearLoaded() err := Load("./testdata", "not-exist", ".env") assert.Error(t, err) @@ -28,11 +29,22 @@ func TestLoad(t *testing.T) { assert.Error(t, err) assert.Equal(t, "def-val", Get("NOT-EXIST", "def-val")) +} - ClearLoaded() +func TestLoadFiles(t *testing.T) { + defer Reset() + assert.Error(t, LoadFiles("./testdata/not-exist")) + assert.Equal(t, "", os.Getenv("DONT_ENV_TEST")) + + err := LoadFiles("./testdata/.env") + + assert.NoError(t, err) + assert.Equal(t, "blog", os.Getenv("DONT_ENV_TEST")) + assert.Equal(t, "blog", Get("DONT_ENV_TEST")) } func TestLoadExists(t *testing.T) { + defer Reset() assert.Equal(t, "", os.Getenv("DONT_ENV_TEST")) err := LoadExists("./testdata", "not-exist", ".env") @@ -40,7 +52,17 @@ func TestLoadExists(t *testing.T) { assert.NoError(t, err) assert.Equal(t, "blog", os.Getenv("DONT_ENV_TEST")) assert.Equal(t, "blog", Get("DONT_ENV_TEST")) - ClearLoaded() +} + +func TestLoadExistFiles(t *testing.T) { + defer Reset() + assert.Equal(t, "", os.Getenv("DONT_ENV_TEST")) + + err := LoadExistFiles("./testdata/not-exist", "./testdata/.env") + + assert.NoError(t, err) + assert.Equal(t, "blog", os.Getenv("DONT_ENV_TEST")) + assert.Equal(t, "blog", Get("DONT_ENV_TEST")) } func TestLoadFromMap(t *testing.T) {