From f16162030248cd9cbc45fb3d139fd25f47e60372 Mon Sep 17 00:00:00 2001 From: Elis Axelsson Date: Sat, 3 Jun 2017 13:11:46 +0200 Subject: [PATCH 1/3] Refactored the success callbacks --- tests/test-webpaste-provider-creation.el | 12 +++---- webpaste.el | 40 ++++++++++++------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/tests/test-webpaste-provider-creation.el b/tests/test-webpaste-provider-creation.el index c4540e5..02836fa 100644 --- a/tests/test-webpaste-provider-creation.el +++ b/tests/test-webpaste-provider-creation.el @@ -16,9 +16,9 @@ :uri "http://invalid-domain-name/" :post-field "data" :sync t - :success-lambda (cl-function - (lambda (&key data &allow-other-keys) - (setq used-lambda "success"))) + :success-lambda (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"))))) @@ -28,9 +28,9 @@ :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"))) + :success-lambda (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")))))) diff --git a/webpaste.el b/webpaste.el index c1216e1..96730e5 100644 --- a/webpaste.el +++ b/webpaste.el @@ -114,30 +114,30 @@ precalculated, and also available both for pre and post request access.") ;;; 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 @@ -264,7 +264,7 @@ Optional params: :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)))) @@ -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,7 +314,7 @@ 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 @@ -327,10 +327,10 @@ Optional params: ("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))))))))) + :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 From 30e78d6fe1a94bed3cbf7786f674c2e18d33b366 Mon Sep 17 00:00:00 2001 From: Elis Axelsson Date: Sat, 3 Jun 2017 14:29:11 +0200 Subject: [PATCH 2/3] Refactored the error callbacks --- tests/test-webpaste-provider-creation.el | 12 ++++++------ webpaste.el | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/test-webpaste-provider-creation.el b/tests/test-webpaste-provider-creation.el index 02836fa..a7f5c3f 100644 --- a/tests/test-webpaste-provider-creation.el +++ b/tests/test-webpaste-provider-creation.el @@ -19,9 +19,9 @@ :success-lambda (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"))))) + :error-lambda (lambda (&rest rest) (cl-function + (lambda (&key error-thrown &allow-other-keys) + (setq used-lambda "error")))))) (setq working-provider (webpaste-provider @@ -31,9 +31,9 @@ :success-lambda (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")))))) + :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 96730e5..ab0baae 100644 --- a/webpaste.el +++ b/webpaste.el @@ -100,17 +100,17 @@ 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 @@ -183,7 +183,7 @@ 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) + (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. @@ -266,7 +266,7 @@ Optional params: :parser parser :success (funcall success-lambda) :sync sync - :error error-lambda)))) + :error (funcall error-lambda :text text))))) From 62e0f33d055e221c54e72b1d17a0f2fe50553572 Mon Sep 17 00:00:00 2001 From: Elis Axelsson Date: Sat, 3 Jun 2017 15:11:08 +0200 Subject: [PATCH 3/3] Refactor default post field lambda --- webpaste.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/webpaste.el b/webpaste.el index ab0baae..8ee39be 100644 --- a/webpaste.el +++ b/webpaste.el @@ -140,7 +140,8 @@ precalculated, and also available both for pre and post request access.") (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))) @@ -184,7 +184,7 @@ precalculated, and also available both for pre and post request access.") (lang-overrides '()) (lang-uri-separator nil) (error-lambda 'webpaste/providers-error-lambda) - (post-field-lambda webpaste/providers-default-post-field-lambda) + (post-field-lambda 'webpaste/providers-default-post-field-lambda) (sync nil)) "Function to create the lambda function for a provider. @@ -257,7 +257,7 @@ 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 @@ -320,13 +320,13 @@ Optional params: ,(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)))))))))) + :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