diff --git a/src/ring/server/options.clj b/src/ring/server/options.clj index b5017b1..8292f75 100644 --- a/src/ring/server/options.clj +++ b/src/ring/server/options.clj @@ -10,3 +10,9 @@ (or (:port options) (-?> (*env* "PORT") Integer.) (range 3000 3010))) + +(defn open-browser? + "True if a browser should be opened to view the web server. By default + a browser is opened unless the LEIN_NO_DEV environment variable is set." + [options] + (:open-browser? options (not (*env* "LEIN_NO_DEV")))) diff --git a/src/ring/server/standalone.clj b/src/ring/server/standalone.clj index f7f6a25..4c0b79b 100644 --- a/src/ring/server/standalone.clj +++ b/src/ring/server/standalone.clj @@ -1,7 +1,8 @@ (ns ring.server.standalone "Functions to start a standalone Ring server." (:use ring.adapter.jetty - ring.server.options)) + ring.server.options + [clojure.java.browse :only (browse-url)])) (defn- try-port "Try running a server under one port or a list of ports. If a list of ports @@ -15,6 +16,25 @@ (try-port port run-server) (throw ex)))))) +(defn- server-port + "Get the port the server is listening on." + [server] + (-> (.getConnectors server) + (first) + (.getPort))) + +(defn- server-host + "Get the host the server is bound to." + [server] + (-> (.getConnectors server) + (first) + (.getHost) + (or "localhost"))) + +(defn- open-browser-to [server] + (browse-url + (str "http://" (server-host server) ":" (server-port server)))) + (defmacro ^:private in-thread "Execute the body in a new thread and return the Thread object." [& body] @@ -41,5 +61,9 @@ (let [options (merge {:port port} options) server (run-jetty handler options) thread (add-destroy-hook server destroy)] - (if join? (.join thread)) + (println "Started server on port" (server-port server)) + (if (open-browser? options) + (open-browser-to server)) + (if join? + (.join thread)) server))))) diff --git a/test/ring/server/test/standalone.clj b/test/ring/server/test/standalone.clj index dbd9975..716e0dd 100644 --- a/test/ring/server/test/standalone.clj +++ b/test/ring/server/test/standalone.clj @@ -13,7 +13,7 @@ (defn test-server [& [{:as options}]] (let [handler (constantly (response "Hello World"))] - (serve handler (merge {:join? false} options)))) + (serve handler (merge {:join? false, :open-browser? false} options)))) (defn is-server-running-on-port [port] (let [resp (http/get (str "http://localhost:" port)