summaryrefslogtreecommitdiff
path: root/pkg/server/env/env.go
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-02-27 01:51:55 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-02-27 02:11:12 +0300
commit27e13f14f4dba71b417ea530bfe035adbd8f0a93 (patch)
tree0ed374c02a7f1b5516a8e6e9ab1d37b42860e299 /pkg/server/env/env.go
parent085bdfb75eb1c4b90a25a792815f8b80ed06dccb (diff)
add config file support
Diffstat (limited to 'pkg/server/env/env.go')
-rw-r--r--pkg/server/env/env.go22
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 ""