Skip to content

Commit 07e1132

Browse files
committed
Add Load function to the facade
Signed-off-by: Ulysses Souza <[email protected]>
1 parent b26bfe6 commit 07e1132

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

envlang.go

+26
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package envlang
22

33
import (
44
"io"
5+
"os"
56

67
"github.com/antlr4-go/antlr/v4"
78
"github.com/ulyssessouza/envlang/dao"
89
"github.com/ulyssessouza/envlang/gen/fileparser"
910
"github.com/ulyssessouza/envlang/handlers"
1011
)
1112

13+
const defaultEnvFile = ".env"
14+
1215
func GetVariablesFromInputStream(d dao.EnvLangDao, r io.Reader) map[string]*string {
1316
return getVariablesFromInputStream(d, antlr.NewIoStream(r))
1417
}
@@ -17,6 +20,29 @@ func GetVariables(d dao.EnvLangDao, s string) map[string]*string {
1720
return getVariablesFromInputStream(d, antlr.NewInputStream(s))
1821
}
1922

23+
func Load(paths ...string) error {
24+
if len(paths) == 0 {
25+
paths = []string{defaultEnvFile}
26+
}
27+
28+
for _, p := range paths {
29+
f, err := os.Open(p)
30+
if err != nil {
31+
return err
32+
}
33+
m := GetVariablesFromInputStream(dao.NewDefaultDaoFromEnv(os.Environ()), f)
34+
for k, v := range m {
35+
if v == nil {
36+
str := ""
37+
v = &str
38+
}
39+
os.Setenv(k, *v)
40+
}
41+
}
42+
43+
return nil
44+
}
45+
2046
func getVariablesFromInputStream(d dao.EnvLangDao, ais *antlr.InputStream) map[string]*string {
2147
lexer := fileparser.NewEnvLangFileLexer(ais)
2248
stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)

envlang_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package envlang
22

33
import (
4+
"os"
45
"strings"
56
"testing"
67

@@ -22,6 +23,15 @@ func TestGetFromReader(t *testing.T) {
2223
assert.DeepEqual(t, expected, GetVariablesFromInputStream(d, strings.NewReader(`A=aaa`)))
2324
}
2425

26+
func TestLoad(t *testing.T) {
27+
const envlangOsLoadVariable = "ENVLANG_TEST_OSLOAD_VARIABLE"
28+
err := Load("./fixtures/load.env")
29+
assert.NilError(t, err)
30+
osLoaded, ok := os.LookupEnv(envlangOsLoadVariable)
31+
assert.Assert(t, ok)
32+
assert.Equal(t, osLoaded, "ENVLANG_TEST_OSLOAD_VALUE")
33+
}
34+
2535
//nolint:funlen
2636
func TestGetValue(t *testing.T) {
2737
tests := []struct {

fixtures/load.env

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ENVLANG_TEST_OSLOAD_VARIABLE=ENVLANG_TEST_OSLOAD_VALUE

0 commit comments

Comments
 (0)