aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvlad <vlad@driver.xyz>2017-04-13 10:22:09 -0700
committervlad <vlad@driver.xyz>2017-04-13 10:22:09 -0700
commit2d0aba0eaf360c521d9bcfbf48dc748b777301d2 (patch)
tree1c88759d0cd63e5009d3173f695011c447a2e500
parentfbf25ed06bf87af2d139ae58f208d9bb5b299e03 (diff)
downloaddriver-core-2d0aba0eaf360c521d9bcfbf48dc748b777301d2.tar.gz
driver-core-2d0aba0eaf360c521d9bcfbf48dc748b777301d2.tar.bz2
driver-core-2d0aba0eaf360c521d9bcfbf48dc748b777301d2.zip
PDW-598 PR comments, refinement for OptionT utils
-rw-r--r--src/main/scala/xyz/driver/core/core.scala22
-rw-r--r--src/main/scala/xyz/driver/core/database/Dal.scala5
-rw-r--r--src/main/scala/xyz/driver/core/execution.scala45
-rw-r--r--src/main/scala/xyz/driver/core/time.scala2
4 files changed, 27 insertions, 47 deletions
diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala
index 3e77c1f..1babd91 100644
--- a/src/main/scala/xyz/driver/core/core.scala
+++ b/src/main/scala/xyz/driver/core/core.scala
@@ -1,6 +1,6 @@
package xyz.driver
-import scalaz.Equal
+import scalaz.{Equal, Monad, OptionT}
package object core {
@@ -25,6 +25,26 @@ package object core {
private[core] trait Tagged[+V, +Tag]
}
type @@[+V, +Tag] = V with tagging.Tagged[V, Tag]
+
+ implicit class OptionTExtensions[H[_]: Monad, T](optionTValue: OptionT[H, T]) {
+
+ def returnUnit: H[Unit] = optionTValue.fold[Unit](_ => (), ())
+
+ def continueIgnoringNone: OptionT[H, Unit] =
+ optionTValue.map(_ => ()).orElse(OptionT.some[H, Unit](()))
+ }
+
+ implicit class MonadicExtensions[H[_]: Monad, T](monadicValue: H[T]) {
+ private implicit val monadT = implicitly[Monad[H]]
+
+ def returnUnit: H[Unit] = monadT(monadicValue)(_ => ())
+
+ def toOptionT: OptionT[H, T] =
+ OptionT.optionT[H](monadT(monadicValue)(value => Option(value)))
+
+ def toUnitOptionT: OptionT[H, Unit] =
+ OptionT.optionT[H](monadT(monadicValue)(_ => Option(())))
+ }
}
package core {
diff --git a/src/main/scala/xyz/driver/core/database/Dal.scala b/src/main/scala/xyz/driver/core/database/Dal.scala
index 0adb4d7..55766db 100644
--- a/src/main/scala/xyz/driver/core/database/Dal.scala
+++ b/src/main/scala/xyz/driver/core/database/Dal.scala
@@ -3,8 +3,8 @@ package xyz.driver.core.database
import slick.lifted.AbstractTable
import scala.concurrent.{ExecutionContext, Future}
+import scalaz.{ListT, Monad, OptionT}
import scalaz.std.scalaFuture._
-import scalaz.{ListT, Monad}
trait Dal {
type T[D]
@@ -13,6 +13,9 @@ trait Dal {
def execute[D](operations: T[D]): Future[D]
def noAction[V](v: V): T[V]
def customAction[R](action: => Future[R]): T[R]
+
+ def customAction[R](action: => OptionT[Future, R]): OptionT[T, R] =
+ OptionT[T, R](customAction(action.run))
}
class FutureDal(executionContext: ExecutionContext) extends Dal {
diff --git a/src/main/scala/xyz/driver/core/execution.scala b/src/main/scala/xyz/driver/core/execution.scala
deleted file mode 100644
index 0cf92fd..0000000
--- a/src/main/scala/xyz/driver/core/execution.scala
+++ /dev/null
@@ -1,45 +0,0 @@
-package xyz.driver.core
-
-import scala.concurrent.{ExecutionContext, Future}
-import scalaz.OptionT
-
-object execution {
-
- implicit class FutureOptionTExtensions[T](future: Future[T])(implicit executionContext: ExecutionContext) {
-
- def toOptionT: OptionT[Future, T] =
- OptionT.optionT[Future](future.map(value => Option(value)))
-
- def returnUnit: Future[Unit] =
- future.map(_ => Option(()))
-
- def returnUnitOpt: OptionT[Future, Unit] =
- OptionT.optionT[Future](future.map(_ => Option(())))
-
- def andEffect[E](effect: Future[E]): Future[T] =
- for {
- result <- future
- _ <- effect
- } yield result
-
- def andEffect[E](effect: OptionT[Future, E]): Future[T] =
- andEffect(effect.run)
- }
-
- def illegalState[T](message: String): OptionT[Future, T] =
- failure[T](new IllegalStateException(message))
-
- def illegalArgument[T](message: String): OptionT[Future, T] =
- failure[T](new IllegalArgumentException(message))
-
- def failure[T](throwable: Throwable): OptionT[Future, T] =
- OptionT.optionT(Future.failed[Option[T]](throwable))
-
- def collectOrNone[T, R](value: T)(f: PartialFunction[T, OptionT[Future, R]]): OptionT[Future, R] =
- f.lift(value).getOrElse(OptionT.optionT(Future.successful(Option.empty[R])))
-
- def collectOrDoNothing[T](value: T)(f: PartialFunction[T, OptionT[Future, Unit]]): OptionT[Future, Unit] =
- f.lift(value).getOrElse(doNothing)
-
- val doNothing = OptionT.optionT(Future.successful(Option(())))
-}
diff --git a/src/main/scala/xyz/driver/core/time.scala b/src/main/scala/xyz/driver/core/time.scala
index 63a6fa4..e1a315d 100644
--- a/src/main/scala/xyz/driver/core/time.scala
+++ b/src/main/scala/xyz/driver/core/time.scala
@@ -30,6 +30,8 @@ object time {
def durationTo(anotherTime: Time): Duration = Duration.apply(anotherTime.millis - millis, TimeUnit.MILLISECONDS)
+ def durationFrom(anotherTime: Time): Duration = Duration.apply(millis - anotherTime.millis, TimeUnit.MILLISECONDS)
+
def toDate(timezone: TimeZone): date.Date = {
val cal = Calendar.getInstance(timezone)
cal.setTimeInMillis(millis)