- edited description
refactor command router initialization
Issue #74
closed
The current command router is currently initialized with
// Initialize uru's main command router
func initCommandRouter(r *command.CommandRouter) {
r.Handle([]string{`admin`}, command.Admin)
r.Handle([]string{`gem`}, command.Gem)
r.Handle([]string{`help`}, command.Help)
r.Handle([]string{`ls`, `list`}, command.List)
r.Handle([]string{`ruby`, `rb`}, command.Ruby)
r.Handle([]string{`ver`, `version`}, command.Version)
}
in which this initialization code must have a priori knowledge of supported sub-commands. This is exactly opposite of what is needed. Sub-commands (and plugins) should inject themselves by registering with the router during sub-command initialization.
In addition to changes required to the router and overall initialization, implement a Command
type similar to the following:
package cmd
type Command struct {
// Command name
Name string
// Command aliases
Aliases []string
// Single line usage demonstrating how to use this command
Usage string
// Single line summarizing this command
Short string
// Multiple line description of this command
Long string
// The command's function invoked by the command router
Run func(ctx *env.Context)
}
// Runnable indicates whether the command can be invoked. Non runnable commands are
// information only commands.
func (t *Command) Runnable() bool { return t.Run != nil }
Comments (2)
-
reporter -
reporter - changed status to closed
Teach commands to use new router init. Closes
#74→ <<cset e561e28a6abd>>
- Log in to comment
Remove
CommandRegistry
andAdminCmdRegistry
maps as the updated command router also functions as a command registry.