/** * */ package de.saumya.mojo.ruby.script; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.codehaus.classworlds.ClassRealm; import de.saumya.mojo.ruby.Logger; import de.saumya.mojo.ruby.gems.GemsConfig; public class GemScriptFactory extends ScriptFactory { public static final String GEM_HOME = "GEM_HOME"; public static final String GEM_PATH = "GEM_PATH"; private final GemsConfig gemsConfig; public GemScriptFactory(final Logger logger, final ClassRealm classRealm, final File jrubyJar, final List<String> classpathElements, final boolean fork, final GemsConfig config) throws ScriptException, IOException { this(logger, classRealm, jrubyJar, jrubyJar, classpathElements, fork, config); } public GemScriptFactory(final Logger logger, final ClassRealm classRealm, final File jrubyJar, File stdlibJar, final List<String> classpathElements, final boolean fork, final GemsConfig config) throws ScriptException, IOException { super(logger, classRealm, jrubyJar, stdlibJar, classpathElements, fork); this.gemsConfig = config; } @Override public Map<String, String> environment() { Map<String, String> result = new HashMap<String, String>(super.environment()); if (this.gemsConfig.getGemHome() != null) { result.put(GEM_HOME, this.gemsConfig.getGemHome() .getAbsolutePath() .replaceFirst("/[$][{]project.basedir[}]/", "/")); } if (this.gemsConfig.getGemPath().length > 0) { StringBuilder paths = new StringBuilder(); for (File path : this.gemsConfig.getGemPath()) { if (paths.length() > 0) { paths.append(System.getProperty("path.separator")); } paths.append(path.getAbsolutePath() .replaceFirst("/[$][{]project.basedir[}]/", "/")); } result.put(GEM_PATH, paths.toString()); } return result; } @Override public Script newScriptFromSearchPath(final String scriptName) throws IOException { final File script = new File(gemsConfig.getBinDirectory(), scriptName); if (script.exists()) { Script s = new Script(this); s.add(script.getAbsolutePath()); return s; } else { return super.newScriptFromSearchPath(scriptName); } } }