Skip to content

Commit 740f6cf

Browse files
Merge pull request #33 from clj-codes/feat/env-vars
feat: env vars as vectors
2 parents 8a4075c + 51464ce commit 740f6cf

File tree

5 files changed

+55
-2
lines changed

5 files changed

+55
-2
lines changed

resources/config.edn

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{:webserver/port #long #or [#env PORT 3001]
2-
:webserver/allowed-origins ["http://docs.clj.codes" "https://docs.clj.codes"
3-
"http://docs-frontend.fly.dev" "https://docs-frontend.fly.dev"]
2+
:webserver/allowed-origins #csv #or [#env ALLOWED_ORIGINS
3+
["http://docs.clj.codes" "https://docs.clj.codes"
4+
"http://docs-frontend.fly.dev" "https://docs-frontend.fly.dev"]]
45

56
:database {:dbtype "postgres"
67
:dbname #or [#env DB_NAME "postgres"]

src/codes/clj/docs/backend/config.clj

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
(ns codes.clj.docs.backend.config
2+
(:require [aero.core :as aero]
3+
[clojure.string :as string]))
4+
5+
(defn- str-var->vector-var
6+
"Converts a string config variable to a vector of strings, when applicable.
7+
Environment variables are expected to be set as comma-separated values."
8+
[value]
9+
(if (string? value)
10+
(let [split-configs (-> value
11+
(string/split #","))
12+
env-config (->> split-configs
13+
(map string/trim)
14+
(remove empty?))]
15+
env-config)
16+
value))
17+
18+
(defmethod aero/reader 'csv
19+
[_ _ value]
20+
(str-var->vector-var value))

src/codes/clj/docs/backend/server.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns codes.clj.docs.backend.server
22
(:require [codes.clj.docs.backend.components.db-docs :as components.db-docs]
3+
[codes.clj.docs.backend.config]
34
[codes.clj.docs.backend.db.datalevin :refer [read-conn-opts]]
45
[codes.clj.docs.backend.routes :as routes]
56
[com.stuartsierra.component :as component]

test/resources/csv-config.edn

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{:some-config #csv #or [#env SOME "value1, value2"]
2+
:malformed-config #csv #or [#env MALFORMED "value3, value4,value5, "]
3+
:trailing-comma-config #csv #or [#env TRAILING_COMMA "value6, value7,"]}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
(ns unit.codes.clj.docs.backend.config-test
2+
(:require [aero.core :as aero]
3+
[clojure.test :refer [deftest is testing use-fixtures]]
4+
[codes.clj.docs.backend.config :as backend.config]
5+
[matcher-combinators.test :refer [match?]]
6+
[parenthesin.helpers.malli :as helpers.malli]))
7+
8+
(use-fixtures :once helpers.malli/with-intrumentation)
9+
10+
(deftest str-var->vector-var-test
11+
(testing "csv configs should be converted to vectors"
12+
(is (match? ["value1" "value2"]
13+
(#'backend.config/str-var->vector-var "value1, value2"))))
14+
15+
(testing "trailing and extra whitespaces should be ignored"
16+
(is (match? ["value3" "value4" "value5"]
17+
(#'backend.config/str-var->vector-var "value3, value4,value5, "))))
18+
19+
(testing "trailing commas should be ignored"
20+
(is (match? ["value6" "value7"]
21+
(#'backend.config/str-var->vector-var "value6, value7,")))))
22+
23+
(deftest csv-reader-test
24+
(testing "tag literal #csv should turn comma-separated strings into vectors"
25+
(is (match? {:some-config ["value1" "value2"]
26+
:malformed-config ["value3" "value4" "value5"]
27+
:trailing-comma-config ["value6" "value7"]}
28+
(aero/read-config "test/resources/csv-config.edn")))))

0 commit comments

Comments
 (0)