New yada
This commit is contained in:
commit
0fc51a53b0
|
@ -0,0 +1 @@
|
||||||
|
config.edn
|
|
@ -0,0 +1,5 @@
|
||||||
|
#http://boot-clj.com
|
||||||
|
#Sat Nov 16 01:10:28 PST 2019
|
||||||
|
BOOT_CLOJURE_NAME=org.clojure/clojure
|
||||||
|
BOOT_VERSION=2.8.3
|
||||||
|
BOOT_CLOJURE_VERSION=1.10.1
|
|
@ -0,0 +1,42 @@
|
||||||
|
(def project "redblackrose")
|
||||||
|
(def version "0.0.1")
|
||||||
|
|
||||||
|
(set-env! :resource-paths #{"resources" "src"}
|
||||||
|
:source-paths #{"src"}
|
||||||
|
:dependencies '[[org.clojure/clojure "1.8.0"]
|
||||||
|
[org.clojure/tools.nrepl "0.2.13"]
|
||||||
|
[adzerk/boot-reload "0.5.2"]
|
||||||
|
[aleph "0.4.3"]
|
||||||
|
[yada "1.2.6"]
|
||||||
|
[aero "1.1.2"]
|
||||||
|
[prismatic/schema "1.1.7"]
|
||||||
|
[com.taoensso/timbre "4.10.0"]]
|
||||||
|
:jar {:main 'redblackrose.core}
|
||||||
|
:aot {:all true})
|
||||||
|
|
||||||
|
(require '[aero.core :refer (read-config)])
|
||||||
|
|
||||||
|
(require '[redblackrose.core])
|
||||||
|
|
||||||
|
(def config
|
||||||
|
(read-config "config.edn"))
|
||||||
|
|
||||||
|
(task-options!
|
||||||
|
repl {:client true :port 5600})
|
||||||
|
|
||||||
|
(defn dev []
|
||||||
|
(-> 'redblackrose.core/-main
|
||||||
|
(resolve)
|
||||||
|
(apply [])))
|
||||||
|
|
||||||
|
(defn start []
|
||||||
|
(comp
|
||||||
|
(speak)
|
||||||
|
(dev)))
|
||||||
|
|
||||||
|
(deftask run
|
||||||
|
[]
|
||||||
|
(comp
|
||||||
|
(repl :server true
|
||||||
|
:port (get-in config [:webserver :port]))
|
||||||
|
(start)))
|
|
@ -0,0 +1,63 @@
|
||||||
|
(ns redblackrose.core
|
||||||
|
(:require [schema.core :as s]
|
||||||
|
[yada.yada :as yada]
|
||||||
|
[taoensso.timbre :as timbre]))
|
||||||
|
|
||||||
|
(timbre/set-config! {:level :info})
|
||||||
|
|
||||||
|
(def server (atom nil))
|
||||||
|
|
||||||
|
(defn widget-resource
|
||||||
|
[initial-value]
|
||||||
|
"simple modifiable widget. look at yada.resources.atom-resource for ways to add
|
||||||
|
last-modified headers and the like"
|
||||||
|
(let [value (atom initial-value)]
|
||||||
|
(yada/resource
|
||||||
|
{:methods {:get {:produces "application/json"
|
||||||
|
:response (fn [ctx] @value)}
|
||||||
|
:post {:parameters {:body {:sprockets s/Num
|
||||||
|
:reaction s/Str
|
||||||
|
(s/optional-key :extras) s/Any}}
|
||||||
|
:consumes "application/json"
|
||||||
|
:response (fn [ctx]
|
||||||
|
(let [body (get-in ctx [:parameters :body])]
|
||||||
|
(reset! value body)))}}})))
|
||||||
|
|
||||||
|
(defn routes
|
||||||
|
[]
|
||||||
|
["/"
|
||||||
|
{"hello" (yada/as-resource "hello from redblackrose")
|
||||||
|
"json" (yada/as-resource {:message "yo! from redblackrose"})
|
||||||
|
"modifiable-string" (yada/as-resource (atom "original value"))
|
||||||
|
"widget" (widget-resource {:sprockets 3
|
||||||
|
:reaction "wow"})
|
||||||
|
"die" (yada/as-resource (fn []
|
||||||
|
(future (Thread/sleep 100) (@server))
|
||||||
|
"shutting down in 100ms..."))}])
|
||||||
|
(defn run
|
||||||
|
"Returns promise to capture lifecycle of server"
|
||||||
|
[]
|
||||||
|
(let [listener (yada/listener (routes) {:port 3000})
|
||||||
|
done (promise)]
|
||||||
|
(reset! server (fn []
|
||||||
|
((:close listener))
|
||||||
|
(deliver done :done)))
|
||||||
|
done))
|
||||||
|
|
||||||
|
(defn -main
|
||||||
|
[& args]
|
||||||
|
(let [done (run)]
|
||||||
|
(println "server running on port 3000... GET \"http://localhost:3000/die\" to kill")
|
||||||
|
@done))
|
||||||
|
|
||||||
|
(comment
|
||||||
|
"to run in a repl, eval this:"
|
||||||
|
(def server-promise (run))
|
||||||
|
"then either wait on the promise:"
|
||||||
|
@server-promise
|
||||||
|
"or with a timeout"
|
||||||
|
(deref server-promise 1000 :timeout)
|
||||||
|
"or close it yourself"
|
||||||
|
(@server))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue