有没有一种方法可以扩展带有更多决定的解放者资源而无需修改资源?

时间:2019-07-02 11:00:00

标签: clojure liberator

我要扩展现有的defresource,并另作决定。

让我们说我有(请注意,这不是实际的代码,而是展示我正在尝试执行的操作的示例):


(defresource get-something [{:keys [service]} ctx]
  resource-defaults
  :allowed-methods [:get]
  :authorized? (authorized? ctx)
  :exists? (fn [_]
             true)
  :handle-ok (fn [{:keys [::result]}]
               result))

然后我想通过其他决定“扩展” get-something,例如


malformed? (fn [_] false)

通过“扩展”,我的意思是将决策添加到处理程序的工作流中,而无需修改get-something,从而获得使用所有决策的资源。

(resource
    (get-something service ctx)
    malformed? (fn [_] false))

有可能吗?

1 个答案:

答案 0 :(得分:0)

最后,资源定义是地图和数据,可以这样操作:

(def get-something 
  (merge resource-defaults
         { :allowed-methods [:get]
           :authorized? #authorized?
           :exists? true
           :handle-ok ::result}))


(defresource get-something-handler get-resource)
(defresource get-something-extended-handler get-resource :malformed? false)

;; or

(defresource get-something-extended-handler 
   (merge get-resource {:malformed? false})
相关问题