[jruby-embed~sources:75f8e466] bug fix for jruby home setting and RubyNil conversion

  • From: yokolet@kenai.com
  • To: commits@jruby-embed.kenai.com
  • Subject: [jruby-embed~sources:75f8e466] bug fix for jruby home setting and RubyNil conversion
  • Date: Sun, 1 Nov 2009 18:49:52 +0000

Project:    jruby-embed
Repository: sources
Revision:   75f8e4660d2d991f13af4e222170608eec28240a
Author:     yokolet
Date:       2009-09-29 23:51:12 UTC
Link:       

Log Message:
------------
bug fix for jruby home setting and RubyNil conversion


Revisions:
----------
75f8e4660d2d991f13af4e222170608eec28240a


Modified Paths:
---------------
src/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java
src/org/jruby/embed/jsr223/JRubyCompiledScript.java
src/org/jruby/embed/util/SystemPropertyCatcher.java
test/org/jruby/embed/bsf/JRubyEngineTest.java
test/org/jruby/embed/jsr223/JRubyEngineTest.java


Diffs:
------
diff --git a/src/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java 
b/src/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java
index be0dce1..54556b7 100644
--- a/src/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java
+++ b/src/org/jruby/embed/internal/EmbedRubyObjectAdapterImpl.java
@@ -36,6 +36,7 @@ import org.jruby.Ruby;
 import org.jruby.RubyException;
 import org.jruby.RubyInteger;
 import org.jruby.RubyModule;
+import org.jruby.RubyNil;
 import org.jruby.RubyObjectAdapter;
 import org.jruby.RubyString;
 import org.jruby.embed.BiVariable;
@@ -311,9 +312,12 @@ public class EmbedRubyObjectAdapterImpl implements 
EmbedRubyObjectAdapter {
             container.getVarMap().inject(scope, 0, rubyReceiver);
             runtime.getCurrentContext().pushScope(scope);
             IRubyObject result = callEachType(method, rubyReceiver, 
methodName, block, args);
-            Object ret = JavaEmbedUtils.rubyToJava(runtime, result, 
returnType);
             container.getVarMap().retrieve(rubyReceiver);
-            return ret != null ? returnType.cast(ret) : null;
+            if (!(result instanceof RubyNil)) {
+                Object ret = JavaEmbedUtils.rubyToJava(runtime, result, 
returnType);
+                return ret != null ? returnType.cast(ret) : null;
+            }
+            return null;
         } catch (RaiseException e) {
             RubyException re = e.getException();
             runtime.printError(re);
diff --git a/src/org/jruby/embed/jsr223/JRubyCompiledScript.java 
b/src/org/jruby/embed/jsr223/JRubyCompiledScript.java
index 1fc6ed3..e1aefd3 100644
--- a/src/org/jruby/embed/jsr223/JRubyCompiledScript.java
+++ b/src/org/jruby/embed/jsr223/JRubyCompiledScript.java
@@ -34,6 +34,7 @@ import javax.script.CompiledScript;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
+import org.jruby.RubyNil;
 import org.jruby.embed.ScriptingContainer;
 import org.jruby.javasupport.JavaEmbedUtils;
 import org.jruby.javasupport.JavaEmbedUtils.EvalUnit;
@@ -66,7 +67,10 @@ public class JRubyCompiledScript extends CompiledScript {
     public Object eval(ScriptContext context) throws ScriptException {
         try {
             IRubyObject ret = unit.run();
-            return JavaEmbedUtils.rubyToJava(ret);
+            if (!(ret instanceof RubyNil)) {
+                return JavaEmbedUtils.rubyToJava(ret);
+            }
+            return null;
         } catch (RuntimeException e) {
             throw new ScriptException(e);
         }
diff --git a/src/org/jruby/embed/util/SystemPropertyCatcher.java 
b/src/org/jruby/embed/util/SystemPropertyCatcher.java
index 24a20d1..efa986e 100644
--- a/src/org/jruby/embed/util/SystemPropertyCatcher.java
+++ b/src/org/jruby/embed/util/SystemPropertyCatcher.java
@@ -30,6 +30,7 @@
 package org.jruby.embed.util;
 
 import java.net.URISyntaxException;
+import java.net.URL;
 import org.jruby.embed.PropertyName;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -102,21 +103,31 @@ public class SystemPropertyCatcher {
     }
 
     public static void setJRubyHome(ScriptingContainer container) throws 
URISyntaxException {
-        String[] possibleHomes = {
-            System.getenv("JRUBY_HOME"),
-            System.getProperty("jruby.home"),
-            findFromJar(container)
-        };
-        for (int i=0; i<possibleHomes.length; i++) {
-            if (possibleHomes[i] != null) {
-                
container.getProvider().getRubyInstanceConfig().setJRubyHome(possibleHomes[i]);
-                break;
-            }
+        String jrubyhome = findJRubyHome(container);
+        if (jrubyhome != null) {
+            
container.getProvider().getRubyInstanceConfig().setJRubyHome(jrubyhome);
+        }
+    }
+
+    private static String findJRubyHome(ScriptingContainer container) throws 
URISyntaxException {
+        String jrubyhome;
+        if ((jrubyhome = System.getenv("JRUBY_HOME")) != null) {
+            return jrubyhome;
+        } else if ((jrubyhome = System.getProperty("jruby.home")) != null) {
+            return jrubyhome;
+        } else if ((jrubyhome = findFromJar(container)) != null) {
+            return jrubyhome;
+        } else {
+            return null;
         }
     }
 
     private static String findFromJar(ScriptingContainer container) throws 
URISyntaxException {
-        String location = 
container.getClass().getResource("/META-INF/jruby.home/bin/jruby").toURI().getSchemeSpecificPart();
+        URL resource = 
container.getClass().getResource("/META-INF/jruby.home/bin/jruby");
+        if (resource == null) {
+            return null;
+        }
+        String location = resource.toURI().getSchemeSpecificPart();
         if (location == null) {
             return null;
         }
diff --git a/test/org/jruby/embed/bsf/JRubyEngineTest.java 
b/test/org/jruby/embed/bsf/JRubyEngineTest.java
index d78da5e..5dbbb74 100644
--- a/test/org/jruby/embed/bsf/JRubyEngineTest.java
+++ b/test/org/jruby/embed/bsf/JRubyEngineTest.java
@@ -85,11 +85,11 @@ public class JRubyEngineTest {
         Object result = instance.apply(file, line, col, funcBody, 
paramNames, args);
         assertEquals(expResult, result);
 
-        expResult = 144L;
+        expResult = new Short("144");
         result = instance.apply("<script>", 0, 0, "x=144", null, null);
         assertEquals(expResult, result);
         System.out.println(result.toString());
-        expResult = 12.0;
+        expResult = new Float(12.0);
         result = instance.apply("<script>", 0, 0, "Math.sqrt x", null, null);
         assertEquals(expResult, result);
         System.out.println(result.toString());
@@ -218,12 +218,12 @@ public class JRubyEngineTest {
         // Radium
         manager.declareBean("h", 1599, Long.class);
         result = instance.call(recv, method, args);
-        assertTrue(Math.abs((Double)result - 6.482) < 0.001);
+        assertTrue(Math.abs((Float)result - 6.482) < 0.001);
         System.out.println(args[0] + "g Radium to decay to " + result + "g 
in " + args[1] + " years");
         method = "years_to_amount";
         args[0] = 10.0; args[1] = 1.0;
         result = instance.call(recv, method, args);
-        assertTrue(Math.abs((Double)result - 5311.8) < 0.1);
+        assertTrue(Math.abs((Float)result - 5311.8) < 0.1);
         System.out.println(args[0] + "g Radium to decay to " + args[1] + "g 
in " + result + " years");
     }
 
@@ -307,7 +307,7 @@ public class JRubyEngineTest {
         // Plutonium
         manager.declareBean("h", 24100, Long.class);
         Object result = instance.call(receiver, method, args);
-        assertTrue(Math.abs((Double)result - 9.716) < 0.001);
+        assertTrue(Math.abs((Float)result - 9.716) < 0.001);
         System.out.println(args[0] + "g Plutonium to decay to " + result + 
"g in " + args[1] + " years");
     }
 
diff --git a/test/org/jruby/embed/jsr223/JRubyEngineTest.java 
b/test/org/jruby/embed/jsr223/JRubyEngineTest.java
index 68e5112..6b15a79 100644
--- a/test/org/jruby/embed/jsr223/JRubyEngineTest.java
+++ b/test/org/jruby/embed/jsr223/JRubyEngineTest.java
@@ -158,7 +158,7 @@ public class JRubyEngineTest {
         List<Double> expResult = new ArrayList();
         expResult.add(3.392);
         expResult.add(8.571);
-        List<Double> result = (List<Double>) instance.eval(script, context);
+        List<Float> result = (List<Float>) instance.eval(script, context);
         for (int i=0; i<result.size(); i++) {
             System.out.println(result.get(i));
             assertEquals(expResult.get(i), result.get(i), 0.01);
@@ -171,7 +171,7 @@ public class JRubyEngineTest {
             "get_area";
         context.setAttribute("x", 1.0, ScriptContext.ENGINE_SCOPE);
         context.setAttribute("y", 3.0, ScriptContext.ENGINE_SCOPE);
-        Double result2 = (Double) instance.eval(script, context);
+        Float result2 = (Float) instance.eval(script, context);
         System.out.println("area(1 x 3): " + result2);
         assertEquals(expResult.get(0), result2, 0.01);
     }
@@ -195,7 +195,7 @@ public class JRubyEngineTest {
         context.setAttribute("@x", 1.0, ScriptContext.ENGINE_SCOPE);
         context.setAttribute("@y", 3.0, ScriptContext.ENGINE_SCOPE);
         Double expResult = 3.392;
-        Double result = (Double) instance.eval(script, context);
+        Float result = (Float) instance.eval(script, context);
         assertEquals(expResult, result, 0.01);
         System.out.println("area(1 x 3): " + result);
     }
@@ -217,7 +217,7 @@ public class JRubyEngineTest {
         List<Double> expResult = new ArrayList();
         expResult.add(10.283);
         expResult.add(12.283);
-        List<Double> result = (List<Double>) instance.eval(reader, context);
+        List<Float> result = (List<Float>) instance.eval(reader, context);
         for (int i=0; i<result.size(); i++) {
             System.out.println(result.get(i));
             assertEquals(expResult.get(i), result.get(i), 0.01);
@@ -237,9 +237,9 @@ public class JRubyEngineTest {
         instance.eval("p=9.0");
         instance.eval("q = Math.sqrt p");
         instance.eval("puts \"square root of #{p} is #{q}\"");
-        Object expResult = 3.0;
-        Object result = instance.get("q");
-        assertEquals(expResult, result);
+        Double expResult = 3.0;
+        Float result = (Float) instance.get("q");
+        assertEquals(expResult, result, 0.01);
     }
 
     /**
@@ -252,7 +252,7 @@ public class JRubyEngineTest {
         JRubyEngineFactory factory = new JRubyEngineFactory();
         JRubyEngine instance = (JRubyEngine) factory.getScriptEngine();
 
-        Object expResult = 2010L;
+        Short expResult = new Short("2010");
         Object result = instance.eval(reader);
         assertEquals(expResult, result);
     }
@@ -273,7 +273,7 @@ public class JRubyEngineTest {
         JRubyEngine instance = (JRubyEngine) factory.getScriptEngine();
         Double expResult = 6.856;
         bindings.put("PI", 3.1415);
-        Double result = (Double) instance.eval(script, bindings);
+        Float result = (Float) instance.eval(script, bindings);
         assertEquals(expResult, result, 0.01);
     }
 
@@ -354,12 +354,12 @@ public class JRubyEngineTest {
         JRubyEngine instance = (JRubyEngine) 
manager.getEngineByName("jruby");
         instance.eval("p = 9.0");
         instance.eval("q = Math.sqrt p");
-        Object expResult = 9.0;
+        Double expResult = 9.0;
         int scope = ScriptContext.ENGINE_SCOPE;
         Bindings result = instance.getBindings(scope);
-        assertEquals(expResult, result.get("p"));
+        assertEquals(expResult, (Float)result.get("p"), 0.01);
         expResult = 3.0;
-        assertEquals(expResult, result.get("q"));
+        assertEquals(expResult, (Float)result.get("q"), 0.01);
 
         scope = ScriptContext.GLOBAL_SCOPE;
         result = instance.getBindings(scope);




[jruby-embed~sources:75f8e466] bug fix for jruby home setting and RubyNil conversion

yokolet 11/01/2009
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close