Skip to content

Commit 7da6397

Browse files
committed
Convert module to use Integrant expansions
1 parent a88477a commit 7da6397

5 files changed

Lines changed: 50 additions & 88 deletions

File tree

project.clj

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
:url "https://github.com/duct-framework/module.sql"
44
:license {:name "Eclipse Public License"
55
:url "http://www.eclipse.org/legal/epl-v10.html"}
6-
:dependencies [[org.clojure/clojure "1.10.1"]
7-
[duct/core "0.8.0"]
8-
[duct/database.sql.hikaricp "0.4.0"]
9-
[duct/migrator.ragtime "0.3.2"]
10-
[integrant "0.8.0"]
11-
[medley "1.3.0"]])
6+
:dependencies [[org.clojure/clojure "1.11.4"]
7+
[org.duct-framework/database.sql.hikaricp "0.7.0"]
8+
[org.duct-framework/migrator.ragtime "0.4.0"]
9+
[integrant "0.13.1"]])

src/duct/module/sql.clj

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,15 @@
11
(ns duct.module.sql
2-
(:require [duct.core :as core]
3-
[duct.core.env :as env]
4-
[duct.core.merge :as merge]
5-
[integrant.core :as ig]
6-
[medley.core :as m]))
2+
(:require [integrant.core :as ig]))
73

8-
(def ^:private default-database-url
9-
(or (env/env "JDBC_DATABASE_URL")
10-
(env/env "DATABASE_URL")))
11-
12-
(def ^:private env-strategy
13-
{:production :raise-error
14-
:test :rebase
15-
:development :rebase})
16-
17-
(defn- database-config [jdbc-url]
4+
(defmethod ig/expand-key :duct.module/sql [_ _]
185
{:duct.database.sql/hikaricp
19-
^:demote {:jdbc-url jdbc-url
20-
:logger (ig/ref :duct/logger)}})
21-
22-
(defn- migrator-config [environment]
23-
{:duct.migrator/ragtime
24-
^:demote {:database (ig/ref :duct.database/sql)
25-
:strategy (env-strategy environment)
26-
:logger (ig/ref :duct/logger)
27-
:migrations []}})
28-
29-
(defn- get-environment [config options]
30-
(:environment options (:duct.core/environment config :production)))
31-
32-
(defmethod ig/init-key :duct.module/sql [_ options]
33-
(fn [config]
34-
(core/merge-configs
35-
config
36-
(database-config (:database-url options default-database-url))
37-
(migrator-config (get-environment config options)))))
6+
{:logger (ig/ref :duct/logger)
7+
:jdbcUrl (ig/var 'jdbc-url)}
8+
:duct.migrator/ragtime
9+
{:logger (ig/ref :duct/logger)
10+
:database (ig/ref :duct.database/sql)
11+
:strategy (ig/profile
12+
:main :raise-error
13+
:repl :rebase
14+
:test :rebase)
15+
:migrations-file "migrations.edn"}})

src/integrant/annotations.edn

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{:duct.module/sql
2+
{:duct/vars
3+
{jdbc-url {:arg jdbc-url, :env JDBC_DATABASE_URL}}}}

test/duct/module/sql_test.clj

Lines changed: 31 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,46 @@
11
(ns duct.module.sql-test
2-
(:require [clojure.test :refer :all]
3-
[duct.core :as core]
2+
(:require [clojure.test :refer [deftest is testing]]
43
[duct.module.sql :as sql]
54
[integrant.core :as ig]))
65

7-
(core/load-hierarchy)
8-
9-
(def base-config
10-
{:duct.module/sql {:database-url "jdbc:sqlite:"}})
6+
(ig/load-hierarchy)
117

128
(deftest module-test
13-
(testing "blank config"
9+
(testing "main config"
1410
(is (= {:duct.database.sql/hikaricp
15-
{:jdbc-url "jdbc:sqlite:"
11+
{:jdbcUrl "jdbc:sqlite:"
1612
:logger (ig/ref :duct/logger)}
1713
:duct.migrator/ragtime
1814
{:database (ig/ref :duct.database/sql)
1915
:logger (ig/ref :duct/logger)
2016
:strategy :raise-error
21-
:migrations []}}
22-
(core/build-config base-config))))
17+
:migrations-file "migrations.edn"}}
18+
(-> {:duct.module/sql {}}
19+
(ig/expand (ig/deprofile [:main]))
20+
(ig/bind {'jdbc-url "jdbc:sqlite:"})))))
2321

24-
(testing "development config"
25-
(let [config (assoc base-config :duct.profile/base
26-
{:duct.core/environment :development})]
27-
(is (= {:duct.core/environment :development
28-
:duct.database.sql/hikaricp
29-
{:jdbc-url "jdbc:sqlite:"
30-
:logger (ig/ref :duct/logger)}
31-
:duct.migrator/ragtime
32-
{:database (ig/ref :duct.database/sql)
33-
:logger (ig/ref :duct/logger)
34-
:strategy :rebase
35-
:migrations []}}
36-
(core/build-config config)))))
22+
(testing "repl config"
23+
(is (= {:duct.database.sql/hikaricp
24+
{:jdbcUrl "jdbc:sqlite:"
25+
:logger (ig/ref :duct/logger)}
26+
:duct.migrator/ragtime
27+
{:database (ig/ref :duct.database/sql)
28+
:logger (ig/ref :duct/logger)
29+
:strategy :rebase
30+
:migrations-file "migrations.edn"}}
31+
(-> {:duct.module/sql {}}
32+
(ig/expand (ig/deprofile [:repl]))
33+
(ig/bind {'jdbc-url "jdbc:sqlite:"})))))
3734

3835
(testing "test config"
39-
(let [config (assoc base-config :duct.profile/base
40-
{:duct.core/environment :test})]
41-
(is (= {:duct.core/environment :test
42-
:duct.database.sql/hikaricp
43-
{:jdbc-url "jdbc:sqlite:"
44-
:logger (ig/ref :duct/logger)}
45-
:duct.migrator/ragtime
46-
{:database (ig/ref :duct.database/sql)
47-
:logger (ig/ref :duct/logger)
48-
:strategy :rebase
49-
:migrations []}}
50-
(core/build-config config)))))
51-
52-
(testing "config with existing data"
53-
(let [config (assoc base-config :duct.profile/base
54-
{:duct.migrator/ragtime {:strategy :rebase}})]
55-
(is (= {:duct.database.sql/hikaricp
56-
{:jdbc-url "jdbc:sqlite:"
57-
:logger (ig/ref :duct/logger)}
58-
:duct.migrator/ragtime
59-
{:database (ig/ref :duct.database/sql)
60-
:logger (ig/ref :duct/logger)
61-
:strategy :rebase
62-
:migrations []}}
63-
(core/build-config config))))))
36+
(is (= {:duct.database.sql/hikaricp
37+
{:jdbcUrl "jdbc:sqlite:"
38+
:logger (ig/ref :duct/logger)}
39+
:duct.migrator/ragtime
40+
{:database (ig/ref :duct.database/sql)
41+
:logger (ig/ref :duct/logger)
42+
:strategy :rebase
43+
:migrations-file "migrations.edn"}}
44+
(-> {:duct.module/sql {}}
45+
(ig/expand (ig/deprofile [:test]))
46+
(ig/bind {'jdbc-url "jdbc:sqlite:"}))))))

0 commit comments

Comments
 (0)