Skip to content

Commit 66d4940

Browse files
committed
Added ContextualCasing feature, under feature flag
1 parent 6248f3a commit 66d4940

File tree

2 files changed

+82
-25
lines changed

2 files changed

+82
-25
lines changed

settingo/settingo.go

+10-9
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,16 @@ package settingo
2424
// println("Output directory:", outputDir)
2525
// }
2626
var SETTINGS = Settings{
27-
msg: make(map[string]string),
28-
VarString: make(map[string]string),
29-
VarInt: make(map[string]int),
30-
VarMap: make(map[string]map[string][]string),
31-
VarSlice: make(map[string][]string),
32-
VarSliceSep: make(map[string]string),
33-
Parsers: make(map[string]func(string) string),
34-
ParsersInt: make(map[string]func(int) int),
35-
VarBool: make(map[string]bool),
27+
msg: make(map[string]string),
28+
VarString: make(map[string]string),
29+
VarInt: make(map[string]int),
30+
VarMap: make(map[string]map[string][]string),
31+
VarSlice: make(map[string][]string),
32+
VarSliceSep: make(map[string]string),
33+
Parsers: make(map[string]func(string) string),
34+
ParsersInt: make(map[string]func(int) int),
35+
VarBool: make(map[string]bool),
36+
ContextualCasing: true,
3637
}
3738

3839
// Get retrieves the current string value of a registered string setting from the global SETTINGS instance.

settingo/settings.go

+72-16
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@ func truthiness(s string) bool {
1818
}
1919

2020
type Settings struct {
21-
msg map[string]string
22-
VarString map[string]string
23-
VarInt map[string]int
24-
VarBool map[string]bool
25-
VarMap map[string]map[string][]string
26-
VarSlice map[string][]string
27-
VarSliceSep map[string]string
28-
Parsers map[string]func(string) string
29-
ParsersInt map[string]func(int) int
21+
msg map[string]string
22+
VarString map[string]string
23+
VarInt map[string]int
24+
VarBool map[string]bool
25+
VarMap map[string]map[string][]string
26+
VarSlice map[string][]string
27+
VarSliceSep map[string]string
28+
Parsers map[string]func(string) string
29+
ParsersInt map[string]func(int) int
30+
ContextualCasing bool
3031
}
3132

3233
func (s *Settings) Set(flagName, defaultVar, message string) {
34+
if s.ContextualCasing {
35+
flagName = strings.ToLower(flagName)
36+
}
3337
s.msg[flagName] = message
3438
s.VarString[flagName] = defaultVar
3539
}
@@ -39,16 +43,25 @@ func (s *Settings) SetString(flagName, defaultVar, message string) {
3943
}
4044

4145
func (s *Settings) SetInt(flagName string, defaultVar int, message string) {
46+
if s.ContextualCasing {
47+
flagName = strings.ToLower(flagName)
48+
}
4249
s.msg[flagName] = message
4350
s.VarInt[flagName] = defaultVar
4451
}
4552

4653
func (s *Settings) SetBool(flagName string, defaultVar bool, message string) {
54+
if s.ContextualCasing {
55+
flagName = strings.ToLower(flagName)
56+
}
4757
s.msg[flagName] = message
4858
s.VarBool[flagName] = defaultVar
4959
}
5060

5161
func (s *Settings) SetMap(flagName string, defaultVar map[string][]string, message string) {
62+
if s.ContextualCasing {
63+
flagName = strings.ToLower(flagName)
64+
}
5265
s.msg[flagName] = message
5366
s.VarMap[flagName] = defaultVar
5467
}
@@ -57,40 +70,64 @@ func (s *Settings) SetSlice(flagName string, defaultVar []string, message string
5770
if sep == "" {
5871
sep = ","
5972
}
73+
if s.ContextualCasing {
74+
flagName = strings.ToLower(flagName)
75+
}
6076
s.msg[flagName] = message
6177
s.VarSlice[flagName] = defaultVar
6278
s.VarSliceSep[flagName] = sep
6379
}
6480

6581
func (s *Settings) SetParsed(flagName, defaultVar, message string, parserFunc func(string) string) {
82+
if s.ContextualCasing {
83+
flagName = strings.ToLower(flagName)
84+
}
6685
s.msg[flagName] = message
6786
s.VarString[flagName] = defaultVar
6887
s.Parsers[flagName] = parserFunc
6988
}
7089

7190
func (s *Settings) SetParsedInt(flagName, defaultVar, message string, parserFunc func(int) int) {
91+
if s.ContextualCasing {
92+
flagName = strings.ToLower(flagName)
93+
}
7294
s.msg[flagName] = message
7395
s.VarString[flagName] = defaultVar
7496
s.ParsersInt[flagName] = parserFunc
7597
}
7698

7799
func (s Settings) Get(flagName string) string {
100+
if s.ContextualCasing {
101+
flagName = strings.ToLower(flagName)
102+
}
78103
return s.VarString[flagName]
79104
}
80105

81106
func (s Settings) GetInt(flagName string) int {
107+
if s.ContextualCasing {
108+
flagName = strings.ToLower(flagName)
109+
}
82110
return s.VarInt[flagName]
83111
}
84112

85113
func (s Settings) GetBool(flagName string) bool {
114+
if s.ContextualCasing {
115+
flagName = strings.ToLower(flagName)
116+
}
86117
return s.VarBool[flagName]
87118
}
88119

89120
func (s Settings) GetMap(flagName string) map[string][]string {
121+
if s.ContextualCasing {
122+
flagName = strings.ToLower(flagName)
123+
}
90124
return s.VarMap[flagName]
91125
}
92126

93127
func (s Settings) GetSlice(flagName string) []string {
128+
if s.ContextualCasing {
129+
flagName = strings.ToLower(flagName)
130+
}
94131
return s.VarSlice[flagName]
95132
}
96133

@@ -149,35 +186,54 @@ func (s *Settings) HandleCMDLineInput() {
149186
}
150187

151188
func (s *Settings) HandleOSInput() {
152-
153189
for key := range s.VarString {
154-
varEnv, found := os.LookupEnv(key)
190+
lookupKey := key
191+
if s.ContextualCasing {
192+
lookupKey = strings.ToUpper(key)
193+
}
194+
varEnv, found := os.LookupEnv(lookupKey)
155195
if found {
156196
s.VarString[key] = varEnv
157197
}
158198
}
159199
for key := range s.VarInt {
160-
varEnv, found := os.LookupEnv(key)
200+
lookupKey := key
201+
if s.ContextualCasing {
202+
lookupKey = strings.ToUpper(key)
203+
}
204+
varEnv, found := os.LookupEnv(lookupKey)
161205
if found {
162206
if num, err := strconv.Atoi(varEnv); err == nil {
163207
s.VarInt[key] = num
164208
}
165209
}
166210
}
167211
for key := range s.VarBool {
168-
varEnv, found := os.LookupEnv(key)
212+
lookupKey := key
213+
if s.ContextualCasing {
214+
lookupKey = strings.ToUpper(key)
215+
}
216+
varEnv, found := os.LookupEnv(lookupKey)
169217
if found {
170218
s.VarBool[key] = truthiness(varEnv)
171219
}
172220
}
173221
for key := range s.VarMap {
174-
varEnv, found := os.LookupEnv(key)
222+
lookupKey := key
223+
if s.ContextualCasing {
224+
lookupKey = strings.ToUpper(key)
225+
}
226+
varEnv, found := os.LookupEnv(lookupKey)
175227
if found {
176228
s.VarMap[key] = ParseLineToMap(varEnv)
177229
}
178230
}
179231
for key := range s.VarSlice {
180-
varEnv, found := os.LookupEnv(key)
232+
lookupKey := key
233+
if s.ContextualCasing {
234+
lookupKey = strings.ToUpper(key)
235+
}
236+
varEnv, found := os.LookupEnv(lookupKey)
181237
if found {
182238
s.VarSlice[key] = strings.Split(varEnv, s.VarSliceSep[key])
183239
}
@@ -222,7 +278,7 @@ func (s *Settings) LoadStruct(cfg interface{}) {
222278
for i := 0; i < value.Len(); i++ {
223279
slice[i] = value.Index(i).String()
224280
}
225-
s.SetSlice(name, slice, help, s.VarSliceSep[name])
281+
s.SetSlice(name, slice, help, s.VarSliceSep[strings.ToLower(name)])
226282
}
227283
case reflect.Map:
228284
if value.Type().Key().Kind() == reflect.String &&

0 commit comments

Comments
 (0)