(ns dev.with-perm (:require [methodical.core :as m] [toucan2.insert :as insert] [clojure.spec.alpha :as s] [toucan2.model :as model] [toucan2.tools.with-temp :as t2.with-temp] [toucan2.types :as types] [toucan2.util :as u])) | |
(comment types/keep-me) | |
Returns the default attributes to use when inserting a model with [[with-perm]]. | (m/defmulti with-perm-defaults {:arglists '([model]) :defmethod-arities #{1} :dispatch-value-spec (s/nonconforming ::types/dispatch-value.model)} u/dispatch-on-first-arg) |
(m/defmethod with-perm-defaults :default [model] (t2.with-temp/with-temp-defaults model)) | |
Implementation of [[with-perm]]. Behaves like [[do-with-temp*]], but doesn't delete things.
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-perm-defaults]]. If you need to do special setup when
using [[with-perm]], you can implement a ```clj (m/defmethod do-with-perm* :before :default [_model _explicit-attributes f] (set-up-db!) f) ```
```clj (merge {} (with-perm-defaults model) explict-attributes) ``` | (m/defmulti do-with-perm* {:arglists '([model₁ explicit-attributes]) :defmethod-arities #{2} :dispatch-value-spec (s/nonconforming ::types/dispatch-value.model)} u/dispatch-on-first-arg) |
(m/defmethod do-with-perm* :default [model explicit-attributes] (assert (some? model) (format "%s model cannot be nil." `with-perm)) (when (some? explicit-attributes) (assert (map? explicit-attributes) (format "attributes passed to %s must be a map." `with-perm))) (let [defaults (with-perm-defaults model) merged-attributes (merge {} defaults explicit-attributes)] (first (insert/insert-returning-instances! model merged-attributes)))) | |
Inserts the model with attributes merged into it's with-temp-defaults. This is the primary way to insert models
for load testing. If you need to do something special for a particular model, you can implement | (defn with-perm [modelable attributes] (let [model (model/resolve-model modelable)] (do-with-perm* model attributes))) |