Skip to content

Commit 1e444e8

Browse files
Refactor plugin config constants
1 parent 0b83900 commit 1e444e8

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

pkg/cmd/plugin/config.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/spf13/cobra"
88

99
"github.com/stripe/stripe-cli/pkg/config"
10+
"github.com/stripe/stripe-cli/pkg/plugins"
1011
)
1112

1213
// ConfigCmd handles `stripe plugin config` for reading and writing plugin settings.
@@ -55,30 +56,30 @@ func (cc *ConfigCmd) run(cmd *cobra.Command, args []string) error {
5556
return cc.setUpdates(args[0], args[1], args[2])
5657
case cc.unset != "" && len(args) == 0:
5758
// stripe plugin config --unset updates (global)
58-
return cc.cfg.DeleteConfigField(fmt.Sprintf("plugin_configs.__global.%s", cc.unset))
59+
return cc.cfg.DeleteConfigField(plugins.PluginConfigKey(plugins.PluginConfigGlobalScope, cc.unset))
5960
case cc.unset != "" && len(args) == 1:
6061
// stripe plugin config <plugin> --unset updates
6162
pluginName := args[0]
6263
if !slices.Contains(cc.cfg.GetInstalledPlugins(), pluginName) {
6364
return fmt.Errorf("plugin %q is not installed", pluginName)
6465
}
65-
return cc.cfg.DeleteConfigField(fmt.Sprintf("plugin_configs.%s.%s", pluginName, cc.unset))
66+
return cc.cfg.DeleteConfigField(plugins.PluginConfigKey(pluginName, cc.unset))
6667
default:
6768
return cmd.Help()
6869
}
6970
}
7071

7172
func (cc *ConfigCmd) setUpdates(scope, field, value string) error {
72-
if field != "updates" {
73+
if field != plugins.PluginConfigUpdatesField {
7374
return fmt.Errorf("unknown config field %q", field)
7475
}
7576
if value != "on" && value != "off" {
7677
return fmt.Errorf("invalid value %q for updates — must be \"on\" or \"off\"", value)
7778
}
78-
if scope != "__global" {
79+
if scope != plugins.PluginConfigGlobalScope {
7980
if !slices.Contains(cc.cfg.GetInstalledPlugins(), scope) {
8081
return fmt.Errorf("plugin %q is not installed", scope)
8182
}
8283
}
83-
return cc.cfg.WriteConfigField(fmt.Sprintf("plugin_configs.%s.%s", scope, field), value)
84+
return cc.cfg.WriteConfigField(plugins.PluginConfigKey(scope, field), value)
8485
}

pkg/cmd/plugin/config_test.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/stretchr/testify/require"
1111

1212
"github.com/stripe/stripe-cli/pkg/config"
13+
"github.com/stripe/stripe-cli/pkg/plugins"
1314
)
1415

1516
func setupPluginConfigTest(t *testing.T) (*config.Config, func()) {
@@ -46,7 +47,7 @@ func TestGlobalSet_UpdatesOn(t *testing.T) {
4647

4748
err := cc.run(cc.Cmd, []string{"updates", "on"})
4849
require.NoError(t, err)
49-
assert.Equal(t, "on", viper.GetString("plugin_configs.__global.updates"))
50+
assert.Equal(t, "on", viper.GetString(plugins.PluginConfigKey(plugins.PluginConfigGlobalScope, plugins.PluginConfigUpdatesField)))
5051
}
5152

5253
func TestGlobalSet_UpdatesOff(t *testing.T) {
@@ -58,7 +59,7 @@ func TestGlobalSet_UpdatesOff(t *testing.T) {
5859

5960
err := cc.run(cc.Cmd, []string{"updates", "off"})
6061
require.NoError(t, err)
61-
assert.Equal(t, "off", viper.GetString("plugin_configs.__global.updates"))
62+
assert.Equal(t, "off", viper.GetString(plugins.PluginConfigKey(plugins.PluginConfigGlobalScope, plugins.PluginConfigUpdatesField)))
6263
}
6364

6465
func TestGlobalSet_InvalidValue(t *testing.T) {
@@ -91,14 +92,14 @@ func TestGlobalUnset_Updates(t *testing.T) {
9192
cfg, cleanup := setupPluginConfigTest(t)
9293
defer cleanup()
9394

94-
require.NoError(t, cfg.WriteConfigField("plugin_configs.__global.updates", "off"))
95+
require.NoError(t, cfg.WriteConfigField(plugins.PluginConfigKey(plugins.PluginConfigGlobalScope, plugins.PluginConfigUpdatesField), "off"))
9596

9697
cc := newTestConfigCmd(cfg)
97-
cc.unset = "updates"
98+
cc.unset = plugins.PluginConfigUpdatesField
9899

99100
err := cc.run(cc.Cmd, []string{})
100101
require.NoError(t, err)
101-
assert.False(t, viper.IsSet("plugin_configs.__global.updates"))
102+
assert.False(t, viper.IsSet(plugins.PluginConfigKey(plugins.PluginConfigGlobalScope, plugins.PluginConfigUpdatesField)))
102103
}
103104

104105
// -- per-plugin --set -------------------------------------------------------
@@ -114,7 +115,7 @@ func TestPluginSet_UpdatesOff(t *testing.T) {
114115

115116
err := cc.run(cc.Cmd, []string{"apps", "updates", "off"})
116117
require.NoError(t, err)
117-
assert.Equal(t, "off", viper.GetString("plugin_configs.apps.updates"))
118+
assert.Equal(t, "off", viper.GetString(plugins.PluginConfigKey("apps", plugins.PluginConfigUpdatesField)))
118119
}
119120

120121
func TestPluginSet_NotInstalled(t *testing.T) {
@@ -150,14 +151,14 @@ func TestPluginUnset_Updates(t *testing.T) {
150151
defer cleanup()
151152

152153
require.NoError(t, cfg.WriteConfigField("installed_plugins", []string{"apps"}))
153-
require.NoError(t, cfg.WriteConfigField("plugin_configs.apps.updates", "off"))
154+
require.NoError(t, cfg.WriteConfigField(plugins.PluginConfigKey("apps", plugins.PluginConfigUpdatesField), "off"))
154155

155156
cc := newTestConfigCmd(cfg)
156-
cc.unset = "updates"
157+
cc.unset = plugins.PluginConfigUpdatesField
157158

158159
err := cc.run(cc.Cmd, []string{"apps"})
159160
require.NoError(t, err)
160-
assert.False(t, viper.IsSet("plugin_configs.apps.updates"))
161+
assert.False(t, viper.IsSet(plugins.PluginConfigKey("apps", plugins.PluginConfigUpdatesField)))
161162
}
162163

163164
func TestPluginUnset_NotInstalled(t *testing.T) {

pkg/plugins/plugin_configs.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package plugins
2+
3+
const (
4+
// PluginConfigGlobalScope is used as the scope when a setting applies to all plugins.
5+
PluginConfigGlobalScope = "__global"
6+
7+
// PluginConfigUpdatesField is the config field name controlling automatic updates.
8+
PluginConfigUpdatesField = "updates"
9+
)
10+
11+
// PluginConfigKey returns the key for a plugin config field.
12+
// Use PluginConfigGlobalScope as scope to target all plugins.
13+
// Use the plugin name as scope to target a specific plugin.
14+
// Example: PluginConfigKey("__global", "updates") to read or set the global updates setting
15+
// Example: PluginConfigKey("apps", "updates") to read or set the updates setting for the "apps" plugin
16+
func PluginConfigKey(scope, field string) string {
17+
return "plugin_configs." + scope + "." + field
18+
}

0 commit comments

Comments
 (0)