diff options
author | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-22 17:27:40 -0500 |
---|---|---|
committer | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-22 17:27:40 -0500 |
commit | a4c857745817092ccb9d2b12d83df74a0f2e25e5 (patch) | |
tree | 72f85d7713de52c1f67ea6be202fe657a4e120f8 /src | |
parent | 687919e7c163e1ff8a002f1a2c24e4b37f75f20d (diff) | |
download | driver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.tar.gz driver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.tar.bz2 driver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.zip |
add Date#toString and Date.fromString
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/xyz/driver/core/date.scala | 13 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala | 2 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/CoreTest.scala | 10 |
3 files changed, 23 insertions, 2 deletions
diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala index ab19074..bb88501 100644 --- a/src/main/scala/xyz/driver/core/date.scala +++ b/src/main/scala/xyz/driver/core/date.scala @@ -21,5 +21,16 @@ object date { val DECEMBER = tagMonth(Calendar.DECEMBER) } - final case class Date(year: Int, month: Month, day: Int) + final case class Date(year: Int, month: Month, day: Int) { + override def toString = f"$year%04d-${month + 1}%02d-$day%02d" + } + + object Date { + def fromString(dateString: String): Option[Date] = { + util.Try(dateString.split("-").map(_.toInt)).toOption collect { + case Array(year, month, day) if (1 to 12 contains month) && (1 to 31 contains day) => + Date(year, tagMonth(month - 1), day) + } + } + } } diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 5833383..039f650 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -77,7 +77,7 @@ object json { } } - implicit val dateFormat = jsonFormat3(Date) + implicit val dateFormat = jsonFormat3(Date.apply) def RevisionInPath[T]: PathMatcher1[Revision[T]] = PathMatcher("""[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}""".r) flatMap { string => diff --git a/src/test/scala/xyz/driver/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index e210887..e25bdbe 100644 --- a/src/test/scala/xyz/driver/core/CoreTest.scala +++ b/src/test/scala/xyz/driver/core/CoreTest.scala @@ -78,6 +78,16 @@ class CoreTest extends FlatSpec with Matchers with MockitoSugar { timestamp.toDate(EST) should not be timestamp.toDate(PST) } + "Date" should "correctly convert to and from String" in { + + import xyz.driver.core.generators.nextDate + import date._ + + for (date <- 1 to 100 map (_ => nextDate())) { + Some(date) should be(Date.fromString(date.toString)) + } + } + "Name" should "have equality and ordering working correctly" in { (Name[String]("foo") === Name[String]("foo")) should be(true) |