Title: [waffle-scm] [142] trunk/core/src/main/java/org/codehaus/waffle/controller/RubyController.java: RubyController can handle action methods with arguments (following waffle '|' way)
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:

http://xircles.codehaus.org/manage_email

Reply via email to