Util for building strings  | (ns metabase.util.string (:require [clojure.string :as str] [metabase.util.i18n :refer [deferred-tru]]))  | 
(set! *warn-on-reflection* true)  | |
Join parts of a sentence together to build a compound one. Options: - stop? (default true): whether to add a period at the end of the sentence Examples: (build-sentence ["foo" "bar" "baz"]) => "foo, bar and baz." (build-sentence ["foo" "bar" "baz"] :stop? false) => "foo, bar and baz" Note: this assumes we're building a sentence with parts from left to right, It might not works correctly with right-to-left language. Also not all language uses command and "and" to represting 'listing'.  | (defn build-sentence
  ([parts]
   (build-sentence parts :stop? true))
  ([parts & {:keys [stop?]
             :or   {stop? true}
             :as options}]
   (when (seq parts)
     (cond
       (= (count parts) 1) (str (first parts) (when stop? \.))
       (= (count parts) 2) (str (first parts) " " (deferred-tru "and")  " " (second parts) (when stop? \.))
       :else               (str (first parts) ", " (build-sentence (rest parts) options)))))) | 
Mask string value behind 'start...end' representation. First four and last four symbols are shown. Even less if string is shorter than 8 chars.  | (defn mask
  ([s]
   (mask s 4))
  ([s start-limit]
   (mask s start-limit 4))
  ([s start-limit end-limit]
   (if (str/blank? s)
     s
     (let [cnt (count s)]
       (str
        (subs s 0 (max 1 (min start-limit (- cnt 2))))
        "..."
        (when (< (+ end-limit start-limit) cnt)
          (subs s (- cnt end-limit) cnt))))))) | 
True if the given string is formatted like a UUID  | (defn valid-uuid?
  [s] (try (java.util.UUID/fromString s) true
           (catch Exception _e false))) | 
Elides the string to the specified length, adding '...' if it exceeds that length.  | (defn elide
  [s max-length]
  (if (> (count s) max-length)
    (str (subs s 0 (- max-length 3)) "...")
    s)) |