Liking cljdoc? Tell your friends :D

pedestal-api-helper

Clojars Project

A Clojure library designed to extend usual pedestal api setup, providing:

  • useful interceptors
  • useful utils for dealing with validation and filtering, for example

Clojars link

Usage

  • Add the dependency:
[org.clojars.majorcluster/pedestal-api-helper "0.3.0"]

Examples:

  • Interceptors:
(:require [clj.pedestal-api-helper.interceptors :as api-h.i]
  [...])

(def common-interceptors
  [(p.body-params/body-params)
   api-h.i/json-out])

(def all-routes
  (route/expand-routes
    #{["/status" :get (conj common-interceptors `r.status/get-status) :route-name :get-all-status]}))
  • Validating and Filtering Params:
(:require [clj.pedestal-api-helper.params-helper :as api-h.params]
  [...])

(defn post-status
  [request]
  (try
    (let [crude-body (:json-params request)
          mandatory-fields ["name"]
          allowed-fields ["name"]
          body (api-h.params/validate-and-mop!! crude-body mandatory-fields allowed-fields)]
      (...))
    (catch ExceptionInfo e
      {:status 400, :headers common-headers, :body {:message
                                                    (:validation-messages (.getData e))}})
    ))

(defn patch-status
  [request]
  (try
    (let [crude-body (:json-params request)
          mandatory-fields ["id","name"]
          allowed-fields ["id","name"]
          body (api-h.params/validate-and-mop!! crude-body mandatory-fields allowed-fields)]
      {:status 204})
    (catch ExceptionInfo e
      {:status 400, :headers common-headers, :body {:message
                                                    (:validation-messages (.getData e))}})
    ))

Publish

Requirements

  • Leiningen (of course 😄)
  • GPG (mac => brew install gpg)
  • Clojars account
  • Enter clojars/tokens page in your account -> generate one and use for password
export GPG_TTY=$(tty) && lein deploy clojars

Documentation

pedestal-api-helper/interceptors

SymbolsDescription
json-outMap having :leave as fn[context] and rewriting response body from map into json

pedestal-api-helper/params-helper

SymbolsDescription
uuid-patternUUID string regex
FunctionsDescription
uuidreturns a new random UUID
(uuid) => 53bd29d3-9b41-4550-83cc-f970d49da04d
uuid-as-string [uuid]converts uuid into a string
(uuid-as-string (uuid)) => "53bd29d3-9b41-4550-83cc-f970d49da04d"
is-uuid [id]if id param is a string, checks if it matches uuid regex, otherwise returns false
(is-uuid "53bd29d3-9b41-4550-83cc-f970d49da04d") => true
validate-mandatory [body fields & message-untranslated = "Field %s is not present"]checks if body map has mandatory keys, if not, throws an exception containing all missing fields in ExceptionInfo .getData :validation-messages
(validate-mandatory {:name "Rosa"} ["name"]) => true
(validate-mandatory {} ["name"]) => ExceptionInfo thrown
extract-field-value [field body]gets value from the body using field ks, converting uuid's from string to UUID if needed
(extract-field-value :name {:name "Rosa"}) => "Rosa"
(extract-field-value :id {:id "53bd29d3-9b41-4550-83cc-f970d49da04d"}) => #uuid "53bd29d3-9b41-4550-83cc-f970d49da04d"
mop-fields [body fields]Clean the body removing values not present in fields param
(mop-fields {:name "Rosa" :age 41} ["name"]) => {:name "Rosa"}
validate-and-mop!! [body mandatory accepted]Validates and clean body by executing validate-mandatory and mop-fields

Can you improve this documentation?Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close