aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-22 17:27:40 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-12-22 17:27:40 -0500
commita4c857745817092ccb9d2b12d83df74a0f2e25e5 (patch)
tree72f85d7713de52c1f67ea6be202fe657a4e120f8
parent687919e7c163e1ff8a002f1a2c24e4b37f75f20d (diff)
downloaddriver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.tar.gz
driver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.tar.bz2
driver-core-a4c857745817092ccb9d2b12d83df74a0f2e25e5.zip
add Date#toString and Date.fromString
-rw-r--r--src/main/scala/xyz/driver/core/date.scala13
-rw-r--r--src/main/scala/xyz/driver/core/json.scala2
-rw-r--r--src/test/scala/xyz/driver/core/CoreTest.scala10
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)