diff --git a/widgets/list/api.go b/widgets/list/api.go index c02f57c2..d8de639f 100644 --- a/widgets/list/api.go +++ b/widgets/list/api.go @@ -169,6 +169,6 @@ func exportAPI() error { } // load apis - _, err = api.Load(string(source), "widgets.list") + _, err = api.LoadSource(".yao", source, "widgets.list") return err } diff --git a/widgets/list/list.go b/widgets/list/list.go index 02c34db2..e1b93eb1 100644 --- a/widgets/list/list.go +++ b/widgets/list/list.go @@ -6,13 +6,13 @@ import ( "strings" jsoniter "github.com/json-iterator/go" + "github.com/yaoapp/gou/application" "github.com/yaoapp/gou/process" "github.com/yaoapp/kun/exception" "github.com/yaoapp/kun/log" "github.com/yaoapp/yao/config" "github.com/yaoapp/yao/share" "github.com/yaoapp/yao/widgets/component" - "github.com/yaoapp/yao/widgets/environment" "github.com/yaoapp/yao/widgets/field" ) @@ -66,31 +66,18 @@ func LoadAndExport(cfg config.Config) error { // Load load task func Load(cfg config.Config) error { - var root = filepath.Join(cfg.Root, "lists") - return LoadFrom(root, "") -} - -// LoadFrom load from dir -func LoadFrom(dir string, prefix string) error { - - if share.DirNotExists(dir) { - return fmt.Errorf("%s does not exists", dir) - } - messages := []string{} - err := share.Walk(dir, ".json", func(root, filename string) { - id := prefix + share.ID(root, filename) - data, err := environment.ReadFile(filename) - if err != nil { + exts := []string{"*.yao", "*.json", "*.jsonc"} + err := application.App.Walk("lists", func(root, file string, isdir bool) error { + if isdir { + return nil + } + if err := LoadFile(root, file); err != nil { messages = append(messages, err.Error()) - return } - err = LoadData(data, id, filepath.Dir(dir)) - if err != nil { - messages = append(messages, err.Error()) - } - }) + return nil + }, exts...) if len(messages) > 0 { return fmt.Errorf(strings.Join(messages, ";\n")) @@ -99,30 +86,52 @@ func LoadFrom(dir string, prefix string) error { return err } +// LoadFile load table dsl by file +func LoadFile(root string, file string) error { + + id := share.ID(root, file) + data, err := application.App.Read(file) + if err != nil { + return err + } + + dsl := New(id) + err = application.Parse(file, data, dsl) + if err != nil { + return fmt.Errorf("[%s] %s", id, err.Error()) + } + + err = dsl.parse(id, root) + if err != nil { + return err + } + + Lists[id] = dsl + return nil +} + // LoadID load via id func LoadID(id string, root string) error { - dirs := strings.Split(id, ".") - name := fmt.Sprintf("%s.list.json", dirs[len(dirs)-1]) - elems := []string{root} - elems = append(elems, dirs[0:len(dirs)-1]...) - elems = append(elems, "lists", name) - filename := filepath.Join(elems...) - data, err := environment.ReadFile(filename) - if err != nil { - return fmt.Errorf("[List] LoadID %s root=%s %s", id, root, err.Error()) + file := filepath.Join("lists", share.File(id, ".yao")) + if exists, _ := application.App.Exists(file); exists { + return LoadFile("lists", file) } - return LoadData(data, id, root) + + file = filepath.Join("lists", share.File(id, ".jsonc")) + if exists, _ := application.App.Exists(file); exists { + return LoadFile("lists", file) + } + + file = filepath.Join("lists", share.File(id, ".json")) + if exists, _ := application.App.Exists(file); exists { + return LoadFile("lists", file) + } + + return fmt.Errorf("list %s not found", id) } // LoadData load via data -func LoadData(data []byte, id string, root string) error { - dsl := New(id) - dsl.Root = root - - err := jsoniter.Unmarshal(data, dsl) - if err != nil { - return fmt.Errorf("[List] LoadData %s %s", id, err.Error()) - } +func (dsl *DSL) parse(id string, root string) error { if dsl.Action == nil { dsl.Action = &ActionDSL{} @@ -138,7 +147,7 @@ func LoadData(data []byte, id string, root string) error { } // Bind model / store / list / ... - err = dsl.Bind() + err := dsl.Bind() if err != nil { return fmt.Errorf("[List] LoadData Bind %s %s", id, err.Error()) } diff --git a/widgets/list/list_test.go b/widgets/list/list_test.go index 1e8548a2..b913011b 100644 --- a/widgets/list/list_test.go +++ b/widgets/list/list_test.go @@ -7,16 +7,15 @@ import ( "github.com/yaoapp/yao/config" "github.com/yaoapp/yao/fs" "github.com/yaoapp/yao/i18n" - "github.com/yaoapp/yao/model" - "github.com/yaoapp/yao/script" - "github.com/yaoapp/yao/share" + "github.com/yaoapp/yao/test" "github.com/yaoapp/yao/widgets/expression" "github.com/yaoapp/yao/widgets/field" "github.com/yaoapp/yao/widgets/table" - "github.com/yaoapp/yao/widgets/test" ) func TestLoad(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() prepare(t) err := Load(config.Conf) if err != nil { @@ -27,29 +26,10 @@ func TestLoad(t *testing.T) { func prepare(t *testing.T, language ...string) { - // runtime.Load(config.Conf) - err := test.LoadEngine(language...) - if err != nil { - t.Fatal(err) - } - i18n.Load(config.Conf) - share.DBConnect(config.Conf.DB) // removed later // load fs - err = fs.Load(config.Conf) - if err != nil { - t.Fatal(err) - } - - // load scripts - err = script.Load(config.Conf) - if err != nil { - t.Fatal(err) - } - - // load models - err = model.Load(config.Conf) + err := fs.Load(config.Conf) if err != nil { t.Fatal(err) } diff --git a/widgets/list/process_test.go b/widgets/list/process_test.go index 1c3a25c3..5605028f 100644 --- a/widgets/list/process_test.go +++ b/widgets/list/process_test.go @@ -11,10 +11,13 @@ import ( "github.com/yaoapp/gou/session" "github.com/yaoapp/kun/any" "github.com/yaoapp/yao/config" - q "github.com/yaoapp/yao/query" + "github.com/yaoapp/yao/test" ) func TestProcessSetting(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + load(t) clear(t) testData(t) @@ -30,6 +33,9 @@ func TestProcessSetting(t *testing.T) { } func TestProcessXgen(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + load(t) clear(t) testData(t) @@ -45,6 +51,9 @@ func TestProcessXgen(t *testing.T) { } func TestProcessXgenWithPermissions(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + load(t) clear(t) testData(t) @@ -85,7 +94,6 @@ func load(t *testing.T) { if err != nil { t.Fatal(err) } - q.Load(config.Conf) } func testData(t *testing.T) {