#10: adding datascript to the cljs example app
This commit is contained in:
parent
03f13d1b71
commit
d1d14bc710
9 changed files with 57 additions and 30 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -4,8 +4,7 @@
|
||||||
pom.xml
|
pom.xml
|
||||||
pom.xml.asc
|
pom.xml.asc
|
||||||
.repl*
|
.repl*
|
||||||
/dev-resources
|
/dev-resources/resources/public/js/*
|
||||||
/test/resources/public/js
|
|
||||||
figwheel_server.log
|
figwheel_server.log
|
||||||
*.jar
|
*.jar
|
||||||
*.class
|
*.class
|
||||||
|
|
|
||||||
14
project.clj
14
project.clj
|
|
@ -10,7 +10,8 @@
|
||||||
[org.clojure/clojurescript "1.7.170"]]
|
[org.clojure/clojurescript "1.7.170"]]
|
||||||
|
|
||||||
:profiles {:dev {:source-paths ["dev" "test/app"]
|
:profiles {:dev {:source-paths ["dev" "test/app"]
|
||||||
:dependencies [[ch.qos.logback/logback-classic "1.1.3"]
|
:dependencies [[datascript "0.13.3"]
|
||||||
|
[ch.qos.logback/logback-classic "1.1.3"]
|
||||||
[org.clojure/tools.logging "0.3.1"]
|
[org.clojure/tools.logging "0.3.1"]
|
||||||
[robert/hooke "1.3.0"]
|
[robert/hooke "1.3.0"]
|
||||||
[org.clojure/tools.namespace "0.2.11"]
|
[org.clojure/tools.namespace "0.2.11"]
|
||||||
|
|
@ -28,16 +29,15 @@
|
||||||
{:source-paths ["src" "test"]
|
{:source-paths ["src" "test"]
|
||||||
:figwheel true
|
:figwheel true
|
||||||
|
|
||||||
:compiler {:main mount.example.cljs
|
:compiler {:main mount.example.app
|
||||||
:asset-path "js/compiled/out"
|
:asset-path "js/compiled/out"
|
||||||
:output-to "test/resources/public/js/compiled/mount.js"
|
:output-to "dev-resources/public/js/compiled/mount.js"
|
||||||
:output-dir "test/resources/public/js/compiled/out"
|
:output-dir "dev-resources/public/js/compiled/out"
|
||||||
:optimizations :none
|
:optimizations :none
|
||||||
:source-map true
|
:source-map true
|
||||||
:source-map-timestamp true
|
:source-map-timestamp true}}
|
||||||
:cache-analysis true}}
|
|
||||||
:prod
|
:prod
|
||||||
{:source-paths ["src" "test"]
|
{:source-paths ["src" "test"]
|
||||||
:compiler {:output-to "test/resources/public/js/compiled/mount.js"
|
:compiler {:output-to "dev-resources/public/js/compiled/mount.js"
|
||||||
:optimizations :advanced
|
:optimizations :advanced
|
||||||
:pretty-print false}}}}}})
|
:pretty-print false}}}}}})
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
(ns #?(:clj mount.core
|
(ns mount.core
|
||||||
:cljs ^:figwheel-no-load mount.core)
|
|
||||||
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro])
|
#?(:clj (:require [mount.tools.macro :refer [on-error throw-runtime] :as macro])
|
||||||
:cljs (:require [mount.tools.macro :as macro]
|
:cljs (:require [mount.tools.macro :as macro]
|
||||||
[mount.tools.cljs :as cljs]))
|
[mount.tools.cljs :as cljs]))
|
||||||
|
|
|
||||||
16
test/mount/example/app.cljs
Normal file
16
test/mount/example/app.cljs
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
(ns mount.example.app
|
||||||
|
(:require [mount.core :as mount]
|
||||||
|
[mount.example.app-config]
|
||||||
|
[mount.example.websockets]
|
||||||
|
[mount.example.audit-log :refer [log find-all-logs]]))
|
||||||
|
|
||||||
|
(defn show-log []
|
||||||
|
(.write js/document
|
||||||
|
(interpose "<br/>" (find-all-logs log))))
|
||||||
|
|
||||||
|
(mount/start)
|
||||||
|
|
||||||
|
;; time for websocket to connect
|
||||||
|
(js/setTimeout #(do (mount/stop-except "#'mount.example.audit-log/log")
|
||||||
|
(show-log)) 500)
|
||||||
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
(ns mount.example.app-config
|
(ns mount.example.app-config
|
||||||
|
(:require [mount.example.audit-log :refer [audit log]])
|
||||||
(:require-macros [mount.core :refer [defstate]]))
|
(:require-macros [mount.core :refer [defstate]]))
|
||||||
|
|
||||||
(defn load-config [path]
|
(defn load-config [path]
|
||||||
(println "loading config from " path " (at least pretending)")
|
(audit log :app-config "loading config from '" path "' (at least pretending)")
|
||||||
{:system-a {:uri "ws://echo.websocket.org/"}})
|
{:system-a {:uri "ws://echo.websocket.org/"}})
|
||||||
|
|
||||||
(defstate config :start (load-config "resources/config.end"))
|
(defstate config :start (load-config "resources/config.end"))
|
||||||
|
|
|
||||||
24
test/mount/example/audit_log.cljs
Normal file
24
test/mount/example/audit_log.cljs
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
(ns mount.example.audit-log
|
||||||
|
(:require [datascript.core :as d])
|
||||||
|
(:require-macros [mount.core :refer [defstate]]))
|
||||||
|
|
||||||
|
(defstate log :start (d/create-conn {}))
|
||||||
|
|
||||||
|
(defn audit [db source & msg]
|
||||||
|
(d/transact! @db [{:db/id -1
|
||||||
|
:source source
|
||||||
|
:timestamp (js/Date.)
|
||||||
|
:msg (apply str msg)}]))
|
||||||
|
|
||||||
|
(defn find-source-logs [db source]
|
||||||
|
(d/q '{:find [?t ?msg]
|
||||||
|
:in [$ ?s]
|
||||||
|
:where [[?e :source ?s]
|
||||||
|
[?e :timestamp ?t]
|
||||||
|
[?e :msg ?msg]]}
|
||||||
|
@@db source))
|
||||||
|
|
||||||
|
(defn find-all-logs [db]
|
||||||
|
(->> (map :e (d/datoms @@db :aevt :timestamp))
|
||||||
|
dedupe
|
||||||
|
(d/pull-many @@db '[:timestamp :source :msg])))
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
(ns mount.example.cljs
|
|
||||||
(:require [mount.core :as mount]
|
|
||||||
[mount.example.websockets :refer [system-a]]))
|
|
||||||
|
|
||||||
(enable-console-print!)
|
|
||||||
|
|
||||||
(println "(mount/start)" (mount/start))
|
|
||||||
|
|
||||||
(println "system-a: " @system-a)
|
|
||||||
|
|
||||||
;; time for websocket to connect
|
|
||||||
(js/setTimeout #(println "(mount/stop)" (mount/stop))
|
|
||||||
500)
|
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
(ns mount.example.websockets
|
(ns mount.example.websockets
|
||||||
(:require [mount.example.app-config :refer [config]])
|
(:require [mount.example.app-config :refer [config]]
|
||||||
|
[mount.example.audit-log :refer [audit log]])
|
||||||
(:require-macros [mount.core :refer [defstate]]))
|
(:require-macros [mount.core :refer [defstate]]))
|
||||||
|
|
||||||
(defn connect [uri]
|
(defn connect [uri]
|
||||||
(println "connecting to " uri)
|
(audit log :system-a "connecting to '" uri "'")
|
||||||
(let [ws (js/WebSocket. uri)]
|
(let [ws (js/WebSocket. uri)]
|
||||||
(set! (.-onopen ws) #(println "opening ws @" uri))
|
(set! (.-onopen ws) #(audit log :system-a "opening ws @" uri))
|
||||||
(set! (.-onclose ws) #(println "closing ws @" uri))
|
(set! (.-onclose ws) #(audit log :system-a "closing ws @" uri))
|
||||||
ws))
|
ws))
|
||||||
|
|
||||||
(defn disconnect [ws]
|
(defn disconnect [ws]
|
||||||
(println "disconnecting " @ws)
|
(audit log "disconnecting " @ws)
|
||||||
(.close @ws))
|
(.close @ws))
|
||||||
|
|
||||||
(defstate system-a :start (connect (get-in @config [:system-a :uri]))
|
(defstate system-a :start (connect (get-in @config [:system-a :uri]))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue