diff --git a/tests/test-webpaste-provider-creation.el b/tests/test-webpaste-provider-creation.el index c4540e5..a7f5c3f 100644 --- a/tests/test-webpaste-provider-creation.el +++ b/tests/test-webpaste-provider-creation.el @@ -16,24 +16,24 @@ :uri "http://invalid-domain-name/" :post-field "data" :sync t - :success-lambda (cl-function - (lambda (&key data &allow-other-keys) - (setq used-lambda "success"))) - :error-lambda (cl-function - (lambda (&key error-thrown &allow-other-keys) - (setq used-lambda "error"))))) + :success-lambda (lambda () (cl-function + (lambda (&key data &allow-other-keys) + (setq used-lambda "success")))) + :error-lambda (lambda (&rest rest) (cl-function + (lambda (&key error-thrown &allow-other-keys) + (setq used-lambda "error")))))) (setq working-provider (webpaste-provider :uri "https://httpbin.org/status/200" :post-field "data" :sync t - :success-lambda (cl-function - (lambda (&key data &allow-other-keys) - (setq used-lambda "success"))) - :error-lambda (cl-function - (lambda (&key error-thrown &allow-other-keys) - (setq used-lambda "error")))))) + :success-lambda (lambda () (cl-function + (lambda (&key data &allow-other-keys) + (setq used-lambda "success")))) + :error-lambda (lambda (&rest rest) (cl-function + (lambda (&key error-thrown &allow-other-keys) + (setq used-lambda "error"))))))) (it diff --git a/webpaste.el b/webpaste.el index c1216e1..8ee39be 100644 --- a/webpaste.el +++ b/webpaste.el @@ -100,47 +100,48 @@ precalculated, and also available both for pre and post request access.") ;;; Predefined error lambda for providers -(defvar webpaste/providers-error-lambda +(cl-defun webpaste/providers-error-lambda (&key text) + "Predefined error callback for providers that always does failover." (cl-function (lambda (&key error-thrown &allow-other-keys) (message "Got error: %S" error-thrown) - (webpaste-paste-text text))) - "Predefined error callback for providers that always does failover.") + (webpaste-paste-text text)))) -(defvar webpaste/providers-error-lambda-no-failover +(cl-defun webpaste/providers-error-lambda-no-failover (&key text) + "Predefined error callback for providers that shouldn't do failover." (cl-function (lambda (&key error-thrown &allow-other-keys) - (message "Got error: %S" error-thrown))) - "Predefined error callback for providers that shouldn't do failover.") + (message "Got error: %S" error-thrown)))) ;;; Predefined success lambdas for providers -(defvar webpaste/providers-success-location-header +(cl-defun webpaste/providers-success-location-header () + "Predefined success callback for providers returning a Location header." (cl-function (lambda (&key response &allow-other-keys) (when response (webpaste-return-url - (request-response-header response "Location"))))) - "Predefined success callback for providers returning a Location header.") + (request-response-header response "Location")))))) -(defvar webpaste/providers-success-response-url +(cl-defun webpaste/providers-success-response-url () + "Predefined success callback for providers that and up with an URL somehow." (cl-function (lambda (&key response &allow-other-keys) (when response (webpaste-return-url - (request-response-url response))))) - "Predefined success callback for providers that and up with an URL somehow.") + (request-response-url response)))))) -(defvar webpaste/providers-success-returned-string +(cl-defun webpaste/providers-success-returned-string () + "Predefined success callback for providers returning a string with URL." (cl-function (lambda (&key data &allow-other-keys) (when data (setq data (replace-regexp-in-string "\n$" "" data)) (setq data (replace-regexp-in-string "\"" "" data)) - (webpaste-return-url data)))) - "Predefined success callback for providers returning a string with URL.") + (webpaste-return-url data))))) -(defvar webpaste/providers-default-post-field-lambda +(cl-defun webpaste/providers-default-post-field-lambda () + "Predefined lambda for building post fields." (cl-function (lambda (&key text post-field provider-uri @@ -155,8 +156,7 @@ precalculated, and also available both for pre and post request access.") (if (and post-lang-field-name language-name) ;; Append language to the post-data (cl-pushnew (cons post-lang-field-name language-name) post-data)))) - post-data)) - "Predefined lambda for building post fields.") + post-data))) @@ -183,8 +183,8 @@ precalculated, and also available both for pre and post request access.") (parser 'buffer-string) (lang-overrides '()) (lang-uri-separator nil) - (error-lambda webpaste/providers-error-lambda) - (post-field-lambda webpaste/providers-default-post-field-lambda) + (error-lambda 'webpaste/providers-error-lambda) + (post-field-lambda 'webpaste/providers-default-post-field-lambda) (sync nil)) "Function to create the lambda function for a provider. @@ -257,16 +257,16 @@ Optional params: ;; Do request (request uri :type type - :data (funcall post-field-lambda + :data (funcall (funcall post-field-lambda) :text text :provider-uri uri :post-field post-field :post-lang-field-name post-lang-field-name :post-data post-data) :parser parser - :success success-lambda + :success (funcall success-lambda) :sync sync - :error error-lambda)))) + :error (funcall error-lambda :text text))))) @@ -278,7 +278,7 @@ Optional params: :post-field "c" :lang-uri-separator "/" :lang-overrides '((emacs-lisp-mode . "elisp")) - :success-lambda webpaste/providers-success-location-header)) + :success-lambda 'webpaste/providers-success-location-header)) ("ix.io" ,(webpaste-provider @@ -286,7 +286,7 @@ Optional params: :post-field "f:1" :lang-uri-separator "/" :lang-overrides '((emacs-lisp-mode . "elisp")) - :success-lambda webpaste/providers-success-returned-string)) + :success-lambda 'webpaste/providers-success-returned-string)) ("sprunge.us" ,(webpaste-provider @@ -294,7 +294,7 @@ Optional params: :post-field "sprunge" :lang-uri-separator "?" :lang-overrides '((emacs-lisp-mode . "elisp")) - :success-lambda webpaste/providers-success-returned-string)) + :success-lambda 'webpaste/providers-success-returned-string)) ("dpaste.com" ,(webpaste-provider @@ -305,7 +305,7 @@ Optional params: :post-field "content" :post-lang-field-name "syntax" :lang-overrides '((emacs-lisp-mode . "clojure")) - :success-lambda webpaste/providers-success-location-header)) + :success-lambda 'webpaste/providers-success-location-header)) ("dpaste.de" ,(webpaste-provider @@ -314,23 +314,23 @@ Optional params: :post-field "content" :post-lang-field-name "lexer" :lang-overrides '((emacs-lisp-mode . "clojure")) - :success-lambda webpaste/providers-success-returned-string)) + :success-lambda 'webpaste/providers-success-returned-string)) ("gist.github.com" ,(webpaste-provider :uri "https://api.github.com/gists" :post-field nil - :post-field-lambda (cl-function (lambda (&key text &allow-other-keys) - (let ((filename (or (file-name-nondirectory (buffer-file-name)) "file.txt"))) - (json-encode `(("description" . "Pasted from Emacs with webpaste.el") - ("public" . "false") - ("files" . - ((,filename . - (("content" . ,text)))))))))) - :success-lambda (cl-function (lambda (&key data &allow-other-keys) - (when data - (webpaste-return-url - (cdr (assoc 'html_url (json-read-from-string data))))))))) + :post-field-lambda (lambda () (cl-function (lambda (&key text &allow-other-keys) + (let ((filename (or (file-name-nondirectory (buffer-file-name)) "file.txt"))) + (json-encode `(("description" . "Pasted from Emacs with webpaste.el") + ("public" . "false") + ("files" . + ((,filename . + (("content" . ,text))))))))))) + :success-lambda (lambda () (cl-function (lambda (&key data &allow-other-keys) + (when data + (webpaste-return-url + (cdr (assoc 'html_url (json-read-from-string data)))))))))) ("paste.pound-python.org" ,(webpaste-provider @@ -339,7 +339,7 @@ Optional params: :post-field "code" :post-lang-field-name "language" :lang-overrides '((emacs-lisp-mode . "clojure")) - :success-lambda webpaste/providers-success-response-url))) + :success-lambda 'webpaste/providers-success-response-url))) "Define all webpaste.el providers. Consists of provider name and lambda function to do the actuall call to the