Title: [waffle-scm] [894] sandbox/v2experiment/examples/jruby-example/src/main/webapp/WEB-INF: closer to getting the ruby example working

Diff

Modified: sandbox/v2experiment/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/JrubyExampleWebappComposer.java (893 => 894)

--- sandbox/v2experiment/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/JrubyExampleWebappComposer.java	2009-01-16 13:00:45 UTC (rev 893)
+++ sandbox/v2experiment/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/JrubyExampleWebappComposer.java	2009-01-17 21:44:07 UTC (rev 894)
@@ -1,3 +1,6 @@
+/*
+ * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
+ */
 package org.codehaus.waffle.example.jruby;
 
 import org.codehaus.waffle.example.jruby.dao.SimplePersonDAO;
@@ -3,4 +6,9 @@
 import org.codehaus.waffle.context.WaffleWebappComposer;
 import org.codehaus.waffle.ruby.registrar.pico.RubyScriptComponentAdapter;
+import org.codehaus.waffle.ruby.RubyWaffleWebappComposer;
+import org.codehaus.waffle.monitor.ActionMonitor;
+import org.codehaus.waffle.monitor.CommonsLoggingMonitor;
+import org.codehaus.waffle.monitor.ContextMonitor;
+import org.codehaus.waffle.monitor.BindMonitor;
 import org.picocontainer.MutablePicoContainer;
 
@@ -9,13 +17,13 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class JrubyExampleWebappComposer extends WaffleWebappComposer {
+public class JrubyExampleWebappComposer extends RubyWaffleWebappComposer {
 
-
     @SuppressWarnings({"unchecked"})
     @Override
     public void composeApplication(MutablePicoContainer picoContainer, ServletContext servletContext) {
         super.composeApplication(picoContainer, servletContext);
+
         picoContainer.addComponent("the_dao", SimplePersonDAO.class);
         picoContainer.addComponent("chicago", "bears");
 
@@ -28,6 +36,17 @@
         picoContainer.addAdapter(new RubyScriptComponentAdapter("person", "PersonController")); // register the controller!
     }
 
+    protected Class<? extends ActionMonitor> actionMonitor() {
+        return CommonsLoggingMonitor.class;
+    }
+
+    protected Class<? extends BindMonitor> bindMonitor() {
+        return CommonsLoggingMonitor.class;
+    }
+
+
+
+
     @Override
     public void composeRequest(MutablePicoContainer picoContainer) {
         super.composeRequest(picoContainer);

Modified: sandbox/v2experiment/examples/jruby-example/src/main/webapp/WEB-INF/web.xml (893 => 894)

--- sandbox/v2experiment/examples/jruby-example/src/main/webapp/WEB-INF/web.xml	2009-01-16 13:00:45 UTC (rev 893)
+++ sandbox/v2experiment/examples/jruby-example/src/main/webapp/WEB-INF/web.xml	2009-01-17 21:44:07 UTC (rev 894)
@@ -5,99 +5,69 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
-  <display-name>Waffle JRuby Example</display-name>
+    <display-name>Waffle JRuby Example</display-name>
 
-  <!-- 1. This is how an application registers its custom Registrar -->
-  <context-param>
-    <param-name>org.codehaus.waffle.registrar.Registrar</param-name>
-    <param-value>org.codehaus.waffle.example.jruby.JrubyExampleWebappComposer</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.monitor.RegistrarMonitor</param-name>
-    <param-value>org.codehaus.waffle.monitor.CommonsLoggingMonitor</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.monitor.ActionMonitor</param-name>
-    <param-value>org.codehaus.waffle.monitor.CommonsLoggingMonitor</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.monitor.ContextMonitor</param-name>
-    <param-value>org.codehaus.waffle.monitor.CommonsLoggingMonitor</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.monitor.BindMonitor</param-name>
-    <param-value>org.codehaus.waffle.monitor.CommonsLoggingMonitor</param-value>
-  </context-param>
+    <!-- 1. This is how PicoContainer-Web registers composition class -->
+    <context-param>
+        <param-name>webapp-composer-class</param-name>
+        <param-value>org.codehaus.waffle.example.jruby.JrubyExampleWebappComposer</param-value>
+    </context-param>
 
+    <!-- OPTIONAL: define a path to the ruby script directory (for development)
+         NOTE:  this path work with maven plugin filtering; you may need to adapt it your dev environment
+         Alternatively, you may define an env variable, eg  WAFFLE_RUBY_SCRIPT=dir:/absolute/path/to/ruby/script/dir
+    <context-param>
+      <param-name>org.codehaus.waffle.ruby.env</param-name>
+      <param-value>WAFFLE_RUBY_SCRIPT</param-value>
+    </context-param>
+    <context-param>
+      <param-name>org.codehaus.waffle.ruby.path</param-name>
+      <param-value>dir:src/main/ruby/</param-value>
+    </context-param>-->
 
-  <!-- Ruby Specific components -->
-  <context-param>
-    <param-name>org.codehaus.waffle.context.ContextContainerFactory</param-name>
-    <param-value>org.codehaus.waffle.context.pico.RubyPicoContextContainerFactory</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.bind.ControllerDataBinder</param-name>
-    <param-value>org.codehaus.waffle.bind.ognl.RubyControllerDataBinder</param-value>
-  </context-param>
-  <context-param>
-    <param-name>org.codehaus.waffle.controller.ControllerDefinitionFactory</param-name>
-    <param-value>org.codehaus.waffle.controller.RubyControllerDefinitionFactory</param-value>
-  </context-param>
+    <!-- 3. Waffle context listener (ServletContext and HttpSession) -->
+    <listener>
+        <listener-class>org.codehaus.waffle.servlet.WaffleListener</listener-class>
+    </listener>
 
-  <!-- OPTIONAL: define a path to the ruby script directory (for development)
-       NOTE:  this path work with maven plugin filtering; you may need to adapt it your dev environment 
-       Alternatively, you may define an env variable, eg  WAFFLE_RUBY_SCRIPT=dir:/absolute/path/to/ruby/script/dir
-  <context-param>
-    <param-name>org.codehaus.waffle.ruby.env</param-name>
-    <param-value>WAFFLE_RUBY_SCRIPT</param-value>
-  </context-param> 
-  <context-param>
-    <param-name>org.codehaus.waffle.ruby.path</param-name>
-    <param-value>dir:src/main/ruby/</param-value>
-  </context-param>-->
-  
-  <listener>
-    <listener-class>org.codehaus.waffle.context.pico.PicoWaffleContextListener</listener-class>
-  </listener>
+    <!-- 4. Waffle request filter (responsible for request level context) -->
+    <filter>
+        <filter-name>WaffleRequestFilter</filter-name>
+        <filter-class>org.codehaus.waffle.servlet.WaffleServlet$ServletFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>WaffleRequestFilter</filter-name>
+        <url-pattern>*.waffle</url-pattern>
+    </filter-mapping>
 
-  <!-- 4. Waffle request filter (responsible for request level context) -->
-  <filter>
-    <filter-name>WaffleRequestFilter</filter-name>
-    <filter-class>org.codehaus.waffle.context.WaffleRequestFilter</filter-class>
-  </filter>
-  <filter-mapping>
-    <filter-name>WaffleRequestFilter</filter-name>
-    <url-pattern>*.waffle</url-pattern>
-  </filter-mapping>
+    <!-- 5. Register Waffle's FrontController servlet -->
+    <servlet>
+        <servlet-name>waffle</servlet-name>
+        <servlet-class>org.codehaus.waffle.servlet.WaffleServlet</servlet-class>
+        <init-param>
+            <param-name>view.suffix</param-name>
+            <param-value>.rhtml</param-value>
+        </init-param>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+    <servlet>
+        <servlet-name>rhtml</servlet-name>
+        <servlet-class>org.codehaus.waffle.ruby.servlet.RhtmlServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
 
-  <!-- 5. Register Waffle's FrontController servlet -->
-  <servlet>
-    <servlet-name>waffle</servlet-name>
-    <servlet-class>org.codehaus.waffle.servlet.WaffleServlet</servlet-class>
-    <init-param>
-      <param-name>view.suffix</param-name>
-      <param-value>.rhtml</param-value>
-    </init-param>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-  <servlet>
-    <servlet-name>rhtml</servlet-name>
-    <servlet-class>org.codehaus.waffle.servlet.RhtmlServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
+    <servlet-mapping>
+        <servlet-name>waffle</servlet-name>
+        <url-pattern>*.waffle</url-pattern>
+    </servlet-mapping>
 
-  <servlet-mapping>
-    <servlet-name>waffle</servlet-name>
-    <url-pattern>*.waffle</url-pattern>
-  </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>rhtml</servlet-name>
+        <url-pattern>*.rhtml</url-pattern>
+    </servlet-mapping>
 
-  <servlet-mapping>
-    <servlet-name>rhtml</servlet-name>
-    <url-pattern>*.rhtml</url-pattern>
-  </servlet-mapping>
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+    </welcome-file-list>
 
-  <welcome-file-list>
-    <welcome-file>index.html</welcome-file>
-  </welcome-file-list>
-
 </web-app>

Copied: sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyCompatibilityTest.java (from rev 863, sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyRegistrarTest.java) (0 => 894)

--- sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyCompatibilityTest.java	                        (rev 0)
+++ sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyCompatibilityTest.java	2009-01-17 21:44:07 UTC (rev 894)
@@ -0,0 +1,197 @@
+package org.codehaus.waffle.example.jruby;
+
+import org.jruby.Ruby;
+import org.jruby.RubyArray;
+import org.jruby.RubyModule;
+import org.jruby.javasupport.JavaEmbedUtils;
+import org.jruby.javasupport.JavaUtil;
+import org.jruby.runtime.builtin.IRubyObject;
+import org.jruby.runtime.builtin.InstanceVariables;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+public class RubyCompatibilityTest {
+
+//    Need to create an interface that sets the PicoContainer instance onto the Ruby Controller
+//
+//    WaffleRubyControllerProxy.__setWaffleContext(...PicoContainer...)
+//
+//    An associated module will be mixed in with the controller
+//
+//    module Waffle
+//        module Controller
+//           def __waffle_context=(waffle_context)
+//                @@__waffle_context = waffle_context
+//           end
+//
+//           def method_missing
+//                check the waffle context ...
+//           end
+//
+//           .. params, request, response
+//        end
+//
+//    end
+//
+//    class FoobarController
+//
+//        def index
+//
+//        end
+//
+//    end
+
+
+    // sandbox test for figuring out JRuby
+    @Test
+    public void canEvalRubyScript() {
+        Ruby runtime = Ruby.newInstance();
+
+        String script =
+                "class Foo\n" +
+                "  attr_accessor :salmon\n" +
+                "  def initialize\n" +
+                "    @salmon = 'fish'\n" +
+                "  end\n" +
+                "  def bar\n" +
+                "    return \"HELLO #{salmon}!\"\n" +
+                "  end\n" +
+                "end\n";
+
+        runtime.evalScriptlet(script);
+
+        IRubyObject foo = runtime.evalScriptlet("foo = Foo.new()");
+        foo.callMethod(runtime.getCurrentContext(), "bar");
+        IRubyObject salmon = runtime.evalScriptlet("foo.salmon");
+
+        RubyArray rubyArray = (RubyArray) runtime.evalScriptlet("foo.instance_variables");
+        assertEquals("@salmon", rubyArray.get(0));
+
+        InstanceVariables instanceVariables = foo.getInstanceVariables();
+        assertEquals(JavaUtil.convertJavaToRuby(runtime, "fish"), instanceVariables.getInstanceVariable("@salmon"));
+
+        assertEquals("HELLO fish!", runtime.evalScriptlet("foo.bar").toString());
+        foo.callMethod(runtime.getCurrentContext(), "salmon=", JavaUtil.convertJavaToRuby(runtime, "shark"));
+        assertEquals("HELLO shark!", runtime.evalScriptlet("foo.bar").toString());
+        
+        script =
+                "class Foo\n" +
+                "  def bar\n" +
+                "    \"GOODBYE\"\n" +
+                "  end\n"+
+                "end";
+        runtime.evalScriptlet(script);
+        assertEquals("GOODBYE", runtime.evalScriptlet("foo.bar").toString());
+
+        String module =
+                "module Calculator\n" +
+                "def one\n" +
+                "    \"xxxx #...@salmon}\"\n" +
+                "end\n" +
+                "end\n" +
+                "\n" +
+                "Calculator # return the created Module";
+
+        IRubyObject the_module = runtime.evalScriptlet(module);
+        foo.callMethod(runtime.getCurrentContext(), "extend", the_module);
+        runtime.evalScriptlet("p foo.one");
+
+        Object javaX = JavaUtil.convertRubyToJava(rubyArray);
+        Object javaObj = JavaUtil.convertRubyToJava(salmon);
+
+        System.out.println("x = " + javaX);
+        System.out.println("javaObj = " + javaObj);
+    }
+
+    @Test
+    public void canExposeFieldsAsInstanceVariables() {
+        Ruby runtime = Ruby.newInstance();
+
+        String script =
+                "require 'erb'\n" +
+                "require 'java'\n" +
+                "include_class java.util.ArrayList\n" +
+                "f = ArrayList.new\n" +
+                "f.instance_variable_get(:@java_object)";
+
+        IRubyObject rubyObject = runtime.evalScriptlet(script);
+
+        System.out.println("rubyObject = " + rubyObject);
+
+        RubyModule erb = runtime.getClassFromPath("ERB");
+        System.out.println("erb = " + erb);
+
+        IRubyObject iRubyObject = (IRubyObject) JavaEmbedUtils.invokeMethod(runtime, erb, "new",
+                new Object[] {JavaEmbedUtils.javaToRuby(runtime, "<html>foobar  <%= @java_object %></html>")}, IRubyObject.class);
+
+        String o = (String)JavaEmbedUtils.invokeMethod(runtime, iRubyObject, "result", new Object[] {runtime.evalScriptlet("f.send :binding")}, String.class);
+        System.out.println("o = " + o);
+    }
+
+    @Test
+    public void testEvalRubyErb() {
+       String script =
+               "require \"erb\"\n" +
+               "\n" +
+               "  # Build template data class.\n" +
+               "  class Product\n" +
+               "    def initialize( code, name, desc, cost)\n" +
+               "      @code = code\n" +
+               "      @name = name\n" +
+               "      @desc = desc\n" +
+               "      @cost = cost\n" +
+               "\n" +
+               "      @features = [ ]\n" +
+               "    end\n" +
+               "\n" +
+               "    def add_feature( feature )\n" +
+               "      @features << feature\n" +
+               "    end\n" +
+               "\n" +
+               "    # ...\n" +
+               "  end\n" +
+               "template = %{\n" +
+               "    <html>\n" +
+               "      <head><title>Ruby Toys -- <%= @name %></title></head>\n" +
+               "      <body>\n" +
+               "\n" +
+               "        <h1><%= @name %> (<%= @code %>)</h1>\n" +
+               "        <p><%= @desc %></p>\n" +
+               "\n" +
+               "        <ul>\n" +
+               "          <% @features.each do |f| %>\n" +
+               "            <li><b><%= f %></b></li>\n" +
+               "          <% end %>\n" +
+               "        </ul>\n" +
+               "\n" +
+               "        <p>\n" +
+               "          <% if @cost < 10 %>\n" +
+               "            <b>Only <%= @cost %>!!!</b>\n" +
+               "          <% else %>\n" +
+               "             Call for a price, today!\n" +
+               "          <% end %>\n" +
+               "        </p>\n" +
+               "\n" +
+               "      </body>\n" +
+               "    </html>\n" +
+               "  }.gsub(/^  /, '')\n" +
+               "\n" +
+               "rhtml = ERB.new(template)\n" +
+               "# Set up template data.\n" +
+               "  toy = Product.new( \"TZ-1002\",\n" +
+               "                     \"Rubysapien\",\n" +
+               "                     \"Geek's Best Friend!  Responds to Ruby commands...\",\n" +
+               "                     999.95 )\n" +
+               "  toy.add_feature(\"Listens for verbal commands in the Ruby language!\")\n" +
+               "  toy.add_feature(\"Ignores Perl, Java, and all C variants.\")\n" +
+               "  toy.add_feature(\"Karate-Chop Action!!!\")\n" +
+               "  toy.add_feature(\"Matz signature on left leg.\")\n" +
+               "  toy.add_feature(\"Gem studded eyes... Rubies, of course!\")\n" +
+               "\n" +
+               "  # Produce result.\n" +
+               "rhtml.run(toy.send(:binding))";
+
+        Ruby runtime = Ruby.newInstance();
+        runtime.evalScriptlet(script);
+    }
+}

Deleted: sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyRegistrarTest.java (893 => 894)

--- sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyRegistrarTest.java	2009-01-16 13:00:45 UTC (rev 893)
+++ sandbox/v2experiment/examples/jruby-example/src/test/java/org/codehaus/waffle/example/jruby/RubyRegistrarTest.java	2009-01-17 21:44:07 UTC (rev 894)
@@ -1,197 +0,0 @@
-package org.codehaus.waffle.example.jruby;
-
-import org.jruby.Ruby;
-import org.jruby.RubyArray;
-import org.jruby.RubyModule;
-import org.jruby.javasupport.JavaEmbedUtils;
-import org.jruby.javasupport.JavaUtil;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.builtin.InstanceVariables;
-import static org.junit.Assert.assertEquals;
-import org.junit.Test;
-
-public class RubyRegistrarTest {
-
-//    Need to create an interface that sets the PicoContainer instance onto the Ruby Controller
-//
-//    WaffleRubyControllerProxy.__setWaffleContext(...PicoContainer...)
-//
-//    An associated module will be mixed in with the controller
-//
-//    module Waffle
-//        module Controller
-//           def __waffle_context=(waffle_context)
-//                @@__waffle_context = waffle_context
-//           end
-//
-//           def method_missing
-//                check the waffle context ...
-//           end
-//
-//           .. params, request, response
-//        end
-//
-//    end
-//
-//    class FoobarController
-//
-//        def index
-//
-//        end
-//
-//    end
-
-
-    // sandbox test for figuring out JRuby
-    @Test
-    public void canEvalRubyScript() {
-        Ruby runtime = Ruby.newInstance();
-
-        String script =
-                "class Foo\n" +
-                "  attr_accessor :salmon\n" +
-                "  def initialize\n" +
-                "    @salmon = 'fish'\n" +
-                "  end\n" +
-                "  def bar\n" +
-                "    return \"HELLO #{salmon}!\"\n" +
-                "  end\n" +
-                "end\n";
-
-        runtime.evalScriptlet(script);
-
-        IRubyObject foo = runtime.evalScriptlet("foo = Foo.new()");
-        foo.callMethod(runtime.getCurrentContext(), "bar");
-        IRubyObject salmon = runtime.evalScriptlet("foo.salmon");
-
-        RubyArray rubyArray = (RubyArray) runtime.evalScriptlet("foo.instance_variables");
-        assertEquals("@salmon", rubyArray.get(0));
-
-        InstanceVariables instanceVariables = foo.getInstanceVariables();
-        assertEquals(JavaUtil.convertJavaToRuby(runtime, "fish"), instanceVariables.getInstanceVariable("@salmon"));
-
-        assertEquals("HELLO fish!", runtime.evalScriptlet("foo.bar").toString());
-        foo.callMethod(runtime.getCurrentContext(), "salmon=", JavaUtil.convertJavaToRuby(runtime, "shark"));
-        assertEquals("HELLO shark!", runtime.evalScriptlet("foo.bar").toString());
-        
-        script =
-                "class Foo\n" +
-                "  def bar\n" +
-                "    \"GOODBYE\"\n" +
-                "  end\n"+
-                "end";
-        runtime.evalScriptlet(script);
-        assertEquals("GOODBYE", runtime.evalScriptlet("foo.bar").toString());
-
-        String module =
-                "module Calculator\n" +
-                "def one\n" +
-                "    \"xxxx #...@salmon}\"\n" +
-                "end\n" +
-                "end\n" +
-                "\n" +
-                "Calculator # return the created Module";
-
-        IRubyObject the_module = runtime.evalScriptlet(module);
-        foo.callMethod(runtime.getCurrentContext(), "extend", the_module);
-        runtime.evalScriptlet("p foo.one");
-
-        Object javaX = JavaUtil.convertRubyToJava(rubyArray);
-        Object javaObj = JavaUtil.convertRubyToJava(salmon);
-
-        System.out.println("x = " + javaX);
-        System.out.println("javaObj = " + javaObj);
-    }
-
-    @Test
-    public void canExposeFieldsAsInstanceVariables() {
-        Ruby runtime = Ruby.newInstance();
-
-        String script =
-                "require 'erb'\n" +
-                "require 'java'\n" +
-                "include_class java.util.ArrayList\n" +
-                "f = ArrayList.new\n" +
-                "f.instance_variable_get(:@java_object)";
-
-        IRubyObject rubyObject = runtime.evalScriptlet(script);
-
-        System.out.println("rubyObject = " + rubyObject);
-
-        RubyModule erb = runtime.getClassFromPath("ERB");
-        System.out.println("erb = " + erb);
-
-        IRubyObject iRubyObject = (IRubyObject) JavaEmbedUtils.invokeMethod(runtime, erb, "new",
-                new Object[] {JavaEmbedUtils.javaToRuby(runtime, "<html>foobar  <%= @java_object %></html>")}, IRubyObject.class);
-
-        String o = (String)JavaEmbedUtils.invokeMethod(runtime, iRubyObject, "result", new Object[] {runtime.evalScriptlet("f.send :binding")}, String.class);
-        System.out.println("o = " + o);
-    }
-
-    @Test
-    public void testEvalRubyErb() {
-       String script =
-               "require \"erb\"\n" +
-               "\n" +
-               "  # Build template data class.\n" +
-               "  class Product\n" +
-               "    def initialize( code, name, desc, cost)\n" +
-               "      @code = code\n" +
-               "      @name = name\n" +
-               "      @desc = desc\n" +
-               "      @cost = cost\n" +
-               "\n" +
-               "      @features = [ ]\n" +
-               "    end\n" +
-               "\n" +
-               "    def add_feature( feature )\n" +
-               "      @features << feature\n" +
-               "    end\n" +
-               "\n" +
-               "    # ...\n" +
-               "  end\n" +
-               "template = %{\n" +
-               "    <html>\n" +
-               "      <head><title>Ruby Toys -- <%= @name %></title></head>\n" +
-               "      <body>\n" +
-               "\n" +
-               "        <h1><%= @name %> (<%= @code %>)</h1>\n" +
-               "        <p><%= @desc %></p>\n" +
-               "\n" +
-               "        <ul>\n" +
-               "          <% @features.each do |f| %>\n" +
-               "            <li><b><%= f %></b></li>\n" +
-               "          <% end %>\n" +
-               "        </ul>\n" +
-               "\n" +
-               "        <p>\n" +
-               "          <% if @cost < 10 %>\n" +
-               "            <b>Only <%= @cost %>!!!</b>\n" +
-               "          <% else %>\n" +
-               "             Call for a price, today!\n" +
-               "          <% end %>\n" +
-               "        </p>\n" +
-               "\n" +
-               "      </body>\n" +
-               "    </html>\n" +
-               "  }.gsub(/^  /, '')\n" +
-               "\n" +
-               "rhtml = ERB.new(template)\n" +
-               "# Set up template data.\n" +
-               "  toy = Product.new( \"TZ-1002\",\n" +
-               "                     \"Rubysapien\",\n" +
-               "                     \"Geek's Best Friend!  Responds to Ruby commands...\",\n" +
-               "                     999.95 )\n" +
-               "  toy.add_feature(\"Listens for verbal commands in the Ruby language!\")\n" +
-               "  toy.add_feature(\"Ignores Perl, Java, and all C variants.\")\n" +
-               "  toy.add_feature(\"Karate-Chop Action!!!\")\n" +
-               "  toy.add_feature(\"Matz signature on left leg.\")\n" +
-               "  toy.add_feature(\"Gem studded eyes... Rubies, of course!\")\n" +
-               "\n" +
-               "  # Produce result.\n" +
-               "rhtml.run(toy.send(:binding))";
-
-        Ruby runtime = Ruby.newInstance();
-        runtime.evalScriptlet(script);
-    }
-}

Modified: sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java (893 => 894)

--- sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	2009-01-16 13:00:45 UTC (rev 893)
+++ sandbox/v2experiment/waffle-core/src/main/java/org/codehaus/waffle/context/WaffleWebappComposer.java	2009-01-17 21:44:07 UTC (rev 894)
@@ -1,3 +1,6 @@
+/*
+ * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
+ */
 package org.codehaus.waffle.context;
 
 import org.picocontainer.web.WebappComposer;
@@ -48,6 +51,10 @@
 
 import javax.servlet.ServletContext;
 
+/**
+ * @author Michael Ward
+ * @author Mauro Talevi
+ */
 public abstract class WaffleWebappComposer implements WebappComposer {
 
     private ParameterResolver parameterResolver;
@@ -80,7 +87,6 @@
         picoContainer.addComponent(ViewResolver.class, viewResolver());
         picoContainer.addComponent(ParameterResolver.class, parameterResolver());
 
-
         parameterResolver = picoContainer.getComponent(ParameterResolver.class);
 
     }
@@ -186,7 +192,6 @@
         return DefaultErrorsContext.class;
     }
 
-
     protected Parameter[] picoParameters(Object... parameters) {
         if (parameters.length == 0) {
             return null; // pico expects a null when no parameters
@@ -199,6 +204,4 @@
         return picoParameters;
     }
 
-
-
 }

Added: sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/RubyWaffleWebappComposer.java (0 => 894)

--- sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/RubyWaffleWebappComposer.java	                        (rev 0)
+++ sandbox/v2experiment/waffle-ruby/src/main/java/org/codehaus/waffle/ruby/RubyWaffleWebappComposer.java	2009-01-17 21:44:07 UTC (rev 894)
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) terms as published in http://waffle.codehaus.org/license.html
+ */
+package org.codehaus.waffle.ruby;
+
+import org.codehaus.waffle.context.WaffleWebappComposer;
+import org.codehaus.waffle.bind.ControllerDataBinder;
+import org.codehaus.waffle.ruby.bind.ognl.RubyControllerDataBinder;
+import org.codehaus.waffle.ruby.controller.RubyControllerDefinitionFactory;
+import org.codehaus.waffle.ruby.context.pico.RubyScriptLoader;
+import org.codehaus.waffle.controller.ControllerDefinitionFactory;
+import org.codehaus.waffle.WaffleException;
+import org.picocontainer.MutablePicoContainer;
+import static org.picocontainer.Characteristics.CACHE;
+import org.jruby.Ruby;
+
+import javax.servlet.ServletContext;
+import java.util.ArrayList;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+
+/**
+ * @author Michael Ward
+ * @author Mauro Talevi
+ */
+public class RubyWaffleWebappComposer extends WaffleWebappComposer {
+
+    protected Class<? extends ControllerDataBinder> controllerDataBinder() {
+        return RubyControllerDataBinder.class;    
+    }
+
+    protected Class<? extends ControllerDefinitionFactory> controllerDefinitionFactory() {
+        return RubyControllerDefinitionFactory.class;    
+    }
+
+    public void composeApplication(MutablePicoContainer picoContainer, ServletContext servletContext) {
+        super.composeApplication(picoContainer, servletContext);
+
+        Ruby runtime = Ruby.newInstance();
+        runtime.getLoadService().init(new ArrayList<Object>()); // this must be called, else we won't be able to load
+                                                                // scripts!!
+        loadRubyScriptFromClassLoader("org/codehaus/waffle/waffle_erb.rb", runtime);
+        loadRubyScriptFromClassLoader("org/codehaus/waffle/waffle.rb", runtime);
+
+        // I'd prefer to do the following:
+        // runtime.evalScript("require 'string'\nrequire 'waffle'"); // load Waffle custom scripts
+        //
+        // but JRuby fails when web app is reloaded...
+        // <script>:1:in `require': JAR entry string.rb not found in ~/jruby-example/exploded/WEB-INF/lib/core.jar
+        // (IOError)
+
+        picoContainer.addComponent(Ruby.class, runtime);
+        picoContainer.as(CACHE).addComponent(RubyScriptLoader.class);
+
+    }
+
+    private void loadRubyScriptFromClassLoader(String fileName, Ruby runtime) {
+        BufferedReader bufferedReader = null;
+        InputStream inputStream = null;
+
+        try {
+            inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
+            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+            StringBuilder script = new StringBuilder();
+            String line = bufferedReader.readLine();
+
+            while (line != null) {
+                script.append(line).append("\n");
+                line = bufferedReader.readLine();
+            }
+
+            runtime.executeScript(script.toString(), fileName);
+        } catch (IOException e) {
+            throw new WaffleException(e);
+        } finally {
+            try {
+                if (inputStream != null)
+                    inputStream.close();
+                if (bufferedReader != null)
+                    bufferedReader.close();
+            } catch (IOException ignore) {
+                // ignore
+            }
+        }
+    }
+
+
+}


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to