[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 |





