1module Groonga 2 module Ruby 3 class EvalCommand < Command 4 register("ruby_eval", 5 [ 6 "script", 7 ]) 8 9 def run_body(input) 10 script = input[:script] 11 unless script.is_a?(String) 12 message = "script must be a string: <#{script.inspect}>" 13 raise Groonga::InvalidArgument, message 14 end 15 16 eval_context = EvalContext.new 17 begin 18 result = eval_context.eval(script) 19 rescue Exception => error 20 writer.map("result", 1) do 21 writer.write("exception") 22 writer.map("exception", 1) do 23 writer.write("message") 24 writer.write(error.message) 25 end 26 end 27 else 28 writer.map("result", 1) do 29 writer.write("value") 30 writer.write(result) 31 end 32 end 33 end 34 end 35 end 36end 37