follow best practices of re-frame and give an app-db a schema

This commit is contained in:
Artur Girenko 2015-12-13 22:49:54 +01:00
parent bef4f05188
commit da97f17a0a
4 changed files with 33 additions and 5 deletions

View File

@ -232,11 +232,14 @@ init = (projName) ->
handlersPath = "src/#{projNameUs}/handlers.cljs"
subsPath = "src/#{projNameUs}/subs.cljs"
dbPath = "src/#{projNameUs}/db.cljs"
exec "cp #{resources}cljs/handlers.cljs #{handlersPath}"
exec "cp #{resources}cljs/subs.cljs #{subsPath}"
exec "cp #{resources}cljs/db.cljs #{dbPath}"
edit handlersPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
edit subsPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
edit dbPath, [[projNameHyphRx, projNameHyph], [projNameRx, projName]]
fs.mkdirSync 'src/cljsjs'
exec "echo '(ns cljsjs.react)' > src/cljsjs/react.cljs"
@ -283,8 +286,7 @@ init = (projName) ->
exec 'npm i'
fs.unlinkSync '.gitignore'
exec "
node -e
exec "node -e
\"require('react-native/local-cli/cli').init('.', '#{projName}')\"
"

8
resources/cljs/db.cljs Normal file
View File

@ -0,0 +1,8 @@
(ns $PROJECT_NAME_HYPHENATED$.db
(:require [schema.core :as s :include-macros true]))
;; schema of app-db
(def schema {:greeting s/Str})
;; initial state of app-db
(def app-db {:greeting "Hello Clojure in iOS and Android!"})

View File

@ -1,15 +1,32 @@
(ns $PROJECT_NAME_HYPHENATED$.handlers
(:require
[re-frame.core :refer [register-handler path trim-v after dispatch]]))
[re-frame.core :refer [register-handler after]]
[schema.core :as s :include-macros true]
[$PROJECT_NAME_HYPHENATED$.db :refer [app-db schema]]))
(def app-db {:greeting "Hello Clojure in iOS and Android!"})
;; -- Middleware ------------------------------------------------------------
;;
;; See https://github.com/Day8/re-frame/wiki/Using-Handler-Middleware
;;
(defn check-and-throw
"throw an exception if db doesn't match the schema."
[a-schema db]
(if-let [problems (s/check a-schema db)]
(throw (js/Error. (str "schema check failed: " problems)))))
(def validate-schema-mw
(after (partial check-and-throw schema)))
;; -- Handlers --------------------------------------------------------------
(register-handler
:initialize-db
validate-schema-mw
(fn [_ _]
app-db))
(register-handler
:set-greeting
validate-schema-mw
(fn [db [_ value]]
(assoc db :greeting value)))

View File

@ -6,7 +6,8 @@
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.170"]
[reagent "0.5.1" :exclusions [cljsjs/react]]
[re-frame "0.5.0"]]
[re-frame "0.6.0"]
[prismatic/schema "1.0.4"]]
:plugins [[lein-cljsbuild "1.1.1"]
[lein-figwheel "0.5.0-2"]]
:clean-targets ["target/" "index.ios.js" "index.android.js"]