Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tag: 0.4.0
Fetching contributors…

Cannot retrieve contributors at this time

57 lines (42 sloc) 1.746 kb


Clout is a library for matching Ring HTTP requests. It uses the same routing syntax as used by popular Ruby web frameworks like Ruby on Rails and Sinatra.


These following examples make use of the ring-mock library to generate Ring request maps.

user=> (use 'ring.mock.request 'clout.core)
user=> (route-matches "/article/:title"
                      (request :get "/article/clojure"))
{:title "clojure"}
user=> (route-matches "/public/*"
                      (request :get "/public/style/screen.css"))
{:* "style/screen.css"}

Clout can also match absolute routes:

user=> (route-matches ""
                      (request :get ""))

Clout supports both keywords and wildcards. Keywords (like ":title") will match any character but the following: / . , ; ?. Wildcards (*) will match anything.

If a route does not match, nil is returned:

user=> (route-matches "/products" "/articles")

For additional performance, you can choose to pre-compile a route:

user=> (def user-route (route-compile "/user/:id"))
user=> (route-matches user-route (request :get "/user/10"))
{:user "10"}

When compiling a route, you can specify a map of regular expressions to use for different keywords. This allows more specific routing:

user=> (def user-route (route-compile "/user/:id" {:id #"\d+"}))
user=> (route-matches user-route (request :get "/user/10"))
{:user "10"}
user=> (route-matches user-route (request :get "/user/jsmith"))
Jump to Line
Something went wrong with that request. Please try again.