Skip to content

Commit dd40719

Browse files
author
Fede Fernández
authored
Returns a FreeS[M, ResultSet] from the interpolator (#86)
* Allows returning a free program from the interpolator * Releases first version
1 parent 29eeb68 commit dd40719

File tree

3 files changed

+36
-15
lines changed

3 files changed

+36
-15
lines changed

core/src/main/scala/query/interpolator/package.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ package object interpolator {
4141
E: MonadError[M, Throwable]): SessionAPI.Op ~> M =
4242
sessionAPIHandler andThen apiInterpreter[M, Session](S)
4343

44-
def asResultSet[M[_]](
44+
def asResultSet[M[_]](implicit API: SessionAPI[M]): FreeS[M, ResultSet] =
45+
API.executeWithByteBuffer(tuple._1, tuple._2)
46+
47+
def attemptResultSet[M[_]](
4548
implicit API: SessionAPI[SessionAPI.Op],
4649
S: Session,
4750
AC: AsyncContext[M],

core/src/test/scala/query/interpolator/InterpolatorImplicitSpec.scala

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,14 @@ package query.interpolator
1919

2020
import java.nio.ByteBuffer
2121

22-
import cats.MonadError
22+
import cats.{~>, MonadError}
2323
import com.datastax.driver.core._
2424
import com.google.common.util.concurrent.ListenableFuture
25+
import freestyle.async.AsyncContext
2526
import freestyle.cassandra.TestUtils._
27+
import freestyle.cassandra.api.{apiInterpreter, SessionAPI}
2628
import freestyle.cassandra.codecs.ByteBufferCodec
29+
import freestyle.cassandra.handlers.implicits.sessionAPIHandler
2730
import org.scalamock.scalatest.MockFactory
2831
import org.scalatest.{Matchers, OneInstancePerTest, WordSpec}
2932

@@ -36,23 +39,24 @@ class InterpolatorImplicitSpec
3639
with OneInstancePerTest
3740
with MockFactory {
3841

42+
import RuntimeCQLInterpolator._
43+
import freestyle.cassandra.query.interpolator._
44+
45+
import freestyle.async.implicits._
46+
import scala.concurrent.ExecutionContext.Implicits.global
47+
48+
implicit val E: MonadError[Future, Throwable] =
49+
cats.instances.future.catsStdInstancesForFuture
50+
3951
implicit val sessionMock: Session = stub[Session]
4052

4153
val rsMock: ResultSet = stub[ResultSet]
4254
(sessionMock.executeAsync(_: Statement)).when(*).returns(ResultSetFutureTest(rsMock))
4355

44-
"InterpolatorImplicitDef asResultSet" should {
45-
46-
import RuntimeCQLInterpolator._
47-
import freestyle.async.implicits._
48-
import freestyle.cassandra.query.interpolator._
49-
import scala.concurrent.ExecutionContext.Implicits.global
50-
51-
implicit val E: MonadError[Future, Throwable] =
52-
cats.instances.future.catsStdInstancesForFuture
56+
"InterpolatorImplicitDef attemptResultSet" should {
5357

5458
"return a valid ResultSet" in {
55-
val future: Future[ResultSet] = cql"SELECT * FROM users".asResultSet[Future]
59+
val future: Future[ResultSet] = cql"SELECT * FROM users".attemptResultSet[Future]
5660
Await.result(future, Duration.Inf) shouldBe rsMock
5761
}
5862

@@ -67,11 +71,25 @@ class InterpolatorImplicitSpec
6771
implicit E: MonadError[M, Throwable]): M[ByteBuffer] =
6872
E.raiseError(serializeException)
6973
}
70-
val name: String = "UserName"
71-
val future: Future[ResultSet] = cql"SELECT * FROM users WHERE name=$name".asResultSet[Future]
74+
val name: String = "UserName"
75+
val future: Future[ResultSet] =
76+
cql"SELECT * FROM users WHERE name=$name".attemptResultSet[Future]
7277
Await.result(future.failed, Duration.Inf) shouldBe serializeException
7378
}
7479

7580
}
7681

82+
"InterpolatorImplicitDef asResultSet" should {
83+
84+
implicit val interpreter = sessionAPIHandler[Future] andThen apiInterpreter[Future, Session](
85+
sessionMock)
86+
87+
"return a valid ResultSet from a FreeS" in {
88+
val future: Future[ResultSet] =
89+
cql"SELECT * FROM users".asResultSet[SessionAPI.Op].interpret[Future]
90+
Await.result(future, Duration.Inf) shouldBe rsMock
91+
}
92+
93+
}
94+
7795
}

version.sbt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version in ThisBuild := "0.0.1-SNAPSHOT"
1+
version in ThisBuild := "0.0.1"

0 commit comments

Comments
 (0)