All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ai.starlake.utils.Formatter.scala Maven / Gradle / Ivy

package ai.starlake.utils

import ai.starlake.config.Settings

import java.util.regex.Pattern
import scala.collection.mutable.ListBuffer
import scala.util.matching.Regex
object Formatter extends Formatter

trait Formatter {

  /** Split a String into a Map
    * @param str
    *   : the string to be splitted
    * @return
    */
  implicit class RichFormatter(str: String) {
    def richFormat(
      activeEnv: Map[String, Any],
      extraEnvVars: Map[String, Any]
    )(implicit settings: Settings): String = {
      if (settings.appConfig.internal.forall(_.substituteVars))
        (activeEnv ++ extraEnvVars).foldLeft(str) { case (res, (key, value)) =>
          res
            .replaceAll(
              settings.appConfig.sqlParameterPattern.format(key),
              Regex.quoteReplacement(value.toString)
            )
            .replaceAll(
              "\\{\\{\\s*%s\\s*\\}\\}".format(key),
              Regex.quoteReplacement(value.toString)
            )
        }
      else
        str
    }

    def extractVars()(implicit settings: Settings): Set[String] = {
      val pattern = Pattern.compile("\\{\\{\\s*([a-zA-Z_0-9]+)\\s*}}").matcher(str)

      val result = ListBuffer[String]()
      while (pattern.find())
        result.append(pattern.group(1))

      result.toSet
    }

    def splitSql(separator: String = ";\n"): List[String] = {
      str.split(separator).filter(_.trim.nonEmpty).toList
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy