From 00c4286e1da86000d6b1a856e6e9d77aa513d65b Mon Sep 17 00:00:00 2001 From: harveyshao Date: Tue, 3 Aug 2021 20:27:16 +0800 Subject: [PATCH] opt some --- base/mdb/zone.go | 53 +++++++++++++++++++++++++++++++++ core/code/case.go | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 base/mdb/zone.go create mode 100644 core/code/case.go diff --git a/base/mdb/zone.go b/base/mdb/zone.go new file mode 100644 index 00000000..1847a9f1 --- /dev/null +++ b/base/mdb/zone.go @@ -0,0 +1,53 @@ +package mdb + +import ( + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" +) + +func ZoneAction(fields ...string) map[string]*ice.Action { + _zone := func(m *ice.Message) string { + return kit.Select(kit.MDB_ZONE, m.Conf(m.PrefixKey(), kit.Keym(kit.MDB_SHORT))) + } + list := map[string]*ice.Action{ + CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) + }}, + INSERT: {Name: "insert zone= type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1]) + m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:]) + }}, + MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg) + }}, + REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_zone(m))) + }}, + EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.OptionFields(_zone(m), m.Conf(m.PrefixKey(), kit.META_FIELD)) + m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE) + m.Conf(m.PrefixKey(), kit.MDB_HASH, "") + }}, + IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + m.OptionFields(_zone(m)) + m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE) + }}, + INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + switch arg[0] { + case _zone(m): + m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg) + default: + m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg) + } + }}, + } + if len(fields) == 0 { + return list + } + + res := map[string]*ice.Action{} + for _, field := range fields { + res[field] = list[field] + } + return res +} diff --git a/core/code/case.go b/core/code/case.go new file mode 100644 index 00000000..a11a698f --- /dev/null +++ b/core/code/case.go @@ -0,0 +1,76 @@ +package code + +import ( + ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/cli" + "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/web" + kit "github.com/shylinux/toolkits" +) + +const CASE = "case" + +func init() { + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + CASE: {Name: CASE, Help: "用例", Value: kit.Data( + kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,name,cmd,api,arg,res", + )}, + }, + Commands: map[string]*ice.Command{ + CASE: {Name: "case zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.INSERT: {Name: "create zone name=hi cmd=POST,GET api arg:textarea res:textarea", Help: "添加"}, + + cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { + m.Option(web.SPIDE_HEADER, web.ContentType, web.ContentJSON) + m.Echo(kit.Formats(kit.UnMarshal(m.Cmdx(web.SPIDE, web.SPIDE_DEV, web.SPIDE_RAW, + m.Option(cli.CMD), m.Option(cli.API), web.SPIDE_DATA, m.Option(cli.ARG))))) + m.Info(`curl "` + m.Option(cli.API) + `" -H "Content-Type: application/json"` + ` -d '` + m.Option(cli.ARG) + `'`) + m.ProcessInner() + }}, + cli.CHECK: {Name: "check", Help: "检查", Hand: func(m *ice.Message, arg ...string) { + if m.ProcessInner(); len(arg) > 0 { + success := 0 + m.Cmd(m.PrefixKey(), arg[0]).Table(func(index int, value map[string]string, head []string) { + m.Push(kit.MDB_TIME, m.Time()) + m.Push(kit.MDB_ID, value[kit.MDB_ID]) + if err := m.Cmdx(m.PrefixKey(), cli.CHECK, value); err == ice.OK { + m.Push(cli.ERR, cli.Color(m, cli.GREEN, err)) + success++ + } else { + m.Push(cli.ERR, cli.Color(m, cli.RED, err)) + } + m.Push(cli.API, value[cli.API]) + m.Push(cli.ARG, value[cli.ARG]) + m.Push(cli.RES, value[cli.RES]) + }) + m.StatusTimeCount(ice.SUCCESS, success) + return + } + + res := kit.UnMarshal(m.Cmdx(m.PrefixKey(), cli.RUN)) + if m.Option(cli.RES) != "" { + for k, v := range kit.KeyValue(nil, "", kit.UnMarshal(m.Option(cli.RES))) { + if v != kit.Value(res, k) { + m.Echo(kit.Formats(res)) + return + } + } + } + m.Echo(ice.OK) + }}, + }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Fields(len(arg), "time,zone,count", m.Conf(m.PrefixKey(), kit.META_FIELD)) + if m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, arg); len(arg) == 0 { + m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) + m.PushAction(mdb.INSERT, cli.CHECK, mdb.REMOVE) + } else { + m.Action(mdb.INSERT, cli.CHECK) + m.PushAction(cli.RUN, cli.CHECK) + } + m.StatusTimeCount() + }}, + }, + }) + +}