Skip to content

v9.10 - Ruby Scripting Support

Choose a tag to compare

@JuicyDragon JuicyDragon released this 29 Aug 17:34
· 30 commits to master since this release

Added support for executing a Ruby script from a String or file. Usage (also see relevant tests):

Script File

puts "I am located at #{__FILE__}"
z = x + y

Java Code

// We will direct output lines to this List
List<String> outputLines = new ArrayList<>();
// Define where our script file is located
File rubyScriptFile = new File(testDataDirectory, "BasicRubyScript.rb").getCanonicalFile();
// Get engine setup
try (NuixEngine nuixEngine = constructNuixEngine()) {
    // Define some additional variables we will pass into the script
    Map<String, Object> additionalVariables = Map.of(
        "x", 40,
        "y", 2
    );

    // Execute our script file, with our additional variables, redirecting output to our List and providing
    // a callback that will allow us to inspect state upon script completion.
    RubyScriptRunner rubyScriptRunner = nuixEngine.runRubyScriptFileAsync(
        rubyScriptFile, additionalVariables, outputLines::add, outputLines::add, (result, vars) -> {
            log.info("Script Output:");
            log.info(String.join("", outputLines));
            assertFalse(outputLines.isEmpty());

            log.info("Implicit Final Result: {}", result);
            assertEquals(42L, result);

            for(Map.Entry<String,Object> entry : vars.entrySet()) {
                log.info("{} => {}", entry.getKey(), entry.getValue());
            }

            Long zValue = (Long) vars.get("z");
            assertEquals(42L, zValue);
    });

    // Script is running asynchronous so we join it to wait for it to complete.
    rubyScriptRunner.join();
}