func (cc *Controller) Delete(ctx climax.Context) int { name, _ := ctx.Get("name") scope, _ := ctx.Get("scope") if name == "" { printer.Say("name is required") return 1 } if scope == "" { scope = models.DefaultScope } err := cc.Client.Delete(name, scope) if err != nil { printer.SayErr("%v", err) return 1 } printer.Say("deleted flag %s/%s/%s", cc.Config.Namespace, scope, name) ft := &models.Feature{ Key: name, Scope: scope, UpdatedBy: cc.Config.Username, } return cc.CommitFeatures(ft, true) }
func (cc *Controller) List(ctx climax.Context) int { pf, _ := ctx.Get("prefix") scope, _ := ctx.Get("scope") if pf != "" && scope == "" { scope = models.DefaultScope } features, err := cc.Client.List(pf, scope) if err != nil { printer.SayErr("%v", err) return 1 } if len(features) == 0 { printer.Say("no feature flags found in namespace: %s", cc.Client.Namespace()) return 1 } ui.New().DrawFeatures(features) return 0 }
func (cc *Controller) ParseContext(ctx climax.Context) (*models.Feature, error) { name, _ := ctx.Get("name") val, _ := ctx.Get("value") cmt, _ := ctx.Get("comment") scp, _ := ctx.Get("scope") if name == "" { return nil, errNameRequired } var v interface{} var ft models.FeatureType if val != "" { v, ft = models.ParseValueAndFeatureType(val) if ft == models.Invalid { return nil, errInvalidFeatureType } if ft == models.Percentile { if v.(float64) > 1.0 || v.(float64) < 0 { return nil, errInvalidRange } } } f := models.NewFeature(name, v, cmt, cc.Config.Username, scp, cc.Config.Namespace) f.FeatureType = ft return f, nil }
// Handler accepts a climax.Context object and returns an exitcode integer. func Example_handler(ctx climax.Context) int { if len(ctx.Args) < 2 { ctx.Log("not enough arguments") // with os.Exit(1) return 1 } if name, ok := ctx.Get("name"); ok { // argument `name` parsed fmt.Println(name) } else { ctx.Log("name not specified") return 1 } return 0 }
func (cc *Controller) Import(ctx climax.Context) int { bts, err := ioutil.ReadAll(os.Stdin) if err != nil { printer.SayErr("%v", err) return 1 } var kvs map[string]interface{} err = json.Unmarshal(bts, &kvs) if err != nil { printer.SayErr("%v", err) return 1 } scope, _ := ctx.Get("scope") if scope == "" { scope = models.DefaultScope } for k, v := range kvs { f := models.NewFeature(k, v, "", "", scope, cc.Config.Namespace) err = cc.Client.Set(f) if err != nil { printer.SayErr("%v", err) return 1 } printer.Say("set %s to %+v", k, v) } return 1 }