/** * @author Robert Strutts * @copyright Copyright (c) 2022, Robert Strutts. * @license https://mit-license.org/ */ package main import ( "flag" "fmt" "io" "log" "os" "path/filepath" "text/template" ) const version = "1.0.0" var root string var app_dir string var method_name string var main_file string var root_in string var verbose bool type PhpTemplate struct { Root string Subfolder string File string Method string } // Declare type pointer to a template var temp_ctrl *template.Template var temp_inputs *template.Template var temp_logic *template.Template var temp_models *template.Template var temp_outputs *template.Template var temp_views *template.Template var php_tpl PhpTemplate func init_template() { // template.Must takes the reponse of template.ParseFiles and does error checking temp_ctrl = template.Must(template.ParseFiles(root + "/go_text_templates/ctrl.txt")) temp_inputs = template.Must(template.ParseFiles(root + "/go_text_templates/inputs.txt")) temp_logic = template.Must(template.ParseFiles(root + "/go_text_templates/logic.txt")) temp_models = template.Must(template.ParseFiles(root + "/go_text_templates/models.txt")) temp_outputs = template.Must(template.ParseFiles(root + "/go_text_templates/outputs.txt")) temp_views = template.Must(template.ParseFiles(root + "/go_text_templates/views.txt")) } func make_a_dir(mydir string) { if _, err := os.Stat(root + "/" + mydir); os.IsNotExist(err) { os.Mkdir(root+"/"+mydir, 0775) } } func use_file(filename string) io.Writer { if verbose { fmt.Println("------------") return os.Stdout } _, err_fnf := os.Stat(root + filename) if !os.IsNotExist(err_fnf) { log.Fatalf("Sorry, %s already exists!", root+filename) } file, err := os.Create(root + filename) if err != nil { log.Fatal(err) } return file } func ctrl() { mydir := "/controllers/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_ctrl.php") temp_err := temp_ctrl.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func inputs() { mydir := "/inputs/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_in.php") temp_err := temp_inputs.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func logic() { mydir := "/logic/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_logic.php") temp_err := temp_logic.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func models() { mydir := "/models/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_model.php") temp_err := temp_models.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func outputs() { mydir := "/outputs/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_out.php") temp_err := temp_outputs.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func views() { mydir := "/views/default/" + app_dir make_a_dir(mydir) file := use_file(mydir + "/" + main_file + "_" + method_name + "_view.php") temp_err := temp_views.Execute(file, php_tpl) if temp_err != nil { log.Fatalln(temp_err) } } func grab_input() { var sub_in string var file_in string var method_in string fmt.Print("Enter SubFolder (app): ") fmt.Scanln(&sub_in) if sub_in == "" { sub_in = "app" } fmt.Print("Enter File (home): ") fmt.Scanln(&file_in) if file_in == "" { file_in = "home" } fmt.Print("Enter Method (index): ") fmt.Scanln(&method_in) if method_in == "" { method_in = "index" } app_dir = sub_in main_file = file_in method_name = method_in php_tpl = PhpTemplate{ Root: root_in, Subfolder: sub_in, File: file_in, Method: method_in, } } func usage() { progName := filepath.Base(os.Args[0]) fmt.Printf(`%s version %s, (c) 2022 Robert Strutts Usage: %s [-www] [-app] [-root] [-v] -h Print this help message. -v Verbose mode, Display output instead of making files. -www Web Dir IE /var/www -app App Dir IE tts_project/src -root Root Dir IE mockup `, progName, version, progName) } func main() { help := flag.Bool("h", false, "Help Page") web_path := flag.String("www", "/var/www", "Web Dir") app_path := flag.String("app", "tts_project/src", "App Dir") root_path := flag.String("root", "mockup", "Root Dir") v := flag.Bool("v", false, "Verbose output") flag.Parse() if *help { usage() return } verbose = *v root = *web_path + "/" + *app_path + "/" + *root_path root_in = *root_path _, err := os.Stat(root) if os.IsNotExist(err) { log.Fatal("Missing root folders: mkdir -p " + root) } fmt.Println("Please wait...") init_template() grab_input() ctrl() inputs() logic() models() outputs() views() }