A Dunaj library for managing project-wide configuration
Clojure HTML
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
.gitignore
README.adoc
epl-v10.html
project.clj

README.adoc

Crispin

He pulled out a battered red journal and proffered it unsteadily. Gilt took it, and flicked it open. His eye ran down the entries. ‘You wrote everything down, Crispin?’ he said. ‘Why?’ Crispin looked appalled. ‘Got to keep records, Reacher,’ he said. ‘Can’t cover y’tracks if you don’t know where y’left ‘em.
— Terry Pratchett
Going Postal

Overview

Crispin is a library for managing project wide configuration. An optimized version of this library for Dunaj can be found in Dunaj branch of this project.

Configuration map is assumed immutable and can be safely cached. Configuration is static. When the config changes, service should be restarted. Design choice is to have stateless fail-fast services, that have their configuration stored on various places.

Main feature is to provides map merged from various sources, in following order:

  • Configuration file in the root classpath

  • Configuration files within classpath starting from user defined namespace

  • Project specific environment variables (set e.g. in lein project.clj or profiles.clj) Users must use lein-environ plugin to enable this

  • Environment variables, translating keys

  • Java system properties, translating keys

  • Custom configuration resources pointed from [:crispin] property, guessing format from filename, defaulting to .edn

All data is merged into one map and keys are translated to the hierarchy of keywords. This will either be perfect to your project or not useful at all.

Accepted file names for configuration files, loaded in following order:

  • config.json

  • config.edn

  • config.clj

Supports fetching external resources with #crispin.core/resorce "url" format.

Conflicts when merging branch and non-branch nodes are resolved into creation of branch node with previous non-branch node put under nil key.

Accepts map with types that parses values into desired format, such as integer, keyword, vector, etc.

Usage

In Lein, [crispin "0.3.4"]

Available functions:

  • cfg - does all the magic mentioned above and returns ordinary immutable map

Utility functions:

  • sget

  • bget

  • nget

  • sget-in

  • bget-in

  • nget-in

License

Copyright © 2015, Jozef Wagner.

The use and distribution terms for this software are covered by the [Eclipse Public License 1.0](http://opensource.org/licenses/eclipse-1.0.php) which can be found in the file epl-v10.html at the root of this distribution.

By using this software in any fashion, you are agreeing to be bound by the terms of this license.

You must not remove this notice, or any other, from this software.