Fork me on GitHub

Hi there. New to pedestal. Happy to be corrected. I was extending the example in the official pedestal guide (specifically the rest api example: Wanted to implement a :delete interceptor (just in order to understand). tried the following:

(def list-delete
 {:name :list-delete                                                                                                  
   (fn [context]
      (let [nm (get-in context [:request :query-params :name]) 
            db-id (filter (comp #{nm} (:tx-data context)) (keys (:tx-data context)))] 
        (update context :tx-data dissoc db-id)))}) 
the original interceptor that creates the list is:
(def list-create   
   {:name :list-create 
    (fn [context]
      (let [nm       (get-in context [:request :query-params :name] "Unnamed List")
            new-list (make-list nm)
            db-id    (str (gensym "l"))] 
        (assoc context :tx-data [assoc db-id new-list])))}) 
the original route for the :post is: ["/todo" :post [db-interceptor list-create]] so my :delete root is: ["/todo" :delete [db-interceptor list-delete]] But trying the test: (test-request :delete "/todo?name=some-list") when the state is:
{"l30491" {:name "my-other-list", :items {}}, "l30517" {:name "yes-list", :items {}}, "l30520" {:name "no-list", :items {}}, "l30527" {:name "no-list", :items {}}, "l30618" {:name "some-list", :items {}}} 
does not delete the list in question.... Note that some-list is the :name value in a map which is a value of the string "l30618" ... I think that my list-delete function should do the job, but I suspect that I don't understand something basic either about interceptors or about how :delete should be called in a REST api....


@adamgefen At a glance, it doesn’t look like your list-delete impl is correct


the filter expression looks wrong