Skip to content

Instantly share code, notes, and snippets.

@nhusher
Last active August 29, 2015 14:06
Show Gist options
  • Save nhusher/5ec1b6592eb0966c9a22 to your computer and use it in GitHub Desktop.
Save nhusher/5ec1b6592eb0966c9a22 to your computer and use it in GitHub Desktop.
(ns crm-clj.core
(:require [clojure.tools.namespace.repl :refer [refresh]]
[liberator.core :refer [resource defresource]]
[ring.middleware.params :refer [wrap-params]]
[compojure.core :refer [defroutes ANY]]
[ring.adapter.jetty :refer [run-jetty]]
[com.stuartsierra.component :as component ]))
(defn handler [request]
{ :status 200
:headers { "Content-Type" "text/html" }
:body "HELLO WORLD" })
(defrecord Webserver [ route-handler port server ]
component/Lifecycle
(start [ component ]
(let [j (run-jetty route-handler { :port port, :join? false })]
(prn "Started jetty on port" port)
(assoc component :server j)))
(stop [ component ]
(prn "Stopping jetty.")
(.stop server)
(assoc component :server nil)))
(defn make-webserver
([] (map->Webserver { :port 8080 })))
(defn make-system [config-options]
(component/system-map
:route-handler handler
:webserver (component/using
(make-webserver)
[ :route-handler ])))
;; -- Stolen from Stuart Sierra --
(def system nil)
(defn init [] (alter-var-root #'system (constantly (make-system {}))))
(defn start [] (alter-var-root #'system (fn [s] (when s (component/start s)))))
(defn stop [] (alter-var-root #'system (fn [s] (when s (component/stop s)))))
(defn go [] (init) (start))
(defn reset [] (stop) (refresh :after 'crm-clj.core/go))
; (go) ;; -- Start the system the first time in the repl.
; (reset) ;; -- Reload the system when something has changed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment