Created
November 19, 2009 18:06
-
-
Save automatthew/238940 to your computer and use it in GitHub Desktop.
Improved interface for JRuby Embed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.jruby.embed.PathType; | |
import org.jruby.embed.ScriptingContainer; | |
public class Embedder { | |
public ScriptingContainer container; | |
public String file; | |
public Embedder(String filename) { | |
file = filename; | |
container = new ScriptingContainer(); | |
container.runScriptlet(PathType.CLASSPATH, file); | |
} | |
public RubyObject rubyClass(String classname) { | |
Object obj = container.runScriptlet(classname); | |
return new RubyObject(obj); | |
} | |
public RubyObject instantiate(String classname, Object[] args) { | |
Object robj = rubyClass(classname).send("new", args, Object.class); | |
return new RubyObject(robj); | |
} | |
public RubyObject instantiate(String classname) { | |
Object robj = rubyClass(classname).send("new", Object.class); | |
return new RubyObject(robj); | |
} | |
public class RubyObject { | |
private Object obj; | |
public RubyObject(Object object) { | |
obj = object; | |
} | |
public <T> T send(String methodName, Class<T> returnType) { | |
return container.callMethod(obj, methodName, returnType); | |
} | |
public <T> T send(String methodName, Object singleArg, Class<T> returnType) { | |
return container.callMethod(obj, methodName, singleArg, returnType); | |
} | |
public <T> T send(String methodName, Object[] args, Class<T> returnType) { | |
return container.callMethod(obj, methodName, args, returnType); | |
} | |
} | |
public static void main(String[] args) { | |
Embedder ruby = new Embedder("code.rb"); | |
Object[] call_args = {"foo", "bar"}; | |
RubyObject thingy = ruby.instantiate("SomeClass", call_args); | |
System.out.println(thingy.send("bazbat", String.class)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment