Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

decouple re-frame and reagent+core.async #107

Closed
wants to merge 44 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
0e182a2
decouple re-frame and reagent+core.async
darwin Aug 15, 2015
a54eaf1
forgot to remove extra apply
darwin Aug 16, 2015
200aef2
remove debug logging
darwin Aug 16, 2015
6bf1aba
fix broken project repo url
darwin Aug 17, 2015
6e9eefd
bump project version to 0.5.0
darwin Aug 17, 2015
b7f78b8
minor refinements in tests
darwin Aug 17, 2015
0f4fcd6
bump todomvc deps
darwin Aug 17, 2015
5ee36de
add checkouts so that todomvc uses local sources
darwin Aug 17, 2015
329a57f
fix comp-middleware
darwin Aug 17, 2015
b62e3ab
integrate cljs-devtools into todomvc
darwin Aug 17, 2015
072ac10
integrate cljs-devtools into simpleexample
darwin Aug 17, 2015
bae4df8
move legacy-subscribe to scaffold
darwin Aug 17, 2015
bd4602f
get-frame-transducer does the work directly
darwin Aug 17, 2015
dc0981a
provide no-loggers for convenience
darwin Aug 17, 2015
c05223f
default loggers should apply all args
darwin Aug 17, 2015
2778d5a
switch frame implementation to use defrecord
darwin Aug 17, 2015
3d72b79
enable figwheel nrepl in examples
darwin Aug 17, 2015
addfb80
rename frame-factory to make-frame
darwin Aug 17, 2015
c09f3c6
minor refinements in core tests
darwin Aug 17, 2015
7a8156d
properly override protocol on defrecord
darwin Aug 17, 2015
568cdd3
move "handler returned nil" check into transducer
darwin Aug 17, 2015
751ccfb
add test "calling a handler which does not exist"
darwin Aug 17, 2015
a56a6e7
give our transducer some love
darwin Aug 17, 2015
173e824
move frame-summary-description to utils
darwin Aug 17, 2015
a52d360
add possibility to unregister subscription/event handlers
darwin Aug 17, 2015
4137a0d
in case of processing only one event we can use transducer directly
darwin Aug 17, 2015
12e9b66
better logging helpers
darwin Aug 17, 2015
049285b
return pure handler for compatibility reasons
darwin Aug 17, 2015
e9f525d
fix a typo
darwin Aug 17, 2015
9b31889
DRY logger helpers
darwin Aug 17, 2015
5f4be3c
use defonce to make scaffold figwheel reloadable
darwin Aug 17, 2015
4a7873d
various tweaks to increase reusability of scaffold code
darwin Aug 17, 2015
f393cc4
move transduce-event(s)-by-resetting-atom to utils
darwin Aug 17, 2015
5ff3204
transducer factory: transducers are parametrized by db-selector
darwin Aug 17, 2015
14314dd
add tests to exercise event processing
darwin Aug 17, 2015
e534e6a
frame polishing
darwin Aug 17, 2015
ff346a8
add frame/process-events
darwin Aug 18, 2015
8f61e93
move log recording helpers under test.utils.log-recording ns
darwin Aug 18, 2015
911ab0f
add tests to exercise triggering subscriptions
darwin Aug 18, 2015
df66bf5
when triggering subscription make sure sub-id matches
darwin Aug 18, 2015
22e91e1
DRY definition of recording-loggers
darwin Aug 18, 2015
dc82af6
refactor resetting atoms
darwin Aug 19, 2015
6ad431f
mark side-effecting functions as such
darwin Aug 19, 2015
069b7cc
missing newline before EOF in utils.cljs
darwin Aug 19, 2015
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ compiled/
misc/
/examples/todomvc/resources/public/js/
/examples/simple/resources/public/js/
figwheel_server.log
1 change: 1 addition & 0 deletions examples/simple/checkouts/re-frame
5 changes: 4 additions & 1 deletion examples/simple/devsrc/simpleexample/dev.cljs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
(ns simpleexample.dev
(:require [simpleexample.core :as example]
[figwheel.client :as fw]))
[figwheel.client :as fw]
[devtools.core :as devtools]))

(devtools/install!)

(fw/start {:on-jsload example/run
:websocket-url "ws://localhost:3449/figwheel-ws"})
34 changes: 18 additions & 16 deletions examples/simple/project.clj
Original file line number Diff line number Diff line change
@@ -1,32 +1,34 @@
(defproject simple-re-frame "0.4.0"
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-3208"]
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.107"]
[reagent "0.5.0"]
[re-frame "0.4.1"]
[figwheel "0.2.6"]]
[figwheel "0.3.7"]
[binaryage/devtools "0.3.0"]]

:plugins [[lein-cljsbuild "1.0.5"]
[lein-figwheel "0.2.6"]]
[lein-figwheel "0.3.7"]]

:hooks [leiningen.cljsbuild]

:profiles {:dev {:cljsbuild
{:builds {:client {:source-paths ["devsrc"]
:compiler {:main simpleexample.dev
:asset-path "js"
:optimizations :none
:source-map true
:source-map-timestamp true}}}}}
:profiles {:dev {:cljsbuild
{:builds {:client {:source-paths ["devsrc"]
:compiler {:main simpleexample.dev
:asset-path "js"
:optimizations :none
:source-map true
:source-map-timestamp true}}}}}

:prod {:cljsbuild
{:builds {:client {:compiler {:optimizations :advanced
:elide-asserts true
:pretty-print false}}}}}}
{:builds {:client {:compiler {:optimizations :advanced
:elide-asserts true
:pretty-print false}}}}}}

:figwheel {:repl false}
:figwheel {:server-port 3440
:nrepl-port 3540}

:clean-targets ^{:protect false} ["resources/public/js"]

:cljsbuild {:builds {:client {:source-paths ["src"]
:cljsbuild {:builds {:client {:source-paths ["checkouts/re-frame/src" "src"]
:compiler {:output-dir "resources/public/js"
:output-to "resources/public/js/client.js"}}}})
1 change: 1 addition & 0 deletions examples/todomvc/checkouts/re-frame
7 changes: 5 additions & 2 deletions examples/todomvc/devsrc/todomvc/dev.cljs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
(ns todomvc.dev
(:require [todomvc.core :as todomvc]
[figwheel.client :as fw]))
[figwheel.client :as fw]
[devtools.core :as devtools]))

(fw/start {:on-jsload todomvc/main
(devtools/install!)

(fw/start {:on-jsload todomvc/main
:websocket-url "ws://localhost:3450/figwheel-ws"})
35 changes: 18 additions & 17 deletions examples/todomvc/project.clj
Original file line number Diff line number Diff line change
@@ -1,36 +1,37 @@
(defproject todomvc-re-frame "0.4.0"
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-3208"]
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.107"]
[reagent "0.5.0"]
[re-frame "0.4.1"]
[figwheel "0.2.6"]
[figwheel "0.3.7"]
[secretary "1.2.3"]
[prismatic/schema "0.4.3"]]
[prismatic/schema "0.4.3"]
[binaryage/devtools "0.3.0"]]

:plugins [[lein-cljsbuild "1.0.5"]
[lein-figwheel "0.2.6"]]
[lein-figwheel "0.3.7"]]

:hooks [leiningen.cljsbuild]

:profiles {:dev {:cljsbuild
{:builds {:client {:source-paths ["devsrc"]
:compiler {:main todomvc.dev
:asset-path "js"
:optimizations :none
:source-map true
:source-map-timestamp true}}}}}
:profiles {:dev {:cljsbuild
{:builds {:client {:source-paths ["devsrc"]
:compiler {:main todomvc.dev
:asset-path "js"
:optimizations :none
:source-map true
:source-map-timestamp true}}}}}

:prod {:cljsbuild
{:builds {:client {:compiler {:optimizations :advanced
:elide-asserts true
:pretty-print false}}}}}}
{:builds {:client {:compiler {:optimizations :advanced
:elide-asserts true
:pretty-print false}}}}}}

:figwheel {:server-port 3450
:repl false}
:nrepl-port 3550}


:clean-targets ^{:protect false} ["resources/public/js"]

:cljsbuild {:builds {:client {:source-paths ["src"]
:cljsbuild {:builds {:client {:source-paths ["checkouts/re-frame/src" "src"]
:compiler {:output-dir "resources/public/js"
:output-to "resources/public/js/client.js"}}}})
6 changes: 3 additions & 3 deletions examples/todomvc/src/todomvc/core.cljs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(ns todomvc.core
(:require-macros [secretary.core :refer [defroute]])
(:require [goog.events :as events]
[reagent.core :as reagent :refer [atom]]
[reagent.core :as reagent]
[re-frame.core :refer [dispatch dispatch-sync]]
[secretary.core :as secretary]
[todomvc.handlers]
Expand All @@ -21,7 +21,7 @@
(def history
(doto (History.)
(events/listen EventType.NAVIGATE
(fn [event] (secretary/dispatch! (.-token event))))
(fn [event] (secretary/dispatch! (.-token event))))
(.setEnabled true)))


Expand All @@ -31,4 +31,4 @@
[]
(dispatch-sync [:initialise-db])
(reagent/render [todomvc.views/todo-app]
(.getElementById js/document "app")))
(.getElementById js/document "app")))
70 changes: 33 additions & 37 deletions project.clj
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
(defproject re-frame "0.4.1"
:description "A Clojurescript MVC-like Framework For Writing SPAs Using Reagent."
:url "https://github.com/Day8/re-frame.git"
:license {:name "MIT"}
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-3211"]
(defproject re-frame "0.5.0-TRANSDUCERS"
:description "A Clojurescript MVC-like Framework For Writing SPAs Using Reagent."
:url "https://github.com/Day8/re-frame.git"
:license {:name "MIT"}
:dependencies [[org.clojure/clojure "1.7.0"]
[org.clojure/clojurescript "1.7.107"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
[reagent "0.5.0"]]

:profiles {:debug {:debug true}
:dev {:dependencies [[spellhouse/clairvoyant "0.0-48-gf5e59d3"]]
:plugins [[lein-cljsbuild "1.0.5"]
[com.cemerick/clojurescript.test "0.3.3"]]}}
:profiles {:debug {:debug true}
:dev {:dependencies [[spellhouse/clairvoyant "0.0-48-gf5e59d3"]]
:plugins [[lein-cljsbuild "1.0.5"]
[com.cemerick/clojurescript.test "0.3.3"]]}}


:clean-targets [:target-path
"run/compiled/demo"]
:clean-targets [:target-path "run/compiled"]

:resource-paths ["run/resources"]
:jvm-opts ["-Xmx1g" "-XX:+UseConcMarkSweepGC"] ;;
:source-paths ["src"]
:test-paths ["test"]


:cljsbuild {:builds [{:id "test" ;; currently bogus, there is no demo or tests
:source-paths ["test"]
:compiler {:output-to "run/compiled/test.js"
:source-map "run/compiled/test.js.map"
:output-dir "run/compiled/test"
:optimizations :simple
:pretty-print true}}]

:test-commands {"rhino" ["rhino" "-opt" "-1" :rhino-runner
"run/compiled/test.js"]
"slimer" ["xvfb-run" "-a" "slimerjs" :runner
"run/compiled/test.js"]
"phantom" ["phantomjs" ; doesn't work with phantomjs < 2.0.0
:runner "run/compiled/test.js"]}}

:aliases {"auto" ["do" "clean," "cljsbuild" "clean," "cljsbuild" "auto" "demo,"]
"once" ["do" "clean," "cljsbuild" "clean," "cljsbuild" "once" "demo,"]
"test-rhino" ["do" "clean," "cljsbuild" "once," "cljsbuild" "test" "rhino"]
"test-slimer" ["do" "clean," "cljsbuild" "once," "cljsbuild" "test" "slimer"] })
:jvm-opts ["-Xmx1g" "-XX:+UseConcMarkSweepGC"]
:source-paths []
:test-paths ["test"]


:cljsbuild {:builds [{:id "test" ;; currently bogus, there is no demo or tests
:source-paths ["src" "test"]
:compiler {:output-to "run/compiled/test.js"
:source-map "run/compiled/test.js.map"
:output-dir "run/compiled/test"
:optimizations :simple ;; https://github.com/cemerick/clojurescript.test/issues/68
:pretty-print true}}]

:test-commands {"rhino" ["rhino" "-opt" "-1" :rhino-runner "run/compiled/test.js"]
"slimer" ["xvfb-run" "-a" "slimerjs" :runner "run/compiled/test.js"]
"phantom" ["phantomjs" :runner "run/compiled/test.js"]}} ; doesn't work with phantomjs < 2.0.0

:aliases {"auto" ["do" "clean," "cljsbuild" "clean," "cljsbuild" "auto" "demo,"]
"once" ["do" "clean," "cljsbuild" "clean," "cljsbuild" "once" "demo,"]
"test-rhino" ["do" "clean," "cljsbuild" "once," "cljsbuild" "test" "rhino"]
"test-slimer" ["do" "clean," "cljsbuild" "once," "cljsbuild" "test" "slimer"]
"test-phantom" ["do" "clean," "cljsbuild" "once," "cljsbuild" "test" "phantom"]})
82 changes: 31 additions & 51 deletions src/re_frame/core.cljs
Original file line number Diff line number Diff line change
@@ -1,56 +1,36 @@
(ns re-frame.core
(:require
[re-frame.handlers :as handlers]
[re-frame.subs :as subs]
[re-frame.router :as router]
[re-frame.utils :as utils]
[re-frame.middleware :as middleware]))
(:require [re-frame.scaffold :as scaffold]))

; this file provides public API to default re-frame setup
; note: by including this namespace, you will get default app-db, default app-frame
; and start default router-loop automatically

;; -- API -------

(def dispatch router/dispatch)
(def dispatch-sync router/dispatch-sync)

(def register-sub subs/register)
(def clear-sub-handlers! subs/clear-handlers!)
(def subscribe subs/subscribe)


(def clear-event-handlers! handlers/clear-handlers!)


(def pure middleware/pure)
(def debug middleware/debug)
(def undoable middleware/undoable)
(def path middleware/path)
(def enrich middleware/enrich)
(def trim-v middleware/trim-v)
(def after middleware/after)
(def log-ex middleware/log-ex)


;; ALPHA - EXPERIMENTAL MIDDLEWARE
(def on-changes middleware/on-changes)


;; -- Logging -----
;; re-frame uses the logging functions: warn, log, error, group and groupEnd
;; By default, these functions map directly to the js/console implementations
;; But you can override with your own (set or subset):
;; (set-loggers! {:warn my-warn :log my-looger ...})
(def set-loggers! utils/set-loggers!)


;; -- Convenience API -------

;; Almost 100% of handlers will be pure, so make it easy to
;; register with "pure" middleware in the correct (left-hand-side) position.
(defn register-handler
([id handler]
(handlers/register-base id pure handler))
([id middleware handler]
(handlers/register-base id [pure middleware] handler)))

(def app-db scaffold/app-db) ; the default instance of app-db
(def app-frame scaffold/app-frame) ; the default instance of re-frame

;; -- API -------

(def router-loop scaffold/router-loop)
(def set-loggers! scaffold/set-loggers!)
(def register-sub scaffold/register-sub)
(def unregister-sub scaffold/unregister-sub)
(def clear-sub-handlers! scaffold/clear-sub-handlers!)
(def subscribe scaffold/subscribe)
(def clear-event-handlers! scaffold/clear-event-handlers!)
(def dispatch scaffold/dispatch)
(def dispatch-sync scaffold/dispatch-sync)
(def register-handler scaffold/register-handler)
(def unregister-handler scaffold/unregister-handler)

(def pure scaffold/pure)
(def debug scaffold/debug)
;(def undoable scaffold/undoable)
(def path scaffold/path)
(def enrich scaffold/enrich)
(def trim-v scaffold/trim-v)
(def after scaffold/after)
(def log-ex scaffold/log-ex)
(def on-changes scaffold/on-changes)

;; start event processing
(scaffold/router-loop)
11 changes: 0 additions & 11 deletions src/re_frame/db.cljs

This file was deleted.