github.com/rsc/buffalo@v0.11.1/generators/resource/resource.go (about) 1 package resource 2 3 import ( 4 "fmt" 5 "os/exec" 6 "path/filepath" 7 "strings" 8 9 "github.com/pkg/errors" 10 11 "github.com/gobuffalo/buffalo/generators" 12 "github.com/gobuffalo/makr" 13 "github.com/gobuffalo/packr" 14 ) 15 16 // Run generates a new actions/resource file and a stub test. 17 func (res Generator) Run(root string, data makr.Data) error { 18 g := makr.New() 19 defer g.Fmt(root) 20 21 data["opts"] = res 22 data["actions"] = []string{"List", "Show", "New", "Create", "Edit", "Update", "Destroy"} 23 24 tmplName := "resource-use_model" 25 26 if res.SkipModel { 27 tmplName = "resource-name" 28 } 29 30 files, err := generators.FindByBox(packr.NewBox("../resource/templates")) 31 if err != nil { 32 return errors.WithStack(err) 33 } 34 35 for _, f := range files { 36 // Adding the resource template to the generator 37 if strings.Contains(f.WritePath, tmplName) { 38 folder := res.FilesPath 39 if strings.Contains(f.WritePath, "actions") { 40 folder = res.ActionsPath 41 } 42 p := strings.Replace(f.WritePath, tmplName, folder, -1) 43 g.Add(makr.NewFile(p, f.Body)) 44 } 45 if !res.SkipTemplates { 46 // Adding the html templates to the generator 47 if strings.Contains(f.WritePath, "model-view-") { 48 targetPath := filepath.Join( 49 filepath.Dir(f.WritePath), 50 res.FilesPath, 51 strings.Replace(filepath.Base(f.WritePath), "model-view-", "", -1), 52 ) 53 g.Add(makr.NewFile(targetPath, f.Body)) 54 } 55 } 56 } 57 g.Add(&makr.Func{ 58 Should: func(data makr.Data) bool { return true }, 59 Runner: func(root string, data makr.Data) error { 60 return generators.AddInsideAppBlock(fmt.Sprintf("app.Resource(\"/%s\", %sResource{})", res.Name.URL(), res.Name.Resource())) 61 }, 62 }) 63 64 if !res.SkipModel && !res.UseModel { 65 g.Add(res.modelCommand()) 66 } 67 68 return g.Run(root, data) 69 } 70 71 func (res Generator) modelCommand() makr.Command { 72 args := res.Args 73 args = append(args[:0], args[0+1:]...) 74 args = append([]string{"db", "g", "model", res.Model.UnderSingular()}, args...) 75 76 if res.SkipMigration { 77 args = append(args, "--skip-migration") 78 } 79 80 return makr.NewCommand(exec.Command("buffalo", args...)) 81 }