Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

V2.0.0 pre release #13

Merged
merged 2 commits into from
Mar 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 10 additions & 9 deletions settingo/settingo.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,16 @@ package settingo
// println("Output directory:", outputDir)
// }
var SETTINGS = Settings{
msg: make(map[string]string),
VarString: make(map[string]string),
VarInt: make(map[string]int),
VarMap: make(map[string]map[string][]string),
VarSlice: make(map[string][]string),
VarSliceSep: make(map[string]string),
Parsers: make(map[string]func(string) string),
ParsersInt: make(map[string]func(int) int),
VarBool: make(map[string]bool),
msg: make(map[string]string),
VarString: make(map[string]string),
VarInt: make(map[string]int),
VarMap: make(map[string]map[string][]string),
VarSlice: make(map[string][]string),
VarSliceSep: make(map[string]string),
Parsers: make(map[string]func(string) string),
ParsersInt: make(map[string]func(int) int),
VarBool: make(map[string]bool),
ContextualCasing: true,
}

// Get retrieves the current string value of a registered string setting from the global SETTINGS instance.
Expand Down
88 changes: 72 additions & 16 deletions settingo/settings.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,22 @@ func truthiness(s string) bool {
}

type Settings struct {
msg map[string]string
VarString map[string]string
VarInt map[string]int
VarBool map[string]bool
VarMap map[string]map[string][]string
VarSlice map[string][]string
VarSliceSep map[string]string
Parsers map[string]func(string) string
ParsersInt map[string]func(int) int
msg map[string]string
VarString map[string]string
VarInt map[string]int
VarBool map[string]bool
VarMap map[string]map[string][]string
VarSlice map[string][]string
VarSliceSep map[string]string
Parsers map[string]func(string) string
ParsersInt map[string]func(int) int
ContextualCasing bool
}

func (s *Settings) Set(flagName, defaultVar, message string) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarString[flagName] = defaultVar
}
Expand All @@ -39,16 +43,25 @@ func (s *Settings) SetString(flagName, defaultVar, message string) {
}

func (s *Settings) SetInt(flagName string, defaultVar int, message string) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarInt[flagName] = defaultVar
}

func (s *Settings) SetBool(flagName string, defaultVar bool, message string) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarBool[flagName] = defaultVar
}

func (s *Settings) SetMap(flagName string, defaultVar map[string][]string, message string) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarMap[flagName] = defaultVar
}
Expand All @@ -57,40 +70,64 @@ func (s *Settings) SetSlice(flagName string, defaultVar []string, message string
if sep == "" {
sep = ","
}
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarSlice[flagName] = defaultVar
s.VarSliceSep[flagName] = sep
}

func (s *Settings) SetParsed(flagName, defaultVar, message string, parserFunc func(string) string) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarString[flagName] = defaultVar
s.Parsers[flagName] = parserFunc
}

func (s *Settings) SetParsedInt(flagName, defaultVar, message string, parserFunc func(int) int) {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
s.msg[flagName] = message
s.VarString[flagName] = defaultVar
s.ParsersInt[flagName] = parserFunc
}

func (s Settings) Get(flagName string) string {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
return s.VarString[flagName]
}

func (s Settings) GetInt(flagName string) int {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
return s.VarInt[flagName]
}

func (s Settings) GetBool(flagName string) bool {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
return s.VarBool[flagName]
}

func (s Settings) GetMap(flagName string) map[string][]string {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
return s.VarMap[flagName]
}

func (s Settings) GetSlice(flagName string) []string {
if s.ContextualCasing {
flagName = strings.ToLower(flagName)
}
return s.VarSlice[flagName]
}

Expand Down Expand Up @@ -149,35 +186,54 @@ func (s *Settings) HandleCMDLineInput() {
}

func (s *Settings) HandleOSInput() {

for key := range s.VarString {
varEnv, found := os.LookupEnv(key)
lookupKey := key
if s.ContextualCasing {
lookupKey = strings.ToUpper(key)
}
varEnv, found := os.LookupEnv(lookupKey)
if found {
s.VarString[key] = varEnv
}
}
for key := range s.VarInt {
varEnv, found := os.LookupEnv(key)
lookupKey := key
if s.ContextualCasing {
lookupKey = strings.ToUpper(key)
}
varEnv, found := os.LookupEnv(lookupKey)
if found {
if num, err := strconv.Atoi(varEnv); err == nil {
s.VarInt[key] = num
}
}
}
for key := range s.VarBool {
varEnv, found := os.LookupEnv(key)
lookupKey := key
if s.ContextualCasing {
lookupKey = strings.ToUpper(key)
}
varEnv, found := os.LookupEnv(lookupKey)
if found {
s.VarBool[key] = truthiness(varEnv)
}
}
for key := range s.VarMap {
varEnv, found := os.LookupEnv(key)
lookupKey := key
if s.ContextualCasing {
lookupKey = strings.ToUpper(key)
}
varEnv, found := os.LookupEnv(lookupKey)
if found {
s.VarMap[key] = ParseLineToMap(varEnv)
}
}
for key := range s.VarSlice {
varEnv, found := os.LookupEnv(key)
lookupKey := key
if s.ContextualCasing {
lookupKey = strings.ToUpper(key)
}
varEnv, found := os.LookupEnv(lookupKey)
if found {
s.VarSlice[key] = strings.Split(varEnv, s.VarSliceSep[key])
}
Expand Down Expand Up @@ -222,7 +278,7 @@ func (s *Settings) LoadStruct(cfg interface{}) {
for i := 0; i < value.Len(); i++ {
slice[i] = value.Index(i).String()
}
s.SetSlice(name, slice, help, s.VarSliceSep[name])
s.SetSlice(name, slice, help, s.VarSliceSep[strings.ToLower(name)])
}
case reflect.Map:
if value.Type().Key().Kind() == reflect.String &&
Expand Down
Loading