diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-27 01:51:55 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-02-27 02:11:12 +0300 |
| commit | 27e13f14f4dba71b417ea530bfe035adbd8f0a93 (patch) | |
| tree | 0ed374c02a7f1b5516a8e6e9ab1d37b42860e299 /pkg/server/env/env.go | |
| parent | 085bdfb75eb1c4b90a25a792815f8b80ed06dccb (diff) | |
add config file support
Diffstat (limited to 'pkg/server/env/env.go')
| -rw-r--r-- | pkg/server/env/env.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go index fe8af25..237c0c5 100644 --- a/pkg/server/env/env.go +++ b/pkg/server/env/env.go @@ -3,6 +3,7 @@ package env import ( "errors" "regexp" + "sort" "sync" ) @@ -18,7 +19,7 @@ type Env struct { const namePattern = "[a-zA-Z][a-zA-Z0-9.]*" var isNamePattern = regexp.MustCompile("^" + namePattern + "$").MatchString -var namePatternRe = regexp.MustCompile("@" + namePattern) +var namePatternRe = regexp.MustCompile("@(" + namePattern + "|{" + namePattern + "})") var errBadVariable = errors.New("bad variable name") @@ -93,11 +94,19 @@ func (e *env) Del(key string) bool { } func (e *env) Each(f func(string, string) bool) { + var keys []string + e.Lock() defer e.Unlock() - for k, v := range e.m { - if !f(k, v) { + for k := range e.m { + keys = append(keys, k) + } + + sort.Strings(keys) + + for _, k := range keys { + if !f(k, e.m[k]) { break } } @@ -115,7 +124,12 @@ func (e *env) Eval(s string) string { defer e.Unlock() repl := func(v string) string { - if v, ok := e.m[v[1:]]; ok { + key := v[1:] + if key[0] == '{' { + key = key[1 : len(key)-1] + } + + if v, ok := e.m[key]; ok { return v } return "" |
