forked from coop-cloud-mirrors/godotenv
Get the basic tests green.
This commit is contained in:
parent
78ba83b776
commit
973cf53008
62
godotenv.go
62
godotenv.go
@ -1,5 +1,67 @@
|
||||
package godotenv
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Load(filenames ...string) (err error) {
|
||||
for _, filename := range filenames {
|
||||
err = loadFile(filename)
|
||||
if err != nil {
|
||||
return // return early on a spazout
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func loadFile(filename string) (err error) {
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
bufferSize := 20
|
||||
lines := make([]string, bufferSize)
|
||||
lineReader := bufio.NewReaderSize(file, bufferSize)
|
||||
for line, isPrefix, e := lineReader.ReadLine(); e == nil; line, isPrefix, e = lineReader.ReadLine() {
|
||||
fullLine := string(line)
|
||||
if isPrefix {
|
||||
for {
|
||||
line, isPrefix, _ = lineReader.ReadLine()
|
||||
fullLine += string(line)
|
||||
if !isPrefix {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
// add a line to the game/parse
|
||||
lines = append(lines, string(line))
|
||||
}
|
||||
|
||||
for _, fullLine := range lines {
|
||||
key, value, err := parseLine(fullLine)
|
||||
|
||||
if err == nil {
|
||||
os.Setenv(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func parseLine(line string) (key string, value string, err error) {
|
||||
if len(line) == 0 {
|
||||
err = errors.New("zero length string")
|
||||
return
|
||||
}
|
||||
|
||||
splitString := strings.Split(line, "=")
|
||||
|
||||
key = strings.Trim(splitString[0], " ")
|
||||
value = strings.Trim(splitString[1], " ")
|
||||
|
||||
return
|
||||
}
|
||||
|
@ -5,6 +5,13 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestLoadFileNotFound(t *testing.T) {
|
||||
err := Load("somefilethatwillneverexistever.env")
|
||||
if err == nil {
|
||||
t.Error("File wasn't found but Load didn't return an error")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadPlainEnv(t *testing.T) {
|
||||
envFileName := "fixtures/plain.env"
|
||||
err := Load(envFileName)
|
||||
|
Loading…
x
Reference in New Issue
Block a user