- Revision
- 142
- Author
- mward
- Date
- 2007-06-05 18:03:22 -0500 (Tue, 05 Jun 2007)
Log Message
RubyController can handle action methods with arguments (following waffle '|' way)
Modified Paths
Diff
Modified: trunk/core/src/main/java/org/codehaus/waffle/controller/RubyController.java (141 => 142)
--- trunk/core/src/main/java/org/codehaus/waffle/controller/RubyController.java 2007-06-05 23:01:47 UTC (rev 141) +++ trunk/core/src/main/java/org/codehaus/waffle/controller/RubyController.java 2007-06-05 23:03:22 UTC (rev 142) @@ -2,10 +2,15 @@ import org.jruby.Ruby; import org.jruby.javasupport.JavaUtil; +import org.jruby.javasupport.JavaEmbedUtils; import org.jruby.runtime.builtin.IRubyObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.ArrayList; /** * This is a wrapper for the underlying ruby script @@ -26,11 +31,28 @@ return rubyObject; } - // todo need to ensure this doesn't allow non-public methods to be called + // todo need to ensure this doesn't allow non-public methods to be called ... NEED test in general public Object execute(HttpServletRequest request, HttpServletResponse response) { Ruby runtime = rubyObject.getRuntime(); - IRubyObject result = rubyObject.callMethod(runtime.getCurrentContext(), methodName); + IRubyObject result; + String[] strings = methodName.split("\\|"); + + if(strings.length == 0) { + result = rubyObject.callMethod(runtime.getCurrentContext(), methodName); + } else { + Iterator<String> iterator = Arrays.asList(strings).iterator(); + + methodName = iterator.next(); + List<IRubyObject> arguments = new ArrayList<IRubyObject>(); + + while (iterator.hasNext()) { + arguments.add(JavaEmbedUtils.javaToRuby(runtime, iterator.next())); + } + + result = rubyObject.callMethod(runtime.getCurrentContext(), methodName, arguments.toArray(new IRubyObject[0])); + } + return JavaUtil.convertRubyToJava(result); } }
To unsubscribe from this list please visit:
