Title: [waffle-scm] [127] trunk/core/src/main/ruby: simplified loading and reloading of an application ruby controllers (scripts).

Diff

Modified: trunk/core/src/main/java/org/codehaus/waffle/context/pico/RubyScriptLoader.java (126 => 127)

--- trunk/core/src/main/java/org/codehaus/waffle/context/pico/RubyScriptLoader.java	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/core/src/main/java/org/codehaus/waffle/context/pico/RubyScriptLoader.java	2007-06-01 12:52:25 UTC (rev 127)
@@ -1,40 +1,27 @@
 package org.codehaus.waffle.context.pico;
 
 import org.jruby.Ruby;
+import org.jruby.RubyModule;
 import org.jruby.javasupport.JavaEmbedUtils;
-import org.jruby.runtime.builtin.IRubyObject;
 import org.picocontainer.Startable;
 
 import javax.servlet.ServletContext;
 
 public class RubyScriptLoader implements Startable {
-    public static final String RUBY_SCRIPT_PATH_KEY = "org.codehaus.waffle.ruby.path";
     public static final String DEFAULT_RUBY_SCRIPT_PATH = "/WEB-INF/classes/ruby/";
 
     private final ServletContext servletContext;
     private final Ruby runtime;
-    private final String rubyScriptPath;
 
     public RubyScriptLoader(ServletContext servletContext, Ruby runtime) {
         this.servletContext = servletContext;
         this.runtime = runtime;
-
-        String path = servletContext.getInitParameter(RUBY_SCRIPT_PATH_KEY);
-        
-        if(path == null) {
-            rubyScriptPath = DEFAULT_RUBY_SCRIPT_PATH;
-        } else {
-            rubyScriptPath = path;
-        }
     }
 
     public void start() {
-        runtime.getClassFromPath("Waffle::ScriptLoader")
-                .callMethod(runtime.getCurrentContext(), "load_all",
-                        new IRubyObject[]{
-                                JavaEmbedUtils.javaToRuby(runtime, rubyScriptPath),
-                                JavaEmbedUtils.javaToRuby(runtime, servletContext)
-                        });
+        RubyModule rubyModule = runtime.getClassFromPath("Waffle::ScriptLoader");
+        rubyModule.callMethod(runtime.getCurrentContext(), "servlet_context=", JavaEmbedUtils.javaToRuby(runtime, servletContext));
+        rubyModule.callMethod(runtime.getCurrentContext(), "load_all");
     }
 
     public void stop() {

Modified: trunk/core/src/main/java/org/codehaus/waffle/monitor/ConsoleMonitor.java (126 => 127)

--- trunk/core/src/main/java/org/codehaus/waffle/monitor/ConsoleMonitor.java	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/core/src/main/java/org/codehaus/waffle/monitor/ConsoleMonitor.java	2007-06-01 12:52:25 UTC (rev 127)
@@ -10,10 +10,10 @@
  *****************************************************************************/
 package org.codehaus.waffle.monitor;
 
-import java.util.Set;
-
 import org.codehaus.waffle.action.MethodDefinition;
 
+import java.util.Set;
+
 /**
  * Implementation of Monitor that writes to console
  * 
@@ -44,6 +44,5 @@
     public void methodNameResolved(String methodName, String methodKey, Set<String> keys) {
         write("Method name '"+methodName+"' found for key '"+methodKey+"' among keys "+keys);
     }
-
-
+    
 }

Modified: trunk/core/src/main/ruby/waffle.rb (126 => 127)

--- trunk/core/src/main/ruby/waffle.rb	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/core/src/main/ruby/waffle.rb	2007-06-01 12:52:25 UTC (rev 127)
@@ -4,22 +4,14 @@
 
   # load/require files
   class ScriptLoader
-    def ScriptLoader.load_all(prefix, servlet_context)
 
-      if (prefix.gsub!(/^dir:/, ''))
-        @@_ruby_script_path = prefix
-        ScriptLoader.load_from_file_system
-      else
-        servlet_context.getResourcePaths(prefix).each do |path| # this would be for production!!
-          require path.gsub(Regexp.new("^#{prefix}"), 'ruby/')
-        end
-      end
+    def ScriptLoader.servlet_context=(servlet_context)
+      @@_servlet_context = servlet_context
     end
 
-    def ScriptLoader.load_from_file_system
-      Dir.new(@@_ruby_script_path).each do |entry|
-        file = "#{@@_ruby_script_path}#{entry}"
-        load(file) if File.file?(file) # TODO need to ensure it is a *.rb file ... need to recursively search directories
+    def ScriptLoader.load_all(prefix="/WEB-INF/classes/ruby/")
+      @@_servlet_context.getResourcePaths(prefix).each do |path|
+        load @@_servlet_context.getRealPath("#{path}") # TODO need to support 'require' for production!!
       end
     end
   end

Modified: trunk/core/src/test/java/org/codehaus/waffle/context/pico/RubyScriptLoaderTest.java (126 => 127)

--- trunk/core/src/test/java/org/codehaus/waffle/context/pico/RubyScriptLoaderTest.java	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/core/src/test/java/org/codehaus/waffle/context/pico/RubyScriptLoaderTest.java	2007-06-01 12:52:25 UTC (rev 127)
@@ -1,6 +1,5 @@
 package org.codehaus.waffle.context.pico;
 
-import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JMock;
 import org.jmock.integration.junit4.JUnit4Mockery;
@@ -20,17 +19,14 @@
     public void startShouldFindAllResourcesAndLoadScriptsIntoRubyRuntime() {
         final ServletContext servletContext = context.mock(ServletContext.class);
 
-        context.checking(new Expectations() {{
-            one (servletContext).getInitParameter(RubyScriptLoader.RUBY_SCRIPT_PATH_KEY);
-            will(returnValue(null));
-        }});
-
         String script =
                 "module Waffle\n" +
                 "  class ScriptLoader\n" +
+                "    def ScriptLoader.servlet_context=(servlet_context)\n" +
+                "      $sc = servlet_context\n" +
+                "    end\n" +
                 "    def ScriptLoader.load_all(*args)\n" +
-                "      $arg1 = args[0]\n" +
-                "      $arg2 = args[1]\n" +
+                "      $arg1 = 'called'\n" +
                 "    end\n" +
                 "  end\n" +
                 "end\n";
@@ -42,7 +38,7 @@
         loader.start();
 
         // Ensure Waffle::ScriptLoader.load_all was called
-        Assert.assertEquals("/WEB-INF/classes/ruby/", JavaUtil.convertRubyToJava(runtime.evalScript("$arg1")));
-        Assert.assertEquals(servletContext, JavaUtil.convertRubyToJava(runtime.evalScript("$arg2")));
+        Assert.assertEquals("called", JavaUtil.convertRubyToJava(runtime.evalScript("$arg1")));
+        Assert.assertEquals(servletContext, JavaUtil.convertRubyToJava(runtime.evalScript("$sc")));
     }
 }

Modified: trunk/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/RubyScriptReloader.java (126 => 127)

--- trunk/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/RubyScriptReloader.java	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/examples/jruby-example/src/main/java/org/codehaus/waffle/example/jruby/RubyScriptReloader.java	2007-06-01 12:52:25 UTC (rev 127)
@@ -16,7 +16,7 @@
     }
 
     public void start() {
-        runtime.evalScript("Waffle::ScriptLoader.load_from_file_system");
+        runtime.evalScript("Waffle::ScriptLoader.load_all");
     }
 
     public void stop() {

Modified: trunk/examples/jruby-example/src/main/ruby/ruby/foo_bar.rb (126 => 127)

--- trunk/examples/jruby-example/src/main/ruby/ruby/foo_bar.rb	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/examples/jruby-example/src/main/ruby/ruby/foo_bar.rb	2007-06-01 12:52:25 UTC (rev 127)
@@ -4,13 +4,15 @@
     session[:bar] = 'foo'
     p session
     begin
-      <<-EOS
+      %{
         HELLO WORLD from the index method
         look up from pico: #{find_chicago}
         request: #{request}
         session: #{session}
         #{session['waffle.session.container']}
-      EOS
+
+        #{session.getServletContext().getRealPath('/WEB-INF/')}
+      }
     rescue Exception => e
       return e
     end

Modified: trunk/examples/jruby-example/src/main/webapp/WEB-INF/web.xml (126 => 127)

--- trunk/examples/jruby-example/src/main/webapp/WEB-INF/web.xml	2007-06-01 04:25:05 UTC (rev 126)
+++ trunk/examples/jruby-example/src/main/webapp/WEB-INF/web.xml	2007-06-01 12:52:25 UTC (rev 127)
@@ -8,7 +8,6 @@
   <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>
@@ -29,11 +28,6 @@
     <param-value>org.codehaus.waffle.controller.RubyControllerDefinitionFactory</param-value>
   </context-param>
 
-  <context-param>
-    <param-name>org.codehaus.waffle.ruby.path</param-name>
-    <param-value>dir:/Users/mward/development/waffle/examples/jruby-example/src/main/ruby/ruby/</param-value><!-- this needs to be more forgiving -->
-  </context-param>
-
   <listener>
     <listener-class>org.codehaus.waffle.context.pico.PicoWaffleContextListener</listener-class>
   </listener>


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to