Created
May 13, 2013 02:01
-
-
Save joekarma/5565735 to your computer and use it in GitHub Desktop.
Common Lisp macro for easily creating new projects on subdomains of site.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defvar *projects* nil) | |
(defmacro defproject (project-name (project-domain &key use) | |
&body project-routes) | |
(let ((project (alexandria:make-keyword project-name))) | |
(pushnew project *projects*) | |
(eval | |
`(restas:define-module ,project | |
(:use ,@(append '(:cl :restas) (eval use))))) | |
`(eval-when (:compile-toplevel :load-toplevel :execute) | |
,@(loop for route in project-routes | |
collect (destructuring-bind (name lambda-list &body body) | |
route | |
`(restas:define-route ,(intern (symbol-name name) project) ,lambda-list ,@body))) | |
(restas:start ,project | |
:port 8080 | |
:hostname ,project-domain)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment