(do-with-temp* model₁ explicit-attributes f)
Implementation of with-temp
. You can implement this if you need to do some sort of special behavior for a
particular model. But normally you would just implement with-temp-defaults
. If you need to do special setup when
using with-temp
, you can implement a :before
method:
(m/defmethod do-with-temp* :before :default
[_model _explicit-attributes f]
(set-up-db!)
f)
explicit-attributes
are the attributes specified in the with-temp
form itself, any may be nil
. The default
implementation merges the attributes from with-temp-defaults
like
(merge {} (with-temp-defaults model) explict-attributes)
do-with-temp* is defined in toucan2.tools.with-temp
(toucan2/tools/with_temp.clj:23).
It caches methods using a methodical.impl.cache.watching.WatchingCache
.
It uses the method combination methodical.impl.combo.threaded.ThreadingMethodCombination
with the threading strategy :thread-last
.
It uses the dispatcher methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher
with hierarchy #'clojure.core/global-hierarchy
and prefs {}
.
The default value is :default
.
It uses the method table methodical.impl.method_table.standard.StandardMethodTable
.
These primary methods are known:
:default
, defined in toucan2.tools.with-temp
(toucan2/tools/with_temp.clj:44)Implementation of [[with-temp]]. You can implement this if you need to do some sort of special behavior for a particular model. But normally you would just implement [[with-temp-defaults]]. If you need to do special setup when using [[with-temp]], you can implement a `:before` method: ```clj (m/defmethod do-with-temp* :before :default [_model _explicit-attributes f] (set-up-db!) f) ``` `explicit-attributes` are the attributes specified in the `with-temp` form itself, any may be `nil`. The default implementation merges the attributes from [[with-temp-defaults]] like ```clj (merge {} (with-temp-defaults model) explict-attributes) ``` do-with-temp* is defined in [[toucan2.tools.with-temp]] (toucan2/tools/with_temp.clj:23). It caches methods using a `methodical.impl.cache.watching.WatchingCache`. It uses the method combination `methodical.impl.combo.threaded.ThreadingMethodCombination` with the threading strategy `:thread-last`. It uses the dispatcher `methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher` with hierarchy `#'clojure.core/global-hierarchy` and prefs `{}`. The default value is `:default`. It uses the method table `methodical.impl.method_table.standard.StandardMethodTable`. These primary methods are known: * `:default`, defined in [[toucan2.tools.with-temp]] (toucan2/tools/with_temp.clj:44)
(with-temp [modelable temp-object-binding attributes & more] & body)
Define a temporary instance of a model and bind it to temp-object-binding
. The object is inserted
using [[insert/insert-returning-instances!]] using the values from with-temp-defaults
merged with a map of
attributes
. At the conclusion of body
, the object is deleted. This is primarily intended for usage in tests, so
this adds a [[clojure.test/testing]] context around body
as well.
with-temp
can create multiple objects in one form if you pass additional bindings.
temp-object-binding
and attributes
are optional, and default to _
and nil
, respectively. If you're creating
multiple objects at once these must be explicitly specified.
Examples:
;;; use the with-temp-defaults for :models/bird
(with-temp [:models/bird bird]
(do-something bird))
;;; use the with-temp-defaults for :models/bird merged with {:name "Lucky Pigeon"}
(with-temp [:models/bird bird {:name "Lucky Pigeon"}]
(do-something bird))
;;; define multiple instances at the same time
(with-temp [:models/bird bird-1 {:name "Parroty"}
:models/bird bird-2 {:name "Green Friend", :best-friend-id (:id bird-1)}]
(do-something bird))
If you want to implement custom behavior for a model other than default values, you can implement do-with-temp*
.
Define a temporary instance of a model and bind it to `temp-object-binding`. The object is inserted using [[insert/insert-returning-instances!]] using the values from [[with-temp-defaults]] merged with a map of `attributes`. At the conclusion of `body`, the object is deleted. This is primarily intended for usage in tests, so this adds a [[clojure.test/testing]] context around `body` as well. [[with-temp]] can create multiple objects in one form if you pass additional bindings. `temp-object-binding` and `attributes` are optional, and default to `_` and `nil`, respectively. If you're creating multiple objects at once these must be explicitly specified. Examples: ```clj ;;; use the with-temp-defaults for :models/bird (with-temp [:models/bird bird] (do-something bird)) ;;; use the with-temp-defaults for :models/bird merged with {:name "Lucky Pigeon"} (with-temp [:models/bird bird {:name "Lucky Pigeon"}] (do-something bird)) ;;; define multiple instances at the same time (with-temp [:models/bird bird-1 {:name "Parroty"} :models/bird bird-2 {:name "Green Friend", :best-friend-id (:id bird-1)}] (do-something bird)) ``` If you want to implement custom behavior for a model other than default values, you can implement [[do-with-temp*]].
(with-temp-defaults model)
with-temp-defaults is defined in toucan2.tools.with-temp
(toucan2/tools/with_temp.clj:15).
It caches methods using a methodical.impl.cache.watching.WatchingCache
.
It uses the method combination methodical.impl.combo.threaded.ThreadingMethodCombination
with the threading strategy :thread-last
.
It uses the dispatcher methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher
with hierarchy #'clojure.core/global-hierarchy
and prefs {}
.
The default value is :default
.
It uses the method table methodical.impl.method_table.standard.StandardMethodTable
.
These primary methods are known:
:default
, defined in toucan2.tools.with-temp
(toucan2/tools/with_temp.clj:19)with-temp-defaults is defined in [[toucan2.tools.with-temp]] (toucan2/tools/with_temp.clj:15). It caches methods using a `methodical.impl.cache.watching.WatchingCache`. It uses the method combination `methodical.impl.combo.threaded.ThreadingMethodCombination` with the threading strategy `:thread-last`. It uses the dispatcher `methodical.impl.dispatcher.multi_default.MultiDefaultDispatcher` with hierarchy `#'clojure.core/global-hierarchy` and prefs `{}`. The default value is `:default`. It uses the method table `methodical.impl.method_table.standard.StandardMethodTable`. These primary methods are known: * `:default`, defined in [[toucan2.tools.with-temp]] (toucan2/tools/with_temp.clj:19)
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close