anchor.diff:  ----
   (defn active-users
     "List just users who are currently active."
  -  {:path-spec [:get "/active"]}
  +  {:path-spec [:get "/active"]}     ; equivalently {:route-spec [:get ["active"]]}
     [request]
     ...)
   ----
  
positive.code: 
  The end result is that a proper web service resource can be created in very little code.
  
  Rook makes use of https://github.com/weavejester/compojure[Compojure] to handle request routing.
  
  Rook works well with https://github.com/clojure/core.async[Clojure's core.async] to allow you to build richly interdependent resources
  without blocking all your threads.
  
negative.code: 
  A typical web service will expose some number of resources; under Rook this means mapping a number of namespaces.
  
  The {api}/io.aviso.rook.html#var-namespace-handler[+namespace-handler+] function is the easy way to do this mapping.
  
  ----
  (namespace-handler
    [["users"] 'org.example.resources.users]
    [["orders"] 'org.example.resources.orders])
  ----
  
  IMPORTANT: Rook will +require+ the namespace if it has not already been previously loaded into Clojure.
  
  == Writing Rook Middleware
  
  Rook uses the +:rook+ key of the request to store information needed
  to process requests. Middleware specified in calls to
  +namespace-handler+ can make use of this information.
  
  +:arg-resolvers+::
  List of argument resolvers that apply to any invoked resource handler functions.
  +:metadata+::
  The metadata for the matched function minus the
  +:arg-resolvers+ key (as argument resolvers are treated specially by
  the dispatch machinery). This is the merged metadata of the function
  and the namespace (if there are collisions, the function takes
  precedence). This is, notably, where the request schema is found
  during request processing (see below).
  
  == Validation
  
  