diff options
Diffstat (limited to 'lisp/org/ob-ruby.el')
-rw-r--r-- | lisp/org/ob-ruby.el | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/lisp/org/ob-ruby.el b/lisp/org/ob-ruby.el index 747c6fc3da2..af528314393 100644 --- a/lisp/org/ob-ruby.el +++ b/lisp/org/ob-ruby.el @@ -37,9 +37,6 @@ ;;; Code: (require 'ob) -(require 'ob-ref) -(require 'ob-comint) -(require 'ob-eval) (eval-when-compile (require 'cl)) (declare-function run-ruby "ext:inf-ruby" (&optional command name)) @@ -53,6 +50,22 @@ (defvar org-babel-ruby-command "ruby" "Name of command to use for executing ruby code.") +(defcustom org-babel-ruby-hline-to "nil" + "Replace hlines in incoming tables with this when translating to ruby." + :group 'org-babel + :version "24.4" + :package-version '(Org . "8.0") + :type 'string) + +(defcustom org-babel-ruby-nil-to 'hline + "Replace 'nil' in ruby tables with this before returning." + :group 'org-babel + :version "24.4" + :package-version '(Org . "8.0") + :type 'string) + + + (defun org-babel-execute:ruby (body params) "Execute a block of Ruby code with Babel. This function is called by `org-babel-execute-src-block'." @@ -71,7 +84,9 @@ This function is called by `org-babel-execute-src-block'." (org-babel-ruby-evaluate session full-body result-type result-params)))) (org-babel-reassemble-table - result + (org-babel-result-cond result-params + result + (org-babel-ruby-table-or-string result)) (org-babel-pick-name (cdr (assoc :colname-names params)) (cdr (assoc :colnames params))) (org-babel-pick-name (cdr (assoc :rowname-names params)) @@ -116,13 +131,21 @@ Convert an elisp value into a string of ruby source code specifying a variable of the same value." (if (listp var) (concat "[" (mapconcat #'org-babel-ruby-var-to-ruby var ", ") "]") - (format "%S" var))) + (if (equal var 'hline) + org-babel-ruby-hline-to + (format "%S" var)))) (defun org-babel-ruby-table-or-string (results) "Convert RESULTS into an appropriate elisp value. If RESULTS look like a table, then convert them into an Emacs-lisp table, otherwise return the results as a string." - (org-babel-script-escape results)) + ((lambda (res) + (if (listp res) + (mapcar (lambda (el) (if (equal el 'nil) + org-babel-ruby-nil-to el)) + res) + res)) + (org-babel-script-escape results))) (defun org-babel-ruby-initiate-session (&optional session params) "Initiate a ruby session. @@ -206,31 +229,27 @@ return the value of the last statement in BODY, as elisp." (comint-send-input nil t)) 2) "\n") "[\r\n]")) "\n")) (value - ((lambda (results) - (if (or (member "code" result-params) (member "pp" result-params)) - results - (org-babel-ruby-table-or-string results))) - (let* ((tmp-file (org-babel-temp-file "ruby-")) - (ppp (or (member "code" result-params) - (member "pp" result-params)))) - (org-babel-comint-with-output - (buffer org-babel-ruby-eoe-indicator t body) - (when ppp (insert "require 'pp';") (comint-send-input nil t)) - (mapc - (lambda (line) - (insert (org-babel-chomp line)) (comint-send-input nil t)) - (append - (list body) - (if (not ppp) - (list (format org-babel-ruby-f-write - (org-babel-process-file-name tmp-file 'noquote))) - (list - "results=_" "require 'pp'" "orig_out = $stdout" - (format org-babel-ruby-pp-f-write - (org-babel-process-file-name tmp-file 'noquote)))) - (list org-babel-ruby-eoe-indicator))) - (comint-send-input nil t)) - (org-babel-eval-read-file tmp-file))))))) + (let* ((tmp-file (org-babel-temp-file "ruby-")) + (ppp (or (member "code" result-params) + (member "pp" result-params)))) + (org-babel-comint-with-output + (buffer org-babel-ruby-eoe-indicator t body) + (when ppp (insert "require 'pp';") (comint-send-input nil t)) + (mapc + (lambda (line) + (insert (org-babel-chomp line)) (comint-send-input nil t)) + (append + (list body) + (if (not ppp) + (list (format org-babel-ruby-f-write + (org-babel-process-file-name tmp-file 'noquote))) + (list + "results=_" "require 'pp'" "orig_out = $stdout" + (format org-babel-ruby-pp-f-write + (org-babel-process-file-name tmp-file 'noquote)))) + (list org-babel-ruby-eoe-indicator))) + (comint-send-input nil t)) + (org-babel-eval-read-file tmp-file)))))) (defun org-babel-ruby-read-string (string) "Strip \\\"s from around a ruby string." |