(ns metabase.channel.params (:require [clojure.string :as str] [metabase.driver.common.parameters :as params] [metabase.driver.common.parameters.parse :as params.parse])) | |
(defn- param-name->path [param-name] (->> (str/split param-name #"\.") (mapv keyword))) | |
Substitute parameters in text with values from context. Params are specified using handlebars syntax, e.g. {{param}}. | (defn substitute-params [text context & {:keys [ignore-missing?] :or {ignore-missing? false} :as _opts}] ;; NOTE: in case the syntax involves, consider using the handlebars syntax and use stencil for substitution (let [components (params.parse/parse text)] (str/join "" (for [c components] (if (params/Param? c) (or (get-in context (param-name->path (:k c))) (when-not ignore-missing? (throw (ex-info (str "Missing parameter: " (:k c)) {:param (:k c)})))) c))))) |
(comment (substitute-params "Hello {{user.email}}!" {:user {:email "ngoc@metabase.com"}})) | |