(ns darkleaf.di.tutorial.n-env-test
(:require
[clojure.test :as t]
[darkleaf.di.core :as di]))
Like symbols and keywords, you can also use strings for keys. String keys are resolved into values of environment variables.
(defn root
{::di/kind :component}
[{path "PATH"}]
[:root path])
(def PATH (System/getenv "PATH"))
(t/deftest root-test
(with-open [root (di/start `root)]
(t/is (= [:root PATH] @root))))
As of 2.3.0, there is di/env-parsing registry middleware
to parse values of environment variables.
You can define a dependency of env as a string key like "PORT",
and its value will be a string.
With this middleware, you can define it as a qualified keyword like :env.long/PORT,
and its value will be a number.
(defn jetty
{::di/kind :component}
[{port :env.long/PORT
:or {port 8080}}]
[:jetty port])
(t/deftest jetty-test
(with-open [jetty (di/start `jetty
(di/env-parsing {:env.long parse-long}))]
(t/is (= [:jetty 8080] @jetty)))
(with-open [jetty (di/start `jetty
(di/env-parsing :env.long parse-long)
{"PORT" "8081"})]
(t/is (= [:jetty 8081] @jetty))))
(defn required-env
{::di/kind :component}
[{enabled :env.bool/ENABLED}]
[:enabled enabled])
(defn optional-env
{::di/kind :component}
[{enabled :env.bool/ENABLED
:or {enabled true}}]
[:enabled enabled])
(t/deftest env-test
(t/is (thrown? clojure.lang.ExceptionInfo
(di/start `required-env
(di/env-parsing {:env.bool #(= "true" %)}))))
(with-open [sys (di/start `required-env
(di/env-parsing {:env.bool #(= "true" %)})
{"ENABLED" "false"})]
(t/is (= [:enabled false] @sys)))
(with-open [sys (di/start `optional-env
(di/env-parsing {:env.bool #(= "true" %)}))]
(t/is (= [:enabled true] @sys)))
(with-open [sys (di/start `optional-env
(di/env-parsing {:env.bool #(= "true" %)})
{"ENABLED" "false"})]
(t/is (= [:enabled false] @sys))))
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |