(ns metabase.util.humanization (:require [clojure.string :as str] [metabase.util :as u])) | |
Convert a name, such as (name->human-readable-name :simple "cool_toucans") ;-> "Cool Toucans" ;; specifiy a different strategy: (name->human-readable-name :none "cooltoucans") ;-> "cooltoucans" | (defmulti name->human-readable-name {:arglists '([strategy s])} (fn [strategy _s] (keyword strategy))) |
(def ^:private ^:const acronyms #{"id" "url" "ip" "uid" "uuid" "guid"}) | |
(defn- capitalize-word [word] (if (contains? acronyms (u/lower-case-en word)) (u/upper-case-en word) ;; We are assuming that ALL_UPPER_CASE means we should be Title Casing (if (= word (u/upper-case-en word)) (str/capitalize word) (str (str/capitalize (subs word 0 1)) (subs word 1))))) | |
simple replaces hyphens and underscores with spaces and capitalizes | (defmethod name->human-readable-name :simple [_strategy s] ;; explode on hyphens, underscores, and spaces (when (seq s) (let [humanized (str/join " " (for [part (str/split s #"[-_\s]+") :when (not (str/blank? part))] (capitalize-word part)))] (if (str/blank? humanized) s humanized)))) |
| (defmethod name->human-readable-name :none [_strategy s] s) |