Skip to content

Simple tools for structural validation of data shapes and debug mode assertions.

License

Notifications You must be signed in to change notification settings

stoeckley/clojure-assistant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Clojure Assistant

Simple but effective validation on any kind of data and types, without any fuss or learning curve. I use this in every project to streamline the inclusion of pre conditions on all functions (named or anonymous), and to provide strict enforcement of values and map structures throughout a codebase. Also offers easy logging of expressions and their evaluations to console or repl. All tools herein work in Clojure and ClojureScript with zero overhead in a production build, and with a simple function-based, data-based syntax that does not rely on any new DSL, fancy magic, or verbose spec composition.

The small amount of code in this library is short and decently documented, and the tests also make it clear. For example, here is all you need to know about shaping maps.

Motivation

(and comparison to clojure.spec)

I built this tiny library to add much safety without upsetting the terse, dynamic workflow of writing succinct Clojure.

In the absence of static types, I want to easily and quickly validate all data flows in a simple, lightweight manner using ordinary maps and functions, without a DSL or heavy API or extra syntax and verbosity (i.e. clojure.spec).

I also want compile-time enforcement that my "specs" actually exist and that my typos are actually caught -- a fundamental expectation of a validation tool which clojure.spec doesn't offer (and has bitten many a developer who mistyped spec keywords and thus experienced passing validations on invalid data!).

I also want short, targeted error messages if data doesn't conform.

This library addresses these concerns, and makes it easy to assert that all values flowing through a Clojure or ClojureScript app are exactly what you expect, using every-day Clojure constructs and with as little extra code as possible. It all compiles away at production, with zero run-time overhead.

Installation

Clojars:

[nl.balconystudio/clojure-assistant "0.31"]

Require in CLJ:

[assistant.structures ..(etc)..]

The other namespaces are:

[assistant.asserts ...] [assistant.predicates ...] [assistant.functions ...] [assistant.log ...]

Require macros in CLJS:

[assistant.structures :as ass :include-macros true ..(etc)..]

(for any namespace which has macros)

PRs, Issues

Sure.

License

Copyright © 2017 - 2018 Andrew Stoeckley and Balcony Studio

Distributed under the Eclipse Public License, the same as the Clojure language.

About

Simple tools for structural validation of data shapes and debug mode assertions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published