From d094e7d5b26c96bcce11ae933d2fd7273626c379 Mon Sep 17 00:00:00 2001 From: James Reeves Date: Thu, 22 Mar 2012 20:37:42 +0000 Subject: [PATCH] Added wrap-head middleware (fixes #60) --- ring-core/src/ring/middleware/head.clj | 14 ++++++++++++++ ring-core/test/ring/middleware/test/head.clj | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 ring-core/src/ring/middleware/head.clj create mode 100644 ring-core/test/ring/middleware/test/head.clj diff --git a/ring-core/src/ring/middleware/head.clj b/ring-core/src/ring/middleware/head.clj new file mode 100644 index 0000000..e9aa795 --- /dev/null +++ b/ring-core/src/ring/middleware/head.clj @@ -0,0 +1,14 @@ +(ns ring.middleware.head + "Middleware to simplify replying to HEAD requests.") + +(defn wrap-head + "Middleware that turns any HEAD request into a GET, and then sets the response + body to nil." + [handler] + (fn [request] + (if (= :head (:request-method request)) + (-> request + (assoc :request-method :get) + (handler) + (assoc :body nil)) + (handler request)))) \ No newline at end of file diff --git a/ring-core/test/ring/middleware/test/head.clj b/ring-core/test/ring/middleware/test/head.clj new file mode 100644 index 0000000..c2e2faf --- /dev/null +++ b/ring-core/test/ring/middleware/test/head.clj @@ -0,0 +1,16 @@ +(ns ring.middleware.test.head + (:use clojure.test + ring.middleware.head)) + +(defn- handler [req] + {:status 200 + :headers {"X-method" (name (:request-method req))} + :body "Foobar"}) + +(deftest test-wrap-head + (let [resp ((wrap-head handler) {:request-method :head})] + (is (nil? (:body resp))) + (is (= "get" (get-in resp [:headers "X-method"])))) + (let [resp ((wrap-head handler) {:request-method :post})] + (is (= (:body resp) "Foobar")) + (is (= "post" (get-in resp [:headers "X-method"]))))) \ No newline at end of file