Registry for unique and re-usable specificationsλ︎
So far we have just use predicate functions directly in the code examples.
Using a registry, specs can be uniquely defined across the whole project. Defining a spec gives that spec a name that has a fully qualified namespace
Use the spec specific def
function to bind a new spec name and fully qualified namespace and place it in the registry
(spec/def :show-cats/cat-bread #{:abyssinian :birman :chartreau :devon-rex
:domestic-short-hair :domestic-long-hair})
Removing specs from the registryλ︎
Named specifications can be removed from the registry by binding the name to nil
.
If specification names are to be refactored, then the original name should be set to nil
and evaluated, before changing the name. This will ensure stale specifications are not residing in the REPL.
Here is a named specification as an example
The specification is evaluated in the REPL (above) and currently works.
Remove this specification from the registry by binding it to nil
Now the specification is unavailable
Registry not persistent
Restarting the REPL will loose all specification names in the registry as it is not persistent across REPL sessions.