-
Notifications
You must be signed in to change notification settings - Fork 1
/
repl.clj
49 lines (42 loc) · 1.43 KB
/
repl.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
(ns sparky-elephants.repl
(:require sparky-elephants.wrap-reload
sparky-elephants.handler
sparky-elephants.server
[ring.middleware file-info file])
(:use sparky-elephants.handler
sparky-elephants.dev))
(def middleware
[['ring.middleware.file/wrap-file "resources"]
['ring.middleware.file-info/wrap-file-info]])
(defn compile-app
[]
(reduce (fn [a [h & args]]
(apply (resolve h) a args))
sparky-elephants.handler/app
middleware))
(defn recompile-handler
"a handler which recompiles the webapp from config on each request"
[]
(fn [request]
(let [handler (compile-app)]
(handler request))))
(defn reload-handler
[]
(sparky-elephants.wrap-reload/wrap-reload (recompile-handler)
{:dirs ["src/clj"]
:additional-ns ['sparky-elephants.handler]}))
(defn parse-port
[p]
(cond
(nil? p) nil
(integer? p) p
(string? p) (Integer/parseInt p)
:else (throw (ex-info (str "can't parse port: " p)) {:port p})))
(defn start-server
"used for starting the server in development mode from REPL"
[& [port]]
(let [port (parse-port port)]
(sparky-elephants.server/start-or-restart-server port {:handler (reload-handler)})
(println (str "You can view the site at http://localhost:" port))))
(defn stop-server []
(sparky-elephants.server/stop-server))