Provide enrich interceptor with db coeffect
If no db effect was produced. Fixes #278
This commit is contained in:
parent
8bf4adff07
commit
52396f7518
|
@ -6,6 +6,7 @@
|
|||
<ClojureCodeStyleSettings>{
|
||||
:cljs.core/with-redefs 1
|
||||
:cursive.formatting/align-binding-forms true
|
||||
:cursive.formatting/comment-align-column 0
|
||||
:re-frame.trace/register-trace-cb :only-indent
|
||||
:re-frame.trace/with-trace 1
|
||||
}</ClojureCodeStyleSettings>
|
||||
|
@ -15,6 +16,5 @@
|
|||
</value>
|
||||
</option>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default (2)" />
|
||||
</component>
|
||||
</project>
|
|
@ -12,7 +12,6 @@
|
|||
#### Improvements
|
||||
|
||||
- [#200](https://github.com/Day8/re-frame/pull/200) Remove trailing spaces from console logging
|
||||
- [#248](https://github.com/Day8/re-frame/pull/248) Provide after interceptor with `db` coeffect, if no `db` effect was produced.
|
||||
- Add `re-frame.loggers/get-loggers` function to well, you know.
|
||||
- Added `clear-subscription-cache!` function. This should be used when hot reloading code to ensure that any bad subscriptions that cause rendering exceptions are removed. See [reagent-project/reagent#272](https://github.com/reagent-project/reagent/issues/272) for more details.
|
||||
- Added experimental tracing features. These are subject to change and remain undocumented at the moment. By default they are disabled, and will be completely compiled out by advanced optimisations. To enable them, set a [`:closure-defines`](https://www.martinklepsch.org/posts/parameterizing-clojurescript-builds.html) key to `{"re_frame.trace.trace_enabled_QMARK_" true}`
|
||||
|
@ -22,6 +21,8 @@
|
|||
|
||||
- [#259](https://github.com/Day8/re-frame/pull/259) Fix a bug where registering a subscription would create and close over dependent subscriptions, meaning that they would never be garbage collected, and doing more work than necessary.
|
||||
- Fix a bug where subscribing to a subscription that didn't exist would throw an exception, instead of returning nil.
|
||||
- [#248](https://github.com/Day8/re-frame/pull/248) Provide after interceptor with `db` coeffect, if no `db` effect was produced.
|
||||
- [#278](https://github.com/Day8/re-frame/issues/278) Provide enrich interceptor with `db` coeffect, if no `db` effect was produced.
|
||||
|
||||
## 0.8.0 (2016.08.19)
|
||||
|
||||
|
|
|
@ -208,7 +208,9 @@
|
|||
:after (fn enrich-after
|
||||
[context]
|
||||
(let [event (get-coeffect context :event)
|
||||
db (get-effect context :db)]
|
||||
db (or (get-effect context :db)
|
||||
;; If no db effect is returned, we provide the original coeffect.
|
||||
(get-coeffect context :db))]
|
||||
(->> (f db event)
|
||||
(assoc-effect context :db))))))
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
(ns re-frame.interceptor-test
|
||||
(:require [cljs.test :refer-macros [is deftest]]
|
||||
(:require [cljs.test :refer-macros [is deftest testing]]
|
||||
[reagent.ratom :refer [atom]]
|
||||
[re-frame.interceptor :refer [context get-coeffect assoc-effect assoc-coeffect get-effect]]
|
||||
[re-frame.std-interceptors :refer [trim-v path on-changes after
|
||||
[re-frame.std-interceptors :refer [debug trim-v path enrich after on-changes
|
||||
db-handler->interceptor fx-handler->interceptor]]
|
||||
[re-frame.interceptor :as interceptor]))
|
||||
|
||||
|
@ -48,13 +48,22 @@
|
|||
((:after p))
|
||||
(get-effect :db))))
|
||||
|
||||
;; test #2 - set dbto nil
|
||||
;; test #2 - set db to nil
|
||||
(is (= {:1 {:2 nil}}
|
||||
(-> b4
|
||||
(assoc-effect :db nil) ;; <-- db becomes nil
|
||||
((:after p))
|
||||
(get-effect :db)))))))
|
||||
|
||||
(deftest path-with-no-db-returned
|
||||
(let [path-interceptor (path :a)]
|
||||
(-> (context [] [path-interceptor] {:a 1})
|
||||
(interceptor/invoke-interceptors :before)
|
||||
interceptor/change-direction
|
||||
(interceptor/invoke-interceptors :after)
|
||||
(get-effect :db)
|
||||
(nil?) ;; We don't expect an effect to be added.
|
||||
(is))))
|
||||
|
||||
(deftest test-db-handler-interceptor
|
||||
(let [event [:a :b]
|
||||
|
@ -118,11 +127,18 @@
|
|||
|
||||
|
||||
(deftest test-after
|
||||
(let [after-db-val (atom nil)]
|
||||
(-> (context [:a :b]
|
||||
[(after (fn [db] (reset! after-db-val db)))]
|
||||
{:a 1})
|
||||
(interceptor/invoke-interceptors :before)
|
||||
interceptor/change-direction
|
||||
(interceptor/invoke-interceptors :after))
|
||||
(is (= @after-db-val {:a 1}))))
|
||||
(testing "when no db effect is returned"
|
||||
(let [after-db-val (atom nil)]
|
||||
(-> (context [:a :b]
|
||||
[(after (fn [db] (reset! after-db-val db)))]
|
||||
{:a 1})
|
||||
(interceptor/invoke-interceptors :before)
|
||||
interceptor/change-direction
|
||||
(interceptor/invoke-interceptors :after))
|
||||
(is (= @after-db-val {:a 1})))))
|
||||
|
||||
(deftest test-enrich
|
||||
(testing "when no db effect is returned"
|
||||
(let [ctx (context [] [] {:a 1})]
|
||||
(is (= ::not-found (get-effect ctx :db ::not-found)))
|
||||
(-> ctx (:after (enrich (fn [db] (is (= db {:a 1})))))))))
|
||||
|
|
Loading…
Reference in New Issue