This commit is contained in:
Carolyn Grey Bridgette Knight-Serrano 2019-11-16 01:11:38 -08:00
commit 0fc51a53b0
Signed by: gigavinyl
GPG Key ID: 50858748146544CB
4 changed files with 111 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
config.edn

5
boot.properties Normal file
View File

@ -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

42
build.boot Normal file
View File

@ -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)))

63
src/clj/core.clj Normal file
View File

@ -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))