feat(cli): add string array flag helpers
All checks were successful
Security Scan / security (push) Successful in 22s
All checks were successful
Security Scan / security (push) Successful in 22s
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
12496ba57c
commit
02d4ee74e6
2 changed files with 66 additions and 0 deletions
|
|
@ -173,6 +173,19 @@ func StringSliceFlag(cmd *Command, ptr *[]string, name, short string, def []stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StringArrayFlag adds a string array flag to a command.
|
||||||
|
// The value will be stored in the provided pointer.
|
||||||
|
//
|
||||||
|
// var tags []string
|
||||||
|
// cli.StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags to apply")
|
||||||
|
func StringArrayFlag(cmd *Command, ptr *[]string, name, short string, def []string, usage string) {
|
||||||
|
if short != "" {
|
||||||
|
cmd.Flags().StringArrayVarP(ptr, name, short, def, usage)
|
||||||
|
} else {
|
||||||
|
cmd.Flags().StringArrayVar(ptr, name, def, usage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
// Persistent Flag Helpers
|
// Persistent Flag Helpers
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
@ -240,6 +253,15 @@ func PersistentStringSliceFlag(cmd *Command, ptr *[]string, name, short string,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PersistentStringArrayFlag adds a persistent string array flag (inherited by subcommands).
|
||||||
|
func PersistentStringArrayFlag(cmd *Command, ptr *[]string, name, short string, def []string, usage string) {
|
||||||
|
if short != "" {
|
||||||
|
cmd.PersistentFlags().StringArrayVarP(ptr, name, short, def, usage)
|
||||||
|
} else {
|
||||||
|
cmd.PersistentFlags().StringArrayVar(ptr, name, def, usage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
// Command Configuration
|
// Command Configuration
|
||||||
// ─────────────────────────────────────────────────────────────────────────────
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,22 @@ func TestPersistentFlagHelpers_Good(t *testing.T) {
|
||||||
require.NoError(t, parent.Execute())
|
require.NoError(t, parent.Execute())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("persistent string array flags inherit through subcommands", func(t *testing.T) {
|
||||||
|
parent := NewGroup("parent", "Parent", "")
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
PersistentStringArrayFlag(parent, &tags, "tag", "t", nil, "Tags")
|
||||||
|
|
||||||
|
child := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
assert.Equal(t, []string{"alpha", "beta"}, tags)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
parent.AddCommand(child)
|
||||||
|
parent.SetArgs([]string{"child", "--tag", "alpha", "-t", "beta"})
|
||||||
|
|
||||||
|
require.NoError(t, parent.Execute())
|
||||||
|
})
|
||||||
|
|
||||||
t.Run("persistent helpers use short flags when provided", func(t *testing.T) {
|
t.Run("persistent helpers use short flags when provided", func(t *testing.T) {
|
||||||
parent := NewGroup("parent", "Parent", "")
|
parent := NewGroup("parent", "Parent", "")
|
||||||
var value int
|
var value int
|
||||||
|
|
@ -79,3 +95,31 @@ func TestPersistentFlagHelpers_Good(t *testing.T) {
|
||||||
assert.True(t, seen)
|
assert.True(t, seen)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFlagHelpers_Good(t *testing.T) {
|
||||||
|
t.Run("string array flags collect repeated values", func(t *testing.T) {
|
||||||
|
cmd := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags")
|
||||||
|
cmd.SetArgs([]string{"--tag", "alpha", "-t", "beta"})
|
||||||
|
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
assert.Equal(t, []string{"alpha", "beta"}, tags)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("string array flags use short flags when provided", func(t *testing.T) {
|
||||||
|
cmd := NewCommand("child", "Child", "", func(_ *Command, _ []string) error {
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
StringArrayFlag(cmd, &tags, "tag", "t", nil, "Tags")
|
||||||
|
cmd.SetArgs([]string{"-t", "alpha"})
|
||||||
|
|
||||||
|
require.NoError(t, cmd.Execute())
|
||||||
|
assert.Equal(t, []string{"alpha"}, tags)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue