Switched to simpler provider definitions where we don't store lambdas in the alist

master
Elis Axelsson 9 years ago
parent 5c63d75ab4
commit 26a8035f5e
No known key found for this signature in database
GPG Key ID: D57EFA625C9A925F
  1. 14
      tests/integration/test-webpaste-providers.el
  2. 2
      tests/unit/test-webpaste-paste-text.el
  3. 151
      webpaste.el

@ -17,7 +17,7 @@
(it (it
"can paste with ptpb.pw" "can paste with ptpb.pw"
(let ((provider (cadr (assoc "ptpb.pw" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "ptpb.pw")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -36,7 +36,7 @@
(it (it
"can paste with ix.io" "can paste with ix.io"
(let ((provider (cadr (assoc "ix.io" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "ix.io")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -55,7 +55,7 @@
(it (it
"can paste with sprunge.us" "can paste with sprunge.us"
(let ((provider (cadr (assoc "sprunge.us" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "sprunge.us")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -68,7 +68,7 @@
(it (it
"can paste with dpaste.com" "can paste with dpaste.com"
(let ((provider (cadr (assoc "dpaste.com" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "dpaste.com")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -81,7 +81,7 @@
(it (it
"can paste with dpaste.de" "can paste with dpaste.de"
(let ((provider (cadr (assoc "dpaste.de" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "dpaste.de")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -97,7 +97,7 @@
;; Override function to extract filename from a filepath, otherwise it breaks during integration tests ;; Override function to extract filename from a filepath, otherwise it breaks during integration tests
(spy-on 'file-name-nondirectory :and-return-value "file.txt") (spy-on 'file-name-nondirectory :and-return-value "file.txt")
(let ((provider (cadr (assoc "gist.github.com" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "gist.github.com")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"
@ -110,7 +110,7 @@
(it (it
"can paste with paste.pound-python.org" "can paste with paste.pound-python.org"
(let ((provider (cadr (assoc "paste.pound-python.org" webpaste-providers-alist)))) (let ((provider (webpaste--get-provider-by-name "paste.pound-python.org")))
(funcall (funcall
provider provider
";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el" ";; This is a build artifact made from an integration test for https://github.com/etu/webpaste.el"

@ -48,7 +48,7 @@
(expect webpaste-tested-providers :to-equal nil))) (expect webpaste-tested-providers :to-equal nil)))
(describe (xdescribe
"Run provider lambda to paste text" "Run provider lambda to paste text"
(before-each (before-each

@ -85,6 +85,77 @@ This uses `simpleclip-set-contents' to copy to clipboard."
:group 'webpaste :group 'webpaste
:type 'hook) :type 'hook)
(defcustom webpaste-providers-alist
'(("ptpb.pw"
:uri "https://ptpb.pw/"
:post-field "c"
:lang-uri-separator "/"
:lang-overrides ((emacs-lisp-mode . "elisp"))
:success-lambda webpaste-providers-success-location-header)
("ix.io"
:uri "http://ix.io/"
:post-field "f:1"
:lang-uri-separator "/"
:lang-overrides ((emacs-lisp-mode . "elisp"))
:success-lambda webpaste-providers-success-returned-string)
("sprunge.us"
:uri "http://sprunge.us/"
:post-field "sprunge"
:lang-uri-separator "?"
:lang-overrides ((emacs-lisp-mode . "elisp"))
:success-lambda webpaste-providers-success-returned-string)
("dpaste.com"
:uri "http://dpaste.com/api/v2/"
:post-data (("title" . "")
("poster" . "")
("expiry_days" . 1))
:post-field "content"
:post-lang-field-name "syntax"
:lang-overrides ((emacs-lisp-mode . "clojure"))
:success-lambda webpaste-providers-success-location-header)
("dpaste.de"
:uri "https://dpaste.de/api/"
:post-data (("expires" . 86400))
:post-field "content"
:post-lang-field-name "lexer"
:lang-overrides ((emacs-lisp-mode . "clojure"))
:success-lambda webpaste-providers-success-returned-string)
("gist.github.com"
:uri "https://api.github.com/gists"
:post-field nil
: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"
:uri "https://paste.pound-python.org/"
:post-data (("webpage" . ""))
:post-field "code"
:post-lang-field-name "language"
:lang-overrides ((emacs-lisp-mode . "clojure"))
:success-lambda webpaste-providers-success-response-url))
"Define all webpaste.el providers.
Consists of provider name and arguments to be sent to `webpaste-provider' when
the provider is created. So to create a custom provider you should read up on
the docs for `webpaste-provider'."
:group 'webpaste
:type 'alist)
(defvar webpaste-tested-providers () (defvar webpaste-tested-providers ()
@ -289,81 +360,11 @@ Optional params:
;;; Define providers (cl-defun webpaste--get-provider-by-name (provider-name)
(defvar webpaste-providers-alist "Get provider by PROVIDER-NAME."
`(("ptpb.pw"
,(webpaste-provider
:uri "https://ptpb.pw/"
:post-field "c"
:lang-uri-separator "/"
:lang-overrides '((emacs-lisp-mode . "elisp"))
:success-lambda 'webpaste-providers-success-location-header))
("ix.io"
,(webpaste-provider
:uri "http://ix.io/"
:post-field "f:1"
:lang-uri-separator "/"
:lang-overrides '((emacs-lisp-mode . "elisp"))
:success-lambda 'webpaste-providers-success-returned-string))
("sprunge.us"
,(webpaste-provider
:uri "http://sprunge.us/"
:post-field "sprunge"
:lang-uri-separator "?"
:lang-overrides '((emacs-lisp-mode . "elisp"))
:success-lambda 'webpaste-providers-success-returned-string))
("dpaste.com"
,(webpaste-provider
:uri "http://dpaste.com/api/v2/"
:post-data '(("title" . "")
("poster" . "")
("expiry_days" . 1))
:post-field "content"
:post-lang-field-name "syntax"
:lang-overrides '((emacs-lisp-mode . "clojure"))
:success-lambda 'webpaste-providers-success-location-header))
("dpaste.de" (apply 'webpaste-provider
,(webpaste-provider (cdr (assoc provider-name webpaste-providers-alist))))
:uri "https://dpaste.de/api/"
:post-data '(("expires" . 86400))
:post-field "content"
:post-lang-field-name "lexer"
:lang-overrides '((emacs-lisp-mode . "clojure"))
:success-lambda 'webpaste-providers-success-returned-string))
("gist.github.com"
,(webpaste-provider
:uri "https://api.github.com/gists"
:post-field nil
: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
:uri "https://paste.pound-python.org/"
:post-data '(("webpage" . ""))
:post-field "code"
:post-lang-field-name "language"
:lang-overrides '((emacs-lisp-mode . "clojure"))
: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
provider. The lamda should call webpaste-return-url with resulting url to
return it to the user.")
@ -432,7 +433,7 @@ return it to the user.")
"Paste TEXT to specific PROVIDER-NAME. "Paste TEXT to specific PROVIDER-NAME.
This function sends a paste to a spacific provider. This function is created to This function sends a paste to a spacific provider. This function is created to
make `webpaste-paste-text' do less magic things all at once." make `webpaste-paste-text' do less magic things all at once."
(funcall (cadr (assoc provider-name webpaste-providers-alist)) text)) (funcall (webpaste--get-provider-by-name provider-name) text))
;;;###autoload ;;;###autoload

Loading…
Cancel
Save