github.com/rendon/cf@v0.0.0-20220806233241-5cb5d3939c03/gen.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os/user"
     7  	"path/filepath"
     8  
     9  	log "github.com/Sirupsen/logrus"
    10  	"github.com/codegangsta/cli"
    11  )
    12  
    13  func getCodeFromTemplate(ext string) (string, error) {
    14  	usr, err := user.Current()
    15  	if err != nil {
    16  		return "", err
    17  	}
    18  	settings, err := ReadKeyValueYamlFile(usr.HomeDir + "/.cf.yml")
    19  	if err != nil {
    20  		return "", err
    21  	}
    22  
    23  	var key = "template." + ext
    24  	template, ok := settings[key].(string)
    25  	if !ok {
    26  		return "", fmt.Errorf("Failed to get %q from setting file", key)
    27  	}
    28  	buf, err := ioutil.ReadFile(template)
    29  	if err != nil {
    30  		return "", err
    31  	}
    32  
    33  	return string(buf), nil
    34  }
    35  
    36  func gen(c *cli.Context) {
    37  	if len(c.Args()) != 1 {
    38  		cli.ShowCommandHelp(c, "gen")
    39  		return
    40  	}
    41  	var sourceFile = c.Args()[0]
    42  	if err := GenerateSampleSolution(sourceFile, ""); err != nil {
    43  		log.Fatalf("Failed to generate sample solution: %s", err)
    44  	}
    45  
    46  	// At this point we know sourceFile contains a valid extension
    47  	ext := filepath.Ext(sourceFile)[1:]
    48  	settings, err := ReadKeyValueYamlFile(".settings.yml")
    49  	if err != nil {
    50  		log.Printf("Failed to read settings file: %s\n", err)
    51  		settings = make(map[string]interface{})
    52  	}
    53  	settings["lang"] = ext
    54  	settings["sourceFile"] = filepath.Base(sourceFile)
    55  	settingsFile := ".settings.yml"
    56  	if dir := filepath.Dir(sourceFile); dir != "" {
    57  		settingsFile = dir + "/" + settingsFile
    58  	}
    59  	if err = WriteKeyValueYamlFile(settingsFile, settings); err != nil {
    60  		log.Printf("Failed to write settings file: %s\n", err)
    61  	}
    62  }