anchor.diff:  
   Example:
   
  -[source,clojure]
   ----
   (-> routes
    (io.aviso.rook/namespace-middleware 'some.namespace))
    (io.aviso.rook/arg-resolver-middleware
     (io.aviso.rook/build-map-arg-resolver :key1 "value1" :key2 "value2")
     (io.aviso.rook/core/build-fn-arg-resolver :ip (fn [req] (:remote-addr req)))))
  ----
  +----
   
   You can of course use arg resolver building functions multiple times and provide your own too!
positive.code: = Rook
  
  Rook is a set of middleware and handlers to enable metadata-based routing for Ring web applications.
  
  The intention is to expose a Clojure _namespace_ as a web service _resource_; there's a default mapping of HTTP verbs
  and paths to function names; these can be extended or overridden by meta-data on the functions in the namespace.
  
  The end result is that a proper web service resource can be created in very little code.
  
  == Handler Functions
  
  Rook analyzes the public functions of a namespace to determine which functions are invoked and under which circumstances.
  The circumstances are an HTTP verb (GET, POST, etc.) plus a https://github.com/weavejester/clout[Clout] route. The
  route may include keywords. This is called the +path specification+.
  
  Rook applies a naming convention to functions, so simply naming a function with a particular name implies a certain
  path specification.
  
  == Routing
  
  
negative.code: Please note, that when using +namespace-middleware+ in conjunction with +compojure.core/context+, the context has to wrap
  middleware to make the route path resolution work properly. Example:
  
  ----
  (compojure.core/context "/merchants" []
    (->
     (io.aviso.rook/rook-handler)
  