package jp.dip.oyasirazu.study.jruby; import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import org.jruby.Ruby; import org.jruby.RubyInstanceConfig; import org.jruby.ast.Node; import org.jruby.runtime.builtin.IRubyObject; /** * StudyJRuby03 */ public class StudyJRuby03 { /** * Constructor */ public StudyJRuby03() { } public static void main(String[] args) throws IOException { final String scriptPath = args[0]; final String gemsPath = args[1]; final Path basePath = Paths.get(gemsPath); final List<String> loadPaths = new ArrayList<>(); Files.walkFileTree(basePath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult preVisitDirectory(Path file, BasicFileAttributes attrs) throws IOException { String fileStr = file.toString(); if (fileStr.endsWith("lib")) { loadPaths.add(fileStr); return FileVisitResult.SKIP_SUBTREE; } return FileVisitResult.CONTINUE; } }); RubyInstanceConfig config = new RubyInstanceConfig(); config.setLoadPaths(loadPaths); Ruby ruby = Ruby.newInstance(config); Path p = Paths.get(scriptPath); Node node = ruby.parseFile( Files.newInputStream(p), p.toString(), ruby.getCurrentContext().getCurrentScope(), 0); IRubyObject obj = ruby.runNormally(node); } }