github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/generate/cmd.go (about) 1 package generate 2 3 import ( 4 "github.com/gobuffalo/plugins" 5 "github.com/gobuffalo/plugins/plugcmd" 6 "github.com/gobuffalo/plugins/plugprint" 7 "github.com/spf13/pflag" 8 ) 9 10 var _ plugcmd.Aliaser = &Cmd{} 11 var _ plugins.Needer = &Cmd{} 12 var _ plugins.Plugin = &Cmd{} 13 var _ plugins.Scoper = &Cmd{} 14 var _ plugprint.Describer = &Cmd{} 15 var _ plugprint.FlagPrinter = &Cmd{} 16 var _ plugprint.SubCommander = &Cmd{} 17 18 type Cmd struct { 19 help bool 20 pluginsFn plugins.Feeder 21 flags *pflag.FlagSet 22 } 23 24 func (cmd *Cmd) WithPlugins(f plugins.Feeder) { 25 cmd.pluginsFn = f 26 } 27 28 func (*Cmd) CmdAliases() []string { 29 return []string{"g"} 30 } 31 32 func (b Cmd) PluginName() string { 33 return "generate" 34 } 35 36 func (Cmd) Description() string { 37 return "Generate application components" 38 } 39 40 func (cmd *Cmd) SubCommands() []plugins.Plugin { 41 var plugs []plugins.Plugin 42 for _, p := range cmd.ScopedPlugins() { 43 if _, ok := p.(Generator); ok { 44 plugs = append(plugs, p) 45 } 46 } 47 return plugs 48 } 49 50 func (cmd *Cmd) ScopedPlugins() []plugins.Plugin { 51 var plugs []plugins.Plugin 52 if cmd.pluginsFn == nil { 53 return plugs 54 } 55 56 for _, p := range cmd.pluginsFn() { 57 switch p.(type) { 58 case Generator: 59 plugs = append(plugs, p) 60 case Stdouter: 61 plugs = append(plugs, p) 62 } 63 } 64 return plugs 65 }