package config import ( "encoding/json" "io/ioutil" "os" "path/filepath" ) type Config struct { Repo string `json:"repo"` Repositories []string `json:"repositories"` Packages map[string]string `json:"packages"` } var configFile string func init() { home, err := os.UserHomeDir() if err == nil { railsConfig := filepath.Join(home, ".rails", "config", "config.json") if _, err := os.Stat(railsConfig); err == nil { configFile = railsConfig return } } configFile = "./config.json" } func LoadConfig() (*Config, error) { if _, err := os.Stat(configFile); os.IsNotExist(err) { cfg := &Config{ Repo: "", Repositories: []string{}, Packages: make(map[string]string), } if err := SaveConfig(cfg); err != nil { return nil, err } return cfg, nil } data, err := ioutil.ReadFile(configFile) if err != nil { return nil, err } var cfg Config if err := json.Unmarshal(data, &cfg); err != nil { return nil, err } return &cfg, nil } func SaveConfig(cfg *Config) error { data, err := json.MarshalIndent(cfg, "", " ") if err != nil { return err } return ioutil.WriteFile(configFile, data, 0644) } func AddRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } for _, r := range cfg.Repositories { if r == repo { return nil } } cfg.Repositories = append(cfg.Repositories, repo) return SaveConfig(cfg) } func RemoveRepository(repo string) error { cfg, err := LoadConfig() if err != nil { return err } newRepos := []string{} for _, r := range cfg.Repositories { if r != repo { newRepos = append(newRepos, r) } } cfg.Repositories = newRepos return SaveConfig(cfg) }