github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/newapp/presets/coreapp/generator.go (about)

     1  package coreapp
     2  
     3  import (
     4  	"context"
     5  	"io"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  	"text/template"
    11  
    12  	"github.com/gobuffalo/buffalo-cli/v2/cli/cmds/newapp"
    13  	"github.com/gobuffalo/here"
    14  	"github.com/gobuffalo/plugins"
    15  	"github.com/markbates/pkger"
    16  )
    17  
    18  var _ plugins.Plugin = &Generator{}
    19  var _ newapp.Newapper = &Generator{}
    20  
    21  type Generator struct{}
    22  
    23  func (g *Generator) PluginName() string {
    24  	return "core/generator"
    25  }
    26  
    27  func (g *Generator) Newapp(ctx context.Context, root string, name string, args []string) error {
    28  	td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/cmds/newapp/presets/coreapp/_templates")
    29  
    30  	her, err := here.Dir(root)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	err = pkger.Walk(td, func(path string, info os.FileInfo, err error) error {
    36  		if err != nil {
    37  			return err
    38  		}
    39  		np := strings.TrimPrefix(path, td)
    40  		np = strings.TrimPrefix(np, "/")
    41  		np = strings.TrimSuffix(np, ".tmpl")
    42  		np = strings.ReplaceAll(np, "-appname-", her.Name)
    43  
    44  		if info.IsDir() {
    45  			return os.MkdirAll(filepath.Join(root, np), 0755)
    46  		}
    47  
    48  		of, err := pkger.Open(path)
    49  		if err != nil {
    50  			return err
    51  		}
    52  		defer of.Close()
    53  
    54  		b, err := ioutil.ReadAll(of)
    55  		if err != nil {
    56  			return err
    57  		}
    58  
    59  		f, err := os.Create(filepath.Join(root, np))
    60  		if err != nil {
    61  			return err
    62  		}
    63  		defer f.Close()
    64  
    65  		tmpl, err := template.New(path).Parse(string(b))
    66  		if err != nil {
    67  			return err
    68  		}
    69  
    70  		if err := tmpl.Execute(f, her); err != nil {
    71  			return err
    72  		}
    73  
    74  		io.Copy(f, of)
    75  
    76  		return nil
    77  	})
    78  
    79  	if err != nil {
    80  		return err
    81  	}
    82  	return nil
    83  }