Technipelago Blog Stuff that we learned...
Use Perl to fix your old Grails controllers
Use Perl to replace Grails action references with deprecated format redirect(action: show) to redirect(action: 'show') and action closures to action methods
Today I finally took the time to upgrade my largest Grails 1.3.7 application to Grails 2.0.1
I started to develop this application during spring 2008 and I've been upgrading to all Grails versions between 1.1 and 1.3.7. This makes the code base somewhat "dynamic". Different code styles and implementations depending on Grails version, best practices at the time, and my skills level.
As a result, lots of old controller code has redirects that reference action closures directly using the action's property instead of the action name.
redirect(action:show, id:params.id)
instead of the recommended:
redirect(action:"show", id:params.id)
I did a "grep" on all my 70 controllers and found out that 50 of them (300+) lines had bad redirects!!!
No way I was going to change all those lines manually.
That's when my old Perl knowledge came to rescue!
Here's the script fixredirect.pl
#!/usr/bin/perl while(<>) { if(/redirect(.+)action:\s*(\w+)/) { print "$`redirect$1action: \"$2\"$'"; } else { print $_; } }
$ cd grails-app/controllers/... $ cp *Controller.groovy $HOME/i-am-a-chicken $ perl -i redirectfix.pl *Controller.groovy
def actionMethod = {arg1, arg2 -> // ... }
def actionMethod(arg1, arg2) { // ... }
#!/usr/bin/perl while(<>) { if(/^\s*def\s+(\w+)\s*=\s*\{([^\-]*)\-\>\s*$/) { print "def $1($2) {\n"; } elsif(/^\s*def\s+(\w+)\s*=\s*\{\s*$/) { print "def $1() {\n"; } else { print $_; } }
« Back