This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| case class EmailAddress(emailAddress: String) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> EmailClient.sendEmail(from = EmailAddress("[email protected]"), to = EmailAddress("[email protected]"))( | |
| """ | |
| Hello, | |
| Hope you're doing well! | |
| Best, | |
| Luis | |
| """ | |
| ) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> EmailAddress("@example.com") | |
| res0: EmailAddress = EmailAddress(@example.com) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| object EmailAddress { | |
| // Regex that captures the "official" format standard (RFC 5322) that email addresses must adhere to | |
| private val EmailRegex = """(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])""".r | |
| private def isValidAddress(emailAddress: String): Boolean = { | |
| EmailRegex.findAllMatchIn(emailAddress).length == 1 | |
| } | |
| def apply(emailAddress: String): EmailAddress = { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> EmailAddress("@example.com") | |
| java.lang.IllegalArgumentException: requirement failed: Invalid email address | |
| at scala.Predef$.require(Predef.scala:277) | |
| at EmailAddress$.apply(<pastie>:23) | |
| ... 36 elided |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def apply(emailAddress: String): Either[String, EmailAddress] = { | |
| if (isValidAddress(emailAddress)) { | |
| Right(new EmailAddress(emailAddress)) | |
| } else { | |
| Left("Invalid email address") | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> EmailAddress("@example.com") | |
| res0: Either[String,EmailAddress] = Left(Invalid email address) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> val emailAddress = EmailAddress("[email protected]") | |
| emailAddress: Either[String,EmailAddress] = Right(EmailAddress([email protected])) | |
| scala> emailAddress.map(_.copy(emailAddress = "@example.com")) | |
| res0: scala.util.Either[String,EmailAddress] = Right(EmailAddress(@example.com)) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| case class EmailAddress(emailAddress: String) { | |
| def copy(emailAddress: String = emailAddress): Either[String, EmailAddress] = { | |
| EmailAddress(emailAddress) | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| scala> EmailAddress("[email protected]").map(_.copy(emailAddress = "@example.com")) | |
| res0: scala.util.Either[String,Either[String,EmailAddress]] = Right(Left(Invalid email address)) | |
| scala> for { | |
| | e1 <- EmailAddress("[email protected]") | |
| | e2 <- e1.copy(emailAddress = "@example.com") | |
| | } yield e2 | |
| res1: scala.util.Either[String,EmailAddress] = Left(Invalid email address) |