initial commit
This commit is contained in:
109
app/modules/mode/mode.go
Normal file
109
app/modules/mode/mode.go
Normal file
@ -0,0 +1,109 @@
|
||||
package mode
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/spf13/viper"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Mode struct {
|
||||
modeCfg string
|
||||
CurrentMode string
|
||||
availableModes map[string]string
|
||||
}
|
||||
|
||||
func InitMode(modeFileName string, cfgFile string) Mode {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
modeFile := filepath.FromSlash(filepath.Join(wd, modeFileName))
|
||||
if _, err := os.Stat(modeFile); os.IsNotExist(err) {
|
||||
err := ioutil.WriteFile(modeFile, []byte("dev"), 0644)
|
||||
if err != nil {
|
||||
fmt.Printf("Unable to write file: %v", err)
|
||||
}
|
||||
}
|
||||
currentModeFromFile, err := ioutil.ReadFile(modeFile)
|
||||
currentMode := strings.TrimSpace(string(currentModeFromFile))
|
||||
// TODO: dirty implement mode read
|
||||
// Start dirty code ;]
|
||||
viper.AddConfigPath(wd)
|
||||
viper.SetConfigFile(cfgFile)
|
||||
viper.AutomaticEnv()
|
||||
_ = viper.ReadInConfig()
|
||||
elements := viper.Get("modes")
|
||||
// End dirty code :)
|
||||
|
||||
var el = make(map[string]string)
|
||||
for mode, cfg := range elements.(map[string]interface{}) {
|
||||
el[mode] = fmt.Sprintf("%v", cfg)
|
||||
}
|
||||
return Mode{
|
||||
CurrentMode: string(currentMode),
|
||||
availableModes: el,
|
||||
modeCfg: modeFileName,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (c *Mode) GetMode() string {
|
||||
return c.CurrentMode
|
||||
}
|
||||
|
||||
func (c *Mode) PrintListModes() {
|
||||
fmt.Printf("Available modes:\n")
|
||||
for m, _ := range c.availableModes {
|
||||
fmt.Printf("- %v\n", m)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Mode) CheckMode(mode string) (bool, error) {
|
||||
for m := range c.availableModes {
|
||||
if m == mode {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
return false, errors.New("Selected mode not exists in config file")
|
||||
}
|
||||
|
||||
func (c *Mode) GetModes() map[string]string {
|
||||
return c.availableModes
|
||||
}
|
||||
|
||||
func (c *Mode) SetMode(modeName string) (bool, error) {
|
||||
_, err := c.CheckMode(modeName)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
return false, errors.New("Get working directory error!?")
|
||||
}
|
||||
|
||||
modeFile := filepath.FromSlash(filepath.Join(wd, c.modeCfg))
|
||||
wrErr := ioutil.WriteFile(modeFile, []byte(modeName), 0644)
|
||||
if wrErr != nil {
|
||||
return false, errors.New("Write mode error")
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func (c *Mode) GetModeConfig() ([]string, error) {
|
||||
_, err := c.CheckMode(c.CurrentMode);
|
||||
|
||||
if err == nil {
|
||||
composes := strings.Fields(c.availableModes[c.CurrentMode])
|
||||
return composes, nil
|
||||
}
|
||||
|
||||
return nil, errors.New("Selected mode not exists in config file")
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user