From a800f706add0cbb21ba5ea22cb7b1ad6c6b68554 Mon Sep 17 00:00:00 2001 From: Joel Coll Costa Date: Mon, 27 Apr 2020 15:29:20 +0200 Subject: [PATCH] Lesson 9 OOP Solution --- .../joel_coll_solution/Email.scala | 15 +++++++++++ .../joel_coll_solution/EmailSpec.scala | 27 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/main/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/Email.scala create mode 100644 src/test/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/EmailSpec.scala diff --git a/src/main/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/Email.scala b/src/main/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/Email.scala new file mode 100644 index 0000000..4304d2a --- /dev/null +++ b/src/main/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/Email.scala @@ -0,0 +1,15 @@ +package tv.codely.scala_intro_examples.lesson_09_oop.exercise_solutions.joel_coll_solution + +object Email { + def apply(emailStr: String): Email = { + if ("""(?=[^\s]+)(?=(\w+)@([\w\.]+\.[\w]+))""".r.findFirstIn(emailStr).isEmpty) + throw new IllegalArgumentException + + val temp = emailStr.split('@') + Email(temp(0), temp(1)) + } +} + +final case class Email(local: String, domain: String) { + val email: String = local + "@" + domain +} diff --git a/src/test/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/EmailSpec.scala b/src/test/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/EmailSpec.scala new file mode 100644 index 0000000..e07d4b1 --- /dev/null +++ b/src/test/tv/codely/scala_intro_examples/lesson_09_oop/exercise_solutions/joel_coll_solution/EmailSpec.scala @@ -0,0 +1,27 @@ +package tv.codely.scala_intro_examples.lesson_09_oop.exercise_solutions.joel_coll_solution + +import org.scalatest.{Matchers, WordSpec} + +final class EmailSpec extends WordSpec with Matchers { + private val localEmail = "local" + private val domainEmail = "domain.com" + private val badDomainEmail = "domaincom" + private val email = localEmail + '@' + domainEmail + private val badEmail = localEmail + '@' + badDomainEmail + + "Email" should { + "return an instance when pass local and domain params" in { + val emailInstance = Email(local = localEmail, domain = domainEmail) + emailInstance.email shouldBe email + } + "return an instance when pass and email" in { + val emailInstance = Email(emailStr = email) + emailInstance.email shouldBe email + } + "throw an exception when pass a bad email" in { + intercept[IllegalArgumentException] { + Email(emailStr = badEmail) + } + } + } +}