github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/version/cmd.go (about)

     1  package version
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  	"io"
     8  	"io/ioutil"
     9  	"os"
    10  
    11  	"github.com/gobuffalo/plugins"
    12  	"github.com/gobuffalo/plugins/plugio"
    13  	"github.com/gobuffalo/plugins/plugprint"
    14  	"github.com/spf13/pflag"
    15  )
    16  
    17  var _ plugins.Plugin = &Cmd{}
    18  var _ plugio.OutNeeder = &Cmd{}
    19  var _ plugprint.Describer = &Cmd{}
    20  var _ plugprint.FlagPrinter = &Cmd{}
    21  
    22  // Cmd is responsible for the `buffalo version` command.
    23  type Cmd struct {
    24  	help   bool
    25  	json   bool
    26  	stdout io.Writer
    27  }
    28  
    29  func (c *Cmd) SetStdout(w io.Writer) error {
    30  	c.stdout = w
    31  	return nil
    32  }
    33  
    34  func (vc *Cmd) PrintFlags(w io.Writer) error {
    35  	flags := vc.Flags()
    36  	flags.SetOutput(w)
    37  	flags.PrintDefaults()
    38  	return nil
    39  }
    40  
    41  func (vc *Cmd) PluginName() string {
    42  	return "version"
    43  }
    44  
    45  func (vc *Cmd) Description() string {
    46  	return "Print the version information"
    47  }
    48  
    49  func (i Cmd) String() string {
    50  	return i.PluginName()
    51  }
    52  
    53  func (vc *Cmd) Flags() *pflag.FlagSet {
    54  	flags := pflag.NewFlagSet(vc.String(), pflag.ContinueOnError)
    55  	flags.SetOutput(ioutil.Discard)
    56  	flags.BoolVarP(&vc.help, "help", "h", false, "print this help")
    57  	flags.BoolVarP(&vc.json, "json", "j", false, "Print information in json format")
    58  	return flags
    59  }
    60  
    61  func (vc *Cmd) Main(ctx context.Context, root string, args []string) error {
    62  	flags := vc.Flags()
    63  	if err := flags.Parse(args); err != nil {
    64  		return err
    65  	}
    66  
    67  	out := vc.stdout
    68  	if vc.stdout == nil {
    69  		out = os.Stdout
    70  	}
    71  	if vc.help {
    72  		return plugprint.Print(out, vc)
    73  	}
    74  
    75  	if !vc.json {
    76  		fmt.Fprintln(out, Version)
    77  		return nil
    78  	}
    79  
    80  	enc := json.NewEncoder(out)
    81  	enc.SetIndent("", "    ")
    82  	return enc.Encode(map[string]string{
    83  		"version": Version,
    84  	})
    85  
    86  }