Skip to content

Instantly share code, notes, and snippets.

@joekarma
Created May 13, 2013 02:01
Show Gist options
  • Save joekarma/5565735 to your computer and use it in GitHub Desktop.
Save joekarma/5565735 to your computer and use it in GitHub Desktop.
Common Lisp macro for easily creating new projects on subdomains of site.
(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