module Asciidoctor::Diagram::Cli
@private
Public Class Methods
run(*args)
click to toggle source
# File lib/asciidoctor-diagram/util/cli.rb, line 11 def self.run(*args) opts = args.pop.dup if args.last.is_a? Hash in_data = opts && opts[:stdin_data] pb = java.lang.ProcessBuilder.new(*args) p = pb.start stdout = "" out_reader = start_stream_reader(p.getInputStream, stdout) stderr = "" err_reader = start_stream_reader(p.getErrorStream, stderr) if in_data p.getOutputStream.write(in_data.to_java_bytes) p.getOutputStream.close end p.waitFor out_reader.join err_reader.join status = p.exitValue if status != 0 raise "#{File.basename(args[0])} failed: #{stdout.empty? ? stderr : stdout}" end { :out => stdout, :err => stderr, :status => status } end
start_stream_reader(in_stream, out_string)
click to toggle source
# File lib/asciidoctor-diagram/util/cli.rb, line 47 def self.start_stream_reader(in_stream, out_string) Thread.new { buffer = ::Java::byte[4096].new while (bytes_read = in_stream.read(buffer)) != -1 if bytes_read < buffer.length str = String.from_java_bytes(java.util.Arrays.copyOf(buffer, bytes_read)) else str = String.from_java_bytes(buffer) end out_string << str end } end