in support-internationalisation/src/main/scala/com/gu/i18n/CountryGroup.scala [359:395]
def byCountryCode(c: String): Option[CountryGroup] = allGroups.find(_.countries.exists(_.alpha2 == c))
def byFastlyCountryCode(c: String): Option[CountryGroup] =
byCountryCode(c) orElse Some(CountryGroup.Europe).filter(_ => c == "EU")
def byCountryNameOrCode(str: String): Option[CountryGroup] =
allGroups.find(_.countries.exists(_.name == str)) orElse byCountryCode(str)
def byId(id: String): Option[CountryGroup] = allGroups.find(_.id == id)
def byName(name: String): Option[CountryGroup] = allGroups.find(_.name == name)
def availableCurrency(currencies: Set[Currency])(country: Country): Option[Currency] =
byCountryCode(country.alpha2).map(_.currency).filter(currencies)
def byOptimisticCountryNameOrCode(str: String): Option[Country] = {
if (str == null) None
else {
val clean = str.replace(".", "").trim
val name = clean.toLowerCase
val nameAnd = name.replace(" & ", " and ")
val nameAmpersand = name.replace(" and ", " & ")
countryByCode(clean) orElse countryByName(name) orElse countryByName(nameAnd) orElse countryByName(
nameAmpersand,
) orElse (name match {
case _ if name equals "united states of america" => Some(Country.US)
case _ if name endsWith "of ireland" => Some(Country.Ireland)
case _ if name == "uk" => Some(Country.UK)
case _ if name == "great britain" => Some(Country.UK)
case _ if name == "viet nam" => countryByCode("VN")
case _ if name startsWith "the " => countryByName(name.replaceFirst("the ", ""))
case _ if name == "russian federation" => countryByCode("RU")
case _ => None
})
}
}