def combinedAddressLine()

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
  }