in support-models/src/main/scala/com/gu/salesforce/AddressLineTransformer.scala [10:42]
def combinedAddressLine(addressLine1: Option[String], addressLine2: Option[String]): Option[AddressLine] = {
def singleAddressLine(addressLine: String): AddressLine = {
val pattern: Regex = "([0-9]+) (.+)".r
addressLine match {
case pattern(streetNumber, streetName) => AddressLine(Some(streetNumber), streetName)
case _ => AddressLine(None, addressLine)
}
}
val addressLine1MaybeSplit: Option[AddressLine] = addressLine1.map(singleAddressLine)
val addressLine2MaybeSplit: Option[AddressLine] = addressLine2.map(singleAddressLine)
def concatStreetNames(firstStreetName: String, secondStreetName: String): String =
s"$firstStreetName, $secondStreetName"
val combinedLine = (addressLine1MaybeSplit, addressLine2MaybeSplit) match {
case (None, None) => None
case (Some(line1), None) => Some(line1)
case (None, Some(line2)) => Some(line2)
case (Some(line1), Some(line2)) => {
if (line1.streetNumber.isDefined) {
Some(AddressLine(line1.streetNumber, concatStreetNames(line1.streetName, line2.streetName)))
} else if (line2.streetNumber.isDefined) {
Some(AddressLine(line2.streetNumber, concatStreetNames(line2.streetName, line1.streetName)))
} else {
Some(AddressLine(None, concatStreetNames(line1.streetName, line2.streetName)))
}
}
}
combinedLine
}