-
Notifications
You must be signed in to change notification settings - Fork 1
/
environment_loader.go
64 lines (50 loc) · 1.44 KB
/
environment_loader.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package bconf
import (
"fmt"
"os"
"strings"
)
func NewEnvironmentLoader() *EnvironmentLoader {
return NewEnvironmentLoaderWithKeyPrefix("")
}
func NewEnvironmentLoaderWithKeyPrefix(keyPrefix string) *EnvironmentLoader {
return &EnvironmentLoader{KeyPrefix: keyPrefix}
}
type EnvironmentLoader struct {
KeyPrefix string
}
func (l *EnvironmentLoader) Clone() *EnvironmentLoader {
newLoader := *l
return &newLoader
}
func (l *EnvironmentLoader) CloneLoader() Loader {
return l.Clone()
}
func (l *EnvironmentLoader) Name() string {
return "bconf_environment"
}
func (l *EnvironmentLoader) Get(fieldSetKey, fieldKey string) (string, bool) {
return os.LookupEnv(l.environmentKey(fmt.Sprintf("%s_%s", fieldSetKey, fieldKey)))
}
func (l *EnvironmentLoader) GetMap(fieldSetKey string, fieldKeys []string) map[string]string {
values := map[string]string{}
for _, fieldKey := range fieldKeys {
value, found := os.LookupEnv(l.environmentKey(fmt.Sprintf("%s_%s", fieldSetKey, fieldKey)))
if found {
values[fieldKey] = value
}
}
return values
}
func (l *EnvironmentLoader) HelpString(fieldSetKey, fieldKey string) string {
return fmt.Sprintf("Environment key: '%s'", l.environmentKey(fmt.Sprintf("%s_%s", fieldSetKey, fieldKey)))
}
func (l *EnvironmentLoader) environmentKey(key string) string {
envKey := ""
if l.KeyPrefix != "" {
envKey = fmt.Sprintf("%s_%s", l.KeyPrefix, key)
} else {
envKey = key
}
return strings.ToUpper(envKey)
}