github.com/singlemusic/buffalo@v0.16.30/buffalo/cmd/generate/resource.go (about)

     1  package generate
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/gobuffalo/attrs"
     8  	"github.com/gobuffalo/buffalo/genny/resource"
     9  	"github.com/gobuffalo/genny/v2"
    10  	"github.com/gobuffalo/logger"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  var resourceOptions = struct {
    15  	*resource.Options
    16  	Verbose bool
    17  	DryRun  bool
    18  }{
    19  	Options: &resource.Options{},
    20  }
    21  
    22  // ResourceCmd generates a new actions/resource file and a stub test.
    23  var ResourceCmd = &cobra.Command{
    24  	Use:     "resource [name]",
    25  	Example: resourceExamples,
    26  	Aliases: []string{"r"},
    27  	Short:   "Generate a new actions/resource file",
    28  	RunE: func(cmd *cobra.Command, args []string) error {
    29  		if len(args) == 0 {
    30  			return fmt.Errorf("you must supply a name")
    31  		}
    32  		ctx := context.Background()
    33  		run := genny.WetRunner(ctx)
    34  		if resourceOptions.DryRun {
    35  			run = genny.DryRunner(ctx)
    36  		}
    37  
    38  		if resourceOptions.Verbose {
    39  			lg := logger.New(logger.DebugLevel)
    40  			run.Logger = lg
    41  		}
    42  
    43  		if len(resourceOptions.Name) == 0 {
    44  			resourceOptions.Name = args[0]
    45  		}
    46  		if len(args) > 1 {
    47  			ats, err := attrs.ParseArgs(args[1:]...)
    48  			if err != nil {
    49  				return err
    50  			}
    51  			resourceOptions.Attrs = ats
    52  		}
    53  
    54  		if err := run.WithNew(resource.New(resourceOptions.Options)); err != nil {
    55  			return err
    56  		}
    57  		return run.Run()
    58  	},
    59  }
    60  
    61  func init() {
    62  	ResourceCmd.Flags().BoolVarP(&resourceOptions.SkipMigration, "skip-migration", "s", false, "tells resource generator not-to add model migration")
    63  	ResourceCmd.Flags().BoolVarP(&resourceOptions.SkipModel, "skip-model", "", false, "tells resource generator not to generate model nor migrations")
    64  	ResourceCmd.Flags().BoolVarP(&resourceOptions.SkipTemplates, "skip-templates", "", false, "tells resource generator not to generate templates for the resource")
    65  	ResourceCmd.Flags().StringVarP(&resourceOptions.Model, "use-model", "", "", "tells resource generator to reference an existing model in generated code")
    66  	ResourceCmd.Flags().StringVarP(&resourceOptions.Name, "name", "n", "", "allows to define a different model name for the resource being generated.")
    67  	ResourceCmd.Flags().BoolVarP(&resourceOptions.DryRun, "dry-run", "d", false, "dry run")
    68  	ResourceCmd.Flags().BoolVarP(&resourceOptions.Verbose, "verbose", "v", false, "verbosely print out the go get commands")
    69  }
    70  
    71  const resourceExamples = `$ buffalo g resource users
    72  Generates:
    73  
    74  - actions/users.go
    75  - actions/users_test.go
    76  - models/user.go
    77  - models/user_test.go
    78  - migrations/2016020216301234_create_users.up.fizz
    79  - migrations/2016020216301234_create_users.down.fizz
    80  
    81  $ buffalo g resource users --skip-migration
    82  Generates:
    83  
    84  - actions/users.go
    85  - actions/users_test.go
    86  - models/user.go
    87  - models/user_test.go
    88  
    89  $ buffalo g resource users --skip-model
    90  Generates:
    91  
    92  - actions/users.go
    93  - actions/users_test.go
    94  
    95  $ buffalo g resource users --use-model users
    96  Generates:
    97  
    98  - actions/users.go
    99  - actions/users_test.go`