Skip to content

Instantly share code, notes, and snippets.

@jaydonnell
Forked from automatthew/Embedder.java
Created November 19, 2009 18:08
Show Gist options
  • Save jaydonnell/238941 to your computer and use it in GitHub Desktop.
Save jaydonnell/238941 to your computer and use it in GitHub Desktop.
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 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