refactor(api)!: remove Delete method from public API

Environment variables are unaffected by Delete, making it misleading —
callers would expect a key to be fully gone but env vars would still
resolve. Sub is the better abstraction for scoped config.
This commit is contained in:
2026-03-09 19:35:59 +00:00
parent ff8a3444f1
commit a81a2027ae
3 changed files with 0 additions and 92 deletions

View File

@@ -88,10 +88,6 @@ func SetString(key string, value string) {
defaultConfigManager.SetString(key, value)
}
func Delete(key string) {
defaultConfigManager.Delete(key)
}
func Sub(key string) *ConfigManager {
return defaultConfigManager.Sub(key)
}

View File

@@ -1555,81 +1555,6 @@ func TestPackageLevelGetInt64(t *testing.T) {
}
}
func TestDelete(t *testing.T) {
cm := NewConfigManager()
cm.SetDefault("keep", "yes")
cm.SetDefault("remove", "default")
cm.Set("remove", "override")
if !cm.IsSet("remove") {
t.Fatal("remove should be set before delete")
}
cm.Delete("remove")
if cm.IsSet("remove") {
t.Error("remove should not be set after delete")
}
if cm.Get("remove") != nil {
t.Error("Get(remove) should return nil after delete")
}
if cm.GetString("keep") != "yes" {
t.Error("keep should be unaffected by deleting remove")
}
}
func TestDeleteFromAllLayers(t *testing.T) {
dir := t.TempDir()
configFile := filepath.Join(dir, "config.toml")
if err := os.WriteFile(configFile, []byte(`filekey = "fromfile"`), 0o644); err != nil {
t.Fatal(err)
}
cm := NewConfigManager()
cm.SetConfigFile(configFile)
if err := cm.SetConfigType("toml"); err != nil {
t.Fatal(err)
}
cm.SetDefault("filekey", "default")
if err := cm.ReadInConfig(); err != nil {
t.Fatal(err)
}
cm.Set("filekey", "override")
if cm.GetString("filekey") != "override" {
t.Fatal("expected override value before delete")
}
cm.Delete("filekey")
if cm.IsSet("filekey") {
t.Error("filekey should not be set after delete from all layers")
}
}
func TestDeleteCaseInsensitive(t *testing.T) {
cm := NewConfigManager()
cm.Set("MyKey", "value")
cm.Delete("MYKEY")
if cm.IsSet("mykey") {
t.Error("delete should be case-insensitive")
}
}
func TestPackageLevelDelete(t *testing.T) {
defaultConfigManager = NewConfigManager()
Set("temp", "value")
if !IsSet("temp") {
t.Fatal("temp should be set")
}
Delete("temp")
if IsSet("temp") {
t.Error("temp should not be set after package-level Delete")
}
}
func TestSub(t *testing.T) {
dir := t.TempDir()
configFile := filepath.Join(dir, "config.toml")

View File

@@ -28,19 +28,6 @@ func (c *ConfigManager) Set(key string, value any) {
c.combinedConfig[lower] = ConfigMap{Key: key, Value: value}
}
// Delete removes a key from all configuration layers (overrides, file,
// defaults) and rebuilds the combined configuration. Environment variables
// are not affected since they are loaded from the process environment.
func (c *ConfigManager) Delete(key string) {
c.mutex.Lock()
lower := strings.ToLower(key)
delete(c.overrideConfig, lower)
delete(c.fileConfig, lower)
delete(c.defaultConfig, lower)
delete(c.combinedConfig, lower)
c.mutex.Unlock()
}
func (c *ConfigManager) SetDefault(key string, value any) {
c.mutex.Lock()
defer c.mutex.Unlock()