Merge branch 'refactor-away-defvars'

This refs #18
master
Elis Axelsson 9 years ago
commit 6e116ea1e0
No known key found for this signature in database
GPG Key ID: D57EFA625C9A925F
  1. 24
      tests/test-webpaste-provider-creation.el
  2. 80
      webpaste.el

@ -16,24 +16,24 @@
:uri "http://invalid-domain-name/" :uri "http://invalid-domain-name/"
:post-field "data" :post-field "data"
:sync t :sync t
:success-lambda (cl-function :success-lambda (lambda () (cl-function
(lambda (&key data &allow-other-keys) (lambda (&key data &allow-other-keys)
(setq used-lambda "success"))) (setq used-lambda "success"))))
:error-lambda (cl-function :error-lambda (lambda (&rest rest) (cl-function
(lambda (&key error-thrown &allow-other-keys) (lambda (&key error-thrown &allow-other-keys)
(setq used-lambda "error"))))) (setq used-lambda "error"))))))
(setq working-provider (setq working-provider
(webpaste-provider (webpaste-provider
:uri "https://httpbin.org/status/200" :uri "https://httpbin.org/status/200"
:post-field "data" :post-field "data"
:sync t :sync t
:success-lambda (cl-function :success-lambda (lambda () (cl-function
(lambda (&key data &allow-other-keys) (lambda (&key data &allow-other-keys)
(setq used-lambda "success"))) (setq used-lambda "success"))))
:error-lambda (cl-function :error-lambda (lambda (&rest rest) (cl-function
(lambda (&key error-thrown &allow-other-keys) (lambda (&key error-thrown &allow-other-keys)
(setq used-lambda "error")))))) (setq used-lambda "error")))))))
(it (it

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

Loading…
Cancel
Save