adl-support.core

Application Description Language support - utility functions likely
to be useful in user-written code.

*warn*

dynamic

The idea here is to have a function with which to show warnings to the user,
which can be dynamically bound. Any binding should be a function of one
argument, which it should print, log, or otherwise display.

compose-exception-reason

macro

(compose-exception-reason exception intro)(compose-exception-reason exception)
Compose and return a sensible reason message for this `exception`.

compose-reason-and-log

macro

(compose-reason-and-log exception intro)(compose-reason-and-log exception)
Compose a reason message for this `exception`, log it (with its
stacktrace), and return the reason message.

do-or-log-and-return-reason

macro

(do-or-log-and-return-reason form)
Clojure stacktraces are unreadable. We have to do better; evaluate
this `form` in a try-catch block; return a map. If the evaluation
succeeds, the map will have a key `:result` whose value is the result;
otherwise it will have a key `:error` which will be bound to the most
sensible error message we can construct. Additionally, log the exception

do-or-log-error

macro

(do-or-log-error form & {:keys [message error-return], :or {message (clojure.core/seq (clojure.core/concat (clojure.core/list (quote clojure.core/str)) (clojure.core/list "A failure occurred in ") (clojure.core/list (list (quote quote) form))))}})
Evaluate the supplied `form` in a try/catch block. If the
keyword param `:message` is supplied, the value will be used
as the log message; if the keyword param `:error-return` is
supplied, the value will be returned if an exception is caught.

do-or-return-reason

macro

(do-or-return-reason form intro)(do-or-return-reason form)
Clojure stacktraces are unreadable. We have to do better; evaluate
this `form` in a try-catch block; return a map. If the evaluation
succeeds, the map will have a key `:result` whose value is the result;
otherwise it will have a key `:error` which will be bound to the most
sensible error message we can construct.

do-or-warn

macro

(do-or-warn form)(do-or-warn form intro)
Evaluate this `form`; if any exception is thrown, show it to the user
via the `*warn*` mechanism.

do-or-warn-and-log

macro

(do-or-warn-and-log form)(do-or-warn-and-log form intro)
Evaluate this `form`; if any exception is thrown, log the reason and
show it to the user via the `*warn*` mechanism.

massage-params

Sending empty strings, or numbers as strings, to the database often isn't
helpful. Massage these `params` and `form-params` to eliminate these problems.
We must take key field values out of just params, but we should take all other
values out of form-params - because we need the key to load the form in
the first place, but just accepting values of other params would allow spoofing.

massage-value

(massage-value k m)
Return a map with one key, this `k` as a keyword, whose value is the binding of
`k` in map `m`, as read by read.

raw-massage-params

(raw-massage-params request entity)(raw-massage-params request)
Sending empty strings, or numbers as strings, to the database often isn't
helpful. Massage these `params` and `form-params` to eliminate these problems.
Date and time fields also need massaging.

raw-resolve-template

(raw-resolve-template n)
FIXME: write docs

resolve-template

FIXME: write docs