github.com/Accefy/pop@v0.0.0-20230428174248-e9f677eab5b9/fix/auto_timestamps_off.go (about) 1 package fix 2 3 import ( 4 "strings" 5 6 "github.com/gobuffalo/plush/v4/ast" 7 "github.com/gobuffalo/plush/v4/parser" 8 ) 9 10 // AutoTimestampsOff adds a t.Timestamps() statement to fizz migrations 11 // when they still use the implicit auto-timestamp old fizz feature. 12 func AutoTimestampsOff(content string) (string, error) { 13 var p *ast.Program 14 var err error 15 if p, err = parser.Parse("<% " + content + "%>"); err != nil { 16 return "", err 17 } 18 19 var pt *ast.Program 20 if pt, err = parser.Parse("<% t.Timestamps() %>"); err != nil { 21 return "", err 22 } 23 ts := pt.Statements[0].(*ast.ExpressionStatement) 24 25 for _, s := range p.Statements { 26 stmt := s.(*ast.ExpressionStatement) 27 if function, ok := stmt.Expression.(*ast.CallExpression); ok { 28 if function.Function.TokenLiteral() == "create_table" { 29 args := function.Arguments 30 enableTimestamps := true 31 if len(args) > 1 { 32 if v, ok := args[1].(*ast.HashLiteral); ok { 33 if strings.Contains(v.String(), `"timestamps": false`) { 34 enableTimestamps = false 35 } 36 } 37 } 38 for _, bs := range function.Block.Statements { 39 bstmt := bs.(*ast.ExpressionStatement) 40 if f, ok := bstmt.Expression.(*ast.CallExpression); ok { 41 fs := f.Function.String() 42 if fs == "t.DisableTimestamps" || fs == "t.Timestamps" { 43 enableTimestamps = false 44 } 45 } 46 } 47 if enableTimestamps { 48 function.Block.Statements = append(function.Block.Statements, ts) 49 } 50 } 51 } 52 } 53 54 return p.String(), nil 55 }