class MrubySandbox::MrubySandbox
Attributes
logger[W]
Public Class Methods
logger()
click to toggle source
# File lib/mruby_sandbox.rb, line 15 def logger @logger ||= Logger.new(STDOUT) end
new()
click to toggle source
Calls superclass method
# File lib/mruby_sandbox.rb, line 20 def initialize input, w = IO.pipe r, output = IO.pipe @pid = spawn(executable, in: r, out: w) r.close; w.close self.class.logger.debug "Sandbox(#{__id__}) created with process #{@pid}" super(input: input, output: output) rescue Errno::ENOENT => e STDERR.puts "The mruby_sandbox executable is missing. Run `build_mruby_sandbox` first." fail e end
Public Instance Methods
client()
click to toggle source
# File lib/mruby_sandbox.rb, line 35 def client clients[:default] end
close(*)
click to toggle source
Calls superclass method
# File lib/mruby_sandbox.rb, line 53 def close(*) return unless @pid super Process.kill 9, @pid Process.wait @pid self.class.logger.debug "Sandbox(#{__id__}) teared down and process #{@pid} killed" @pid = nil end
eval(*args)
click to toggle source
# File lib/mruby_sandbox.rb, line 39 def eval(*args) client.eval(*args) end
inspect()
click to toggle source
# File lib/mruby_sandbox.rb, line 62 def inspect "#<#{self.class}##{__id__} @pid=#{@pid}>" end
start_logging()
click to toggle source
# File lib/mruby_sandbox.rb, line 43 def start_logging on_sent do |message| self.class.logger.debug "Sandbox(#{__id__}) sent: #{message}" end on_received do |message| self.class.logger.debug "Sandbox(#{__id__}) received: #{message}" end end
Private Instance Methods
executable()
click to toggle source
# File lib/mruby_sandbox.rb, line 68 def executable current_dir = File.expand_path(File.dirname(__FILE__)) File.join(current_dir, '../bin/mruby_sandbox') end