Skip to content

Commit

Permalink
Changed wrap-reload to automatically reload modified source files
Browse files Browse the repository at this point in the history
  • Loading branch information
weavejester committed Oct 2, 2011
1 parent 9841dfd commit f39e24d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 17 deletions.
3 changes: 2 additions & 1 deletion ring-devel/project.clj
Expand Up @@ -3,4 +3,5 @@
:url "http://github.com/mmcgrana/ring" :url "http://github.com/mmcgrana/ring"
:dependencies [[ring/ring-core "0.3.11"] :dependencies [[ring/ring-core "0.3.11"]
[hiccup "0.3.6"] [hiccup "0.3.6"]
[clj-stacktrace "0.2.2"]]) [clj-stacktrace "0.2.2"]
[ns-tracker "0.1.1"]])
26 changes: 15 additions & 11 deletions ring-devel/src/ring/middleware/reload.clj
@@ -1,14 +1,18 @@
(ns ring.middleware.reload (ns ring.middleware.reload
"Reload namespaces before requests.") "Reload modified namespaces on the fly."
(:use [ns-tracker.core :only (ns-tracker)]))


(defn wrap-reload (defn wrap-reload
"Wrap an app such that before a request is passed to the app, each namespace "Reload namespaces of modified files before the request is passed to the
identified by syms in reloadables is reloaded. supplied handler.
Currently this requires that the namespaces in question are being (re)loaded
from un-jarred source files, as apposed to source files in jars or compiled Takes the following options:
classes." :dirs - A list of directories that contain the source files.
[app reloadables] Defaults to [\"src\"]."
(fn [req] [handler & [options]]
(doseq [ns-sym reloadables] (let [source-dirs (:dirs options ["src"])
(require ns-sym :reload)) modified-namespaces (ns-tracker source-dirs)]
(app req))) (fn [request]
(doseq [ns-sym (modified-namespaces)]
(require ns-sym :reload))
(handler request))))
9 changes: 4 additions & 5 deletions ring-devel/test/ring/middleware/test/reload.clj
Expand Up @@ -2,8 +2,7 @@
(:use clojure.test (:use clojure.test
ring.middleware.reload)) ring.middleware.reload))


(def app (deftest wrap-reload-smoke-test
(wrap-reload (constantly :response) '(ring.middleware.reload))) (let [handler (wrap-reload identity)

request {:http-method :get, :uri "/"}]
(deftest wrap-reload-smoke (is (= (handler request) request))))
(is (= :response (app :request))))

0 comments on commit f39e24d

Please sign in to comment.