A bunch of Clojure utility functions and packages.
Same as clojure.core except for Vectors: mapcatv removev
restv
concatv and consv.
Applies the function f to each node in the tree, bottom-up.
Find the children using child-key and if child-key is missing, use :children.
Like or except returns the first computed value that is not nil... allows threading
false through.
execute a function after a certain number of milliseconds
Generate a monotonically increasing GUID with a ton of randomness.
dragonmark.util.props is a nice properties file system that will look for
the properties file based on username, machine name, and run mode:
If the property_file environment variable is set, it
should be the name of the property file.
If the /.dockerenv file exists, the /data/default.props file
is checked. If you're running in a Docker container, you can
put the properties file in /data/default.props and it will be
used.
Files are searched in this order:
(str "/props/" mode-name "." user-name "." host-name)
(str "/props/" mode-name "." user-name)
(str "/props/" mode-name "." host-name)
(str "/props/" mode-name ".default" )
(str "/props/" user-name )
"/props/default"
(str "/" mode-name "." user-name "." host-name)
(str "/" mode-name "." user-name)
(str "/" mode-name "." host-name)
(str "/" mode-name ".default" )
(str "/" user-name )
"/default"
So /props/dpp.props is my properties file. But test.default.props
is the properties file that contains properties used in tests.
Both names, prod and production are recognized as production modes.
The properties file contains a single S-expression (usually a map)
with all the properties. In dev mode, the file is checked every second
for updates. In non-dev mode, it's checked every minute for changes.
You can access the properties via: @dragonmark.util.props/info.
For example, to get the database connection property: (:db @dragonmark.util.props/info).
You can also set up your own atom to watch for changes to the properties:
(def db
(let [a (atom nil)]
(dragonmark.util.props/on-prop-change a [:info :db])
a))
Each time the properties file changes, the db atom will be updated.
Dragonmark is dual licensed under the Eclipse Public License, just like Clojure, and the LGPL 2, your choice.
A side note about licenses... my goal with the license is to make sure the code is usable in a very wide variety of projects. Both the EPL and the LGPL have contribute-back clauses. This means if you make a change to Dragonmark, you have to make your changes public. But you can use Dragonmark in any project, open or closed. Also, the dual license is meant to allow Dragonmark to be used in GPL/AGPL projects... and there are some "issues" between the FSF and the rest of the world about how open the EPL, the Apache 2, etc. licenses are. I'm not getting caught in that deal.
(c) 2014 WorldWide Conferencing, LLC