Add lack.middleware.mount.

This commit is contained in:
Eitaro Fukamachi 2015-03-07 03:22:47 +09:00
parent 6718359cba
commit 8747a989d0
2 changed files with 32 additions and 0 deletions

10
lack-middleware-mount.asd Normal file
View file

@ -0,0 +1,10 @@
(in-package :cl-user)
(defpackage :lack-middleware-mount-asd
(:use :cl :asdf))
(in-package :lack-middleware-mount-asd)
(defsystem lack-middleware-mount
:version "0.1"
:author "Eitaro Fukamachi"
:license "LLGPL"
:components ((:file "src/middleware/mount")))

22
src/middleware/mount.lisp Normal file
View file

@ -0,0 +1,22 @@
(in-package :cl-user)
(defpackage lack.middleware.mount
(:use :cl))
(in-package :lack.middleware.mount)
(defvar *lack-middleware-mount*
(lambda (app path mount-app)
(let ((len (length path)))
(lambda (env)
(let ((path-info (getf env :path-info)))
(cond
((string= path-info path)
(setf (getf env :path-info) "/")
(funcall mount-app env))
((and (< len (length path-info))
(string= path-info path :end1 len)
(char= (aref path-info len) #\/))
(setf (getf env :path-info)
(subseq path-info (length path)))
(funcall mount-app env))
(t
(funcall app env))))))))