| (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"}})) | |