Skip to content

Commit 2eb6b46

Browse files
committed
add defaults to ENV macro
1 parent 9cc3676 commit 2eb6b46

File tree

4 files changed

+57
-21
lines changed

4 files changed

+57
-21
lines changed

README.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,10 @@ or system env variables should be set - `export MY_VAR='value'`.
160160
:sym #env-symbol ESYM
161161
:key #env-keyword EKEY
162162
:num #env-number ENUM}
163-
:bool #env-boolean BOOL}
163+
:bool #env-boolean BOOL
164+
;; or with defaults
165+
:string #env [ESTR "Default"]
166+
}
164167
```
165168

166169
## Schema

src/zen/store.clj

+26-11
Original file line numberDiff line numberDiff line change
@@ -263,35 +263,50 @@
263263
(:file (find-file&path ctx pth)))
264264

265265
(defn get-env [env env-name]
266-
(or (get env (keyword env-name))
267-
(System/getenv (str env-name))))
266+
(let [[env-name default] (if (vector? env-name)
267+
env-name
268+
[env-name nil])]
269+
(or (get env (keyword env-name))
270+
(System/getenv (str env-name))
271+
default)))
268272

269273
(defn env-string [env env-name]
270274
(when-let [v (get-env env env-name)]
271275
v))
272276

273277
(defn env-integer [env env-name]
274278
(when-let [v (get-env env env-name)]
275-
(Integer/parseInt v)))
279+
(if (number? v)
280+
v
281+
(Integer/parseInt v))))
276282

277283
(defn env-symbol [env env-name]
278284
(when-let [v (get-env env env-name)]
279-
(symbol v)))
285+
(if (symbol? v)
286+
v
287+
(symbol v))))
280288

281289
(defn env-keyword [env env-name]
282290
(when-let [v (get-env env env-name)]
283-
(keyword v)))
291+
(if (keyword? v)
292+
v
293+
(keyword v))))
284294

285295
(defn env-number [env env-name]
286296
(when-let [v (get-env env env-name)]
287-
(Double/parseDouble v)))
297+
(if (number? v)
298+
v
299+
(Double/parseDouble v))))
288300

289301
(defn env-boolean [env env-name]
290-
(when-let [v (get-env env env-name)]
291-
(cond
292-
(= "true" v) true
293-
(= "false" v) false
294-
:else (throw (ex-info (str "Expected true or false in " env-name ", got " v) {})))))
302+
(let [v (get-env env env-name)]
303+
(when (not (nil? v))
304+
(if (boolean? v)
305+
v
306+
(cond
307+
(= "true" v) true
308+
(= "false" v) false
309+
:else (throw (ex-info (str "Expected true or false in " env-name ", got " v) {})))))))
295310

296311
(defn zen-quote [d]
297312
(with-meta d {:zen/quote true}))

test/test-env.edn

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@
2222
:num #env-number ENUM
2323
:bool-true #env-boolean BOOL_TRUE
2424
:bool-false #env-boolean BOOL_FALSE
25+
26+
:dstring #env [UPS "DS"]
27+
:dhome #env [UPS "DH"]
28+
:dint #env-integer [UPS 4]
29+
:dsym #env-symbol [UPS sym]
30+
:dkey #env-keyword [UPS :key]
31+
:dnum #env-number [UPS 4.0]
32+
:dbool-true #env-boolean [UPS true]
33+
:dbool-false #env-boolean [UPS false]
2534
}
2635

2736

test/zen/env_test.clj

+18-9
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,21 @@
1818

1919
(matcho/match
2020
(zen.core/get-symbol ztx 'test-env/model)
21-
{:zen/tags #{'test-env/schema}
22-
:home string?
23-
:string "extr"
24-
:int 99
25-
:key :some/key
26-
:num 0.02
27-
:bool-true true
28-
:bool-false false
29-
:sym 'test-env/schema}))
21+
{:zen/tags #{'test-env/schema}
22+
:home string?
23+
:string "extr"
24+
:int 99
25+
:key :some/key
26+
:num 0.02
27+
:bool-true true
28+
:bool-false false
29+
:sym 'test-env/schema
30+
31+
:dstring "DS"
32+
:dint 4
33+
:dkey :key
34+
:dbool-false false
35+
:dbool-true true
36+
:dnum 4.0
37+
:dsym 'test-env/sym
38+
:dhome "DH"}))

0 commit comments

Comments
 (0)