
de.saumya.mojo.ruby.GemScriptingContainer Maven / Gradle / Ivy
/**
*
*/
package de.saumya.mojo.ruby;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.jruby.embed.LocalContextScope;
import org.jruby.embed.LocalVariableBehavior;
import org.jruby.embed.ScriptingContainer;
public class GemScriptingContainer extends ScriptingContainer {
public GemScriptingContainer() {
this(LocalContextScope.SINGLETON,
LocalVariableBehavior.PERSISTENT,
null,
null);
}
public GemScriptingContainer(final File gemHome, final File gemPath) {
this(LocalContextScope.SINGLETON,
LocalVariableBehavior.PERSISTENT,
gemHome,
gemPath);
}
public GemScriptingContainer(LocalContextScope scope,
LocalVariableBehavior behavior) {
this(scope, behavior, null, null);
}
public GemScriptingContainer(LocalContextScope scope,
LocalVariableBehavior behavior, final File gemHome,
final File gemPath) {
super(scope, behavior);
final Map env = new HashMap();
if (gemHome != null && gemHome.exists()) {
env.put("GEM_HOME", gemHome.getAbsolutePath());
}
if (gemPath != null && gemPath.exists()) {
env.put("GEM_PATH", gemPath.getAbsolutePath());
}
getProvider().getRubyInstanceConfig().setEnvironment(env);
// setting the JRUBY_HOME to the one from the jruby jar - ignoring
// the environment setting !
// use lib otherwise the classloader finds META-INF/jruby.home from ruby-tools where there is a bin/rake
// as fix for an older jruby jar
URL jrubyHome = Thread.currentThread().getContextClassLoader()
.getResource("META-INF/jruby.home/lib");
if ( jrubyHome != null ){
getProvider().getRubyInstanceConfig()
.setJRubyHome( jrubyHome
.toString()
.replaceFirst("^jar:", "")
.replaceFirst( "/lib$", "" ) );
}
}
public Object runScriptletFromClassloader(final String name,
final Class> clazz) throws IOException {
InputStream script = ScriptUtils.getScriptAsStream(name, clazz);
try {
return runScriptlet(script, name);
}
finally {
if (script != null) {
script.close();
}
}
}
public Object runScriptletFromClassloader(final String name)
throws IOException {
InputStream script = ScriptUtils.getScriptAsStream(name);
try {
return runScriptlet(ScriptUtils.getScriptAsStream(name), name);
}
finally {
if (script != null) {
script.close();
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy