diff options
Diffstat (limited to 'rt-liberation-rest.el')
-rw-r--r-- | rt-liberation-rest.el | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/rt-liberation-rest.el b/rt-liberation-rest.el index e266e15..b722ebc 100644 --- a/rt-liberation-rest.el +++ b/rt-liberation-rest.el @@ -34,6 +34,13 @@ (require 'auth-source) +(defvar rt-liber-debug-log-enable nil + "If t then enable logging of communication to a buffer. +Careful! This might create a sizable buffer.") + +(defvar rt-liber-debug-log-buffer-name "*rt-liber debug log*" + "Name of debug log buffer.") + (defvar rt-liber-rest-debug-buffer-name "*rt-liber-rest debug log*" "Buffer name of debug capture.") @@ -250,6 +257,84 @@ (rt-liber-rest-handle-response response-buffer))) (message "edit command ended at %s" (current-time-string))) +(defun rt-liber-rest-ticketsql-runner-parser-f () + "Parser function for a textual list of tickets." + (let (idsub-list) + (rt-liber-rest-parse-http-header) + (while (re-search-forward "ticket/\\([0-9].+\\)" (point-max) t) + (push (list (match-string-no-properties 1) + ".") + idsub-list)) + idsub-list)) + +(defun rt-liber-parse-answer (answer-string parser-f) + "Operate on ANSWER-STRING with PARSER-F." + (with-temp-buffer + (insert answer-string) + (goto-char (point-min)) + (when rt-liber-debug-log-enable + (rt-liber-debug-log-write (buffer-substring (point-min) + (point-max)))) + (funcall parser-f))) + +(defun rt-liber-rest-run-ls-query (query) + "Run an \"ls\" type query against the server with QUERY." + (rt-liber-parse-answer + (rt-liber-rest-query-runner "ls" query) + 'rt-liber-rest-ticketsql-runner-parser-f)) + +(defun rt-liber-ticket-base-retriever-parser-f () + "Parser function for ticket list." + (let (ticketbase-list ticketbase (continue t)) + (while (save-excursion + (re-search-forward "^id:" (point-max) t)) + (while (and continue + (re-search-forward + "^\\(\\([.{} #[:alpha:]]+\\): \\(.*\\)\\)$\\|^--$" + (point-max) t)) + (if (string= (match-string-no-properties 0) "--") + (setq continue nil) + (push (cons (match-string-no-properties 2) + (match-string-no-properties 3)) + ticketbase))) + (push (copy-sequence ticketbase) ticketbase-list) + (setq ticketbase nil + continue t)) + ticketbase-list)) + +(defun rt-liber-rest-run-show-base-query (idsublist) + "Run \"show\" type query against the server with IDSUBLIST." + (rt-liber-parse-answer + (rt-liber-rest-show-query-runner idsublist) + #'rt-liber-ticket-base-retriever-parser-f)) + +(defun rt-liber-rest-run-ticket-history-base-query (ticket-id) + "Run history query against server for TICKET-ID." + (rt-liber-parse-answer + (rt-liber-rest-query-runner "history" ticket-id) + #'(lambda () + (rt-liber-rest-parse-http-header) + (buffer-substring (point) (point-max))))) + +(defun rt-liber-rest-command-set (id field status) + "Set ticket ID status to be STATUS." + (rt-liber-parse-answer + (rt-liber-rest-edit-runner id field status) + 'rt-liber-command-runner-parser-f)) + +;;; -------------------------------------------------------- +;;; Debug log +;;; -------------------------------------------------------- + +(defun rt-liber-debug-log-write (str) + "Write STR to debug log." + (when (not (stringp str)) + (error "must be a string")) + (with-current-buffer (get-buffer-create + rt-liber-debug-log-buffer-name) + (goto-char (point-max)) + (insert str))) + (provide 'rt-liberation-rest) |