github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/pop/newapp/generator.go (about)

     1  package newapp
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"text/template"
    10  
    11  	"github.com/markbates/pkger"
    12  	"github.com/spf13/pflag"
    13  )
    14  
    15  type Generator struct {
    16  	databaseType string
    17  	skip         bool
    18  
    19  	flags *pflag.FlagSet
    20  }
    21  
    22  func (g Generator) PluginName() string {
    23  	return "pop/db"
    24  }
    25  
    26  func (g Generator) Description() string {
    27  	return "Generates Pop needed files when application is created"
    28  }
    29  
    30  func (g *Generator) Newapp(ctx context.Context, root string, name string, args []string) error {
    31  	if g.skip {
    32  		return nil
    33  	}
    34  
    35  	err := g.addModels(root, name)
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	err = g.addDatabaseConfig(root, name)
    41  	if err != nil {
    42  		return err
    43  	}
    44  
    45  	return nil
    46  }
    47  
    48  func (g *Generator) addDatabaseConfig(root, name string) error {
    49  	td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/internal/plugins/pop/newapp/templates")
    50  
    51  	dbtype := g.databaseType
    52  	if dbtype == "" {
    53  		dbtype = "postgres"
    54  	}
    55  
    56  	tfile := fmt.Sprintf("database.%v.yml.tmpl", dbtype)
    57  	tf, err := pkger.Open(filepath.Join(td, tfile))
    58  	if err != nil {
    59  		return err
    60  	}
    61  
    62  	t, err := ioutil.ReadAll(tf)
    63  	if err != nil {
    64  		return err
    65  	}
    66  
    67  	template, err := template.New("database.yml").Parse(string(t))
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	f, err := os.Create(filepath.Join(root, "database.yml"))
    73  	if err != nil {
    74  		return err
    75  	}
    76  
    77  	data := struct {
    78  		Root string
    79  		Name string
    80  	}{
    81  		Root: root + string(filepath.Separator),
    82  		Name: name,
    83  	}
    84  
    85  	err = template.Execute(f, data)
    86  	if err != nil {
    87  		return err
    88  	}
    89  
    90  	return nil
    91  }
    92  
    93  func (g *Generator) addModels(root, name string) error {
    94  	td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/internal/plugins/pop/newapp/templates")
    95  	err := os.Mkdir(filepath.Join(root, "models"), 0777)
    96  	if err != nil {
    97  		return err
    98  	}
    99  
   100  	tf, err := pkger.Open(filepath.Join(td, "models.go.tmpl"))
   101  	if err != nil {
   102  		return err
   103  	}
   104  
   105  	t, err := ioutil.ReadAll(tf)
   106  	if err != nil {
   107  		return err
   108  	}
   109  
   110  	template, err := template.New("models.go").Parse(string(t))
   111  	if err != nil {
   112  		return err
   113  	}
   114  
   115  	f, err := os.Create(filepath.Join(root, "models", "models.go"))
   116  	if err != nil {
   117  		return err
   118  	}
   119  
   120  	err = template.Execute(f, nil)
   121  	if err != nil {
   122  		return err
   123  	}
   124  
   125  	return nil
   126  }