From 35776e56ac6273249957082ebb057df135b1936a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 10 Mar 2020 07:54:38 +0000 Subject: [PATCH] Support reverse from reader (#7) Support reverse from reader Reviewed-on: https://gitea.com/xorm/reverse/pulls/7 --- cmd/reverse.go | 6 +++++- cmd/reverse_test.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/cmd/reverse.go b/cmd/reverse.go index 16d814f..9795f32 100644 --- a/cmd/reverse.go +++ b/cmd/reverse.go @@ -8,6 +8,7 @@ import ( "bytes" "errors" "html/template" + "io" "io/ioutil" "os" "path/filepath" @@ -29,9 +30,12 @@ func reverse(rFile string) error { return err } defer f.Close() + return reverseFromReader(f) +} +func reverseFromReader(rd io.Reader) error { var cfg ReverseConfig - err = yaml.NewDecoder(f).Decode(&cfg) + err := yaml.NewDecoder(rd).Decode(&cfg) if err != nil { return err } diff --git a/cmd/reverse_test.go b/cmd/reverse_test.go index 4b89414..19fd61b 100644 --- a/cmd/reverse_test.go +++ b/cmd/reverse_test.go @@ -7,10 +7,14 @@ package cmd import ( "fmt" "io/ioutil" + "os" + "path/filepath" + "strings" "testing" _ "github.com/mattn/go-sqlite3" "github.com/stretchr/testify/assert" + "xorm.io/xorm" ) var result = fmt.Sprintf(`package models @@ -32,3 +36,38 @@ func TestReverse(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, result, string(bs)) } + +func TestReverse2(t *testing.T) { + type Outfw struct { + Id int `xorm:"not null pk autoincr"` + Sql string `xorm:"default '' TEXT"` + Template string `xorm:"default '' TEXT"` + Filename string `xorm:"VARCHAR(50)"` + } + + dir, err := ioutil.TempDir(os.TempDir(), "reverse") + assert.NoError(t, err) + + e, err := xorm.NewEngine("sqlite3", filepath.Join(dir, "db.db")) + assert.NoError(t, err) + + assert.NoError(t, e.Sync2(new(Outfw))) + + err = reverseFromReader(strings.NewReader(` +kind: reverse +name: mydb +source: + database: sqlite3 + conn_str: '../testdata/test.db' +targets: +- type: codes + include_tables: + - a + - b + exclude_tables: + - c + language: golang + output_dir: ../models +`)) + assert.NoError(t, err) +}