Skip to content

Instantly share code, notes, and snippets.

@automatthew
Created November 19, 2009 18:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save automatthew/238940 to your computer and use it in GitHub Desktop.
Save automatthew/238940 to your computer and use it in GitHub Desktop.
Improved interface for JRuby Embed
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