Теперь restas:define-module и restas:define-route имеют keyword аргумент :decorators, в котором можно указать список декораторов, используемых для преобразования маршрутов. Вместо :decorators в restas:define-module также можно использовать переменную *decorators*, создаваемую при определении модуля. Т.е. теперь указывать декораторы можно при определении модуля, определении маршрута и подключении субмодуля. При этом, декораторы, указанные на различных уровнях, не замещают друг друга, а применяются последовательно.
В качестве примера декоратора, а также как просто удобную возможность, добавил restas:no-cache-decorator:
(defclass no-cache-route (routes:proxy-route) ())Кстати, функция no-cache из Hunchentoot, делает какую-то ерунду.
(defmethod process-route :before ((route no-cache-route) bindings)
(setf (hunchentoot:header-out :expires)
(hunchentoot:rfc-1123-date))
(setf (hunchentoot:header-out :cache-control)
"max-age=0, no-store, no-cache, must-revalidate"))
(defun no-cache-decorator (route)
(make-instance 'no-cache-route :target route))
Вспомнил! Как-то раз мне не хватало именно декораторов. Скоро надо будет сильно извратится чтобы придумать что-либо ещё для RESTAS ;)
ОтветитьУдалить@linkfly
ОтветитьУдалить"Совершенство это не когда нечего добавить, а когда нечего отнять." (c) ))