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  }