| 110 | end |
| 111 | |
| 112 | def eval_ruby(id, args) |
| 113 | eval_candidate = self.eval_queue + "\n" + args["code"] |
| 114 | logger.debug "Eval Candidate #{eval_candidate}" |
| 115 | if complete_expression?(eval_candidate) |
| 116 | eval_args = [eval_candidate] |
| 117 | if args["path"] |
| 118 | eval_args << args["path"] |
| 119 | if args["meta"] && args["meta"]["start"] |
| 120 | eval_args << args["meta"]["start"] + 1 |
| 121 | end |
| 122 | end |
| 123 | |
| 124 | result = TOPLEVEL_BINDING.eval(*eval_args) |
| 125 | if result.nil? |
| 126 | send_response(id, "editor.eval.ruby.success", {"meta" => response_meta(args["meta"])}) |
| 127 | else |
| 128 | send_response(id, "editor.eval.ruby.result", {"result" => result.inspect, "meta" => response_meta(args["meta"])}) |
| 129 | end |
| 130 | self.eval_queue = "" |
| 131 | else |
| 132 | self.eval_queue = eval_candidate |
| 133 | logger.debug("Queued Code: #{self.eval_queue}") |
| 134 | send_response(id, "editor.eval.ruby.incomplete", {"meta" => response_meta(args["meta"])}) |
| 135 | end |
| 136 | |
| 137 | rescue Exception => e |
| 138 | exception_and_backtrace = [e.inspect, e.backtrace].flatten.join("\n") |
| 139 | send_response(id, "editor.eval.ruby.exception", {"ex" => exception_and_backtrace, "meta" => response_meta(args["meta"])}) |
| 140 | end |
| 141 | |
| 142 | def run_shell(cmd) |
| 143 | `#{cmd} 2>&1` |