Skip to content

Commit

Permalink
Move method to the trait
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrey Bobylev committed Feb 11, 2020
1 parent 54a788d commit 3bb42ae
Show file tree
Hide file tree
Showing 12 changed files with 3 additions and 87 deletions.
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ trait Cache[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => F[V]): F[V]

/**
* Does not run `value` concurrently for the same key
*/
Expand Down Expand Up @@ -72,8 +70,6 @@ trait SerialMap[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => F[V]): F[V]

def put(key: K, value: V): F[Option[V]]

/**
Expand Down
6 changes: 1 addition & 5 deletions src/main/scala/com/evolutiongaming/scache/Cache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ trait Cache[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => V): F[V]
def getOrElse(key: K, default: => F[V])(implicit F: Monad[F]): F[V] = get(key).flatMap(_.fold(default)(_.pure[F]))

/**
* Does not run `value` concurrently for the same key
Expand Down Expand Up @@ -63,8 +63,6 @@ object Cache {

def get(key: K) = none[V].pure[F]

def getOrElse(key: K, default: => V): F[V] = default.pure[F]

def getOrUpdate(key: K)(value: => F[V]) = value

def getOrUpdateReleasable(key: K)(value: => F[Releasable[F, V]]) = value.map(_.value)
Expand Down Expand Up @@ -137,8 +135,6 @@ object Cache {

def get(key: K) = fg(self.get(key))

def getOrElse(key: K, default: => V): G[V] = fg(self.getOrElse(key, default))

def getOrUpdate(key: K)(value: => G[V]) = fg(self.getOrUpdate(key)(gf(value)))

def getOrUpdateReleasable(key: K)(value: => G[Releasable[G, V]]) = {
Expand Down
2 changes: 0 additions & 2 deletions src/main/scala/com/evolutiongaming/scache/CacheFenced.scala
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@ object CacheFenced {

def get(key: K) = cache.get(key)

def getOrElse(key: K, default: => V): F[V] = cache.getOrElse(key, default)

def getOrUpdate(key: K)(value: => F[V]) = cache.getOrUpdate(key)(value)

def getOrUpdateReleasable(key: K)(value: => F[Releasable[F, V]]) = {
Expand Down
2 changes: 0 additions & 2 deletions src/main/scala/com/evolutiongaming/scache/CacheMetered.scala
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@ object CacheMetered {
} yield value
}

def getOrElse(key: K, default: => V): F[V] = get(key).map(_.getOrElse(default))

def getOrUpdate(key: K)(value: => F[V]) = {
getOrUpdateReleasable(key) {
for {
Expand Down
2 changes: 0 additions & 2 deletions src/main/scala/com/evolutiongaming/scache/ExpiringCache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,6 @@ object ExpiringCache {
}
}

def getOrElse(key: K, default: => V): F[V] = get(key).map(_.getOrElse(default))

def getOrUpdate(key: K)(value: => F[V]) = {

def entry = {
Expand Down
2 changes: 0 additions & 2 deletions src/main/scala/com/evolutiongaming/scache/LoadingCache.scala
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ object LoadingCache {
.handleError { _ => none[V] }
}

def getOrElse(key: K, default: => V): F[V] = get(key).map(_.getOrElse(default))

def getOrUpdate(key: K)(value: => F[V]) = {
getOrUpdateReleasable1(key) {
value.map { loadedOf(_, none) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ object PartitionedCache {
cache.get(key)
}

def getOrElse(key: K, default: => V): F[V] = get(key).map(_.getOrElse(default))

def getOrUpdate(key: K)(value: => F[V]) = {
val cache = partitions.get(key)
cache.getOrUpdate(key)(value)
Expand Down
9 changes: 2 additions & 7 deletions src/main/scala/com/evolutiongaming/scache/SerialMap.scala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.evolutiongaming.scache

import cats.Applicative
import cats.{Applicative, Monad}
import cats.effect.Concurrent
import cats.effect.concurrent.Ref
import cats.effect.implicits._
Expand All @@ -15,7 +15,7 @@ trait SerialMap[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => V): F[V]
def getOrElse(key: K, default: => F[V])(implicit F: Monad[F]): F[V] = get(key).flatMap(_.fold(default)(_.pure[F]))

def put(key: K, value: V): F[Option[V]]

Expand Down Expand Up @@ -49,8 +49,6 @@ object SerialMap { self =>

def get(key: K) = none[V].pure[F]

def getOrElse(key: K, default: => V): F[V] = default.pure[F]

def put(key: K, value: V) = none[V].pure[F]

def modify[A](key: K)(f: Option[V] => F[(Option[V], A)]) = f(none[V]).map { case (_, value) => value }
Expand Down Expand Up @@ -97,9 +95,6 @@ object SerialMap { self =>
}


def getOrElse(key: K, default: => V): F[V] = get(key).map(_.getOrElse(default))


def put(key: K, value: V) = {
modify(key) { prev =>
(value.some, prev).pure[F]
Expand Down
11 changes: 0 additions & 11 deletions src/test/scala/com/evolutiongaming/scache/CacheEmptySpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@ class CacheEmptySpec extends AsyncFunSuite with Matchers {
result.run()
}

test("getOrElse") {
val result = for {
value <- cache.getOrElse(0, 1.pure[IO])
_ <- Sync[IO].delay { value shouldEqual 1 }
_ <- cache.put(0, 2)
value <- cache.getOrElse(0, 1.pure[IO])
_ <- Sync[IO].delay { value shouldEqual 1 }
} yield {}
result.run()
}

test("put") {
val result = for {
value <- cache.put(0, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,6 @@ class CacheFencedTest extends AsyncFunSuite with Matchers {
result.run()
}

test("getOrElse succeeds after cache is released") {
val result = for {
cache <- cache.use(_.pure[IO])
a <- cache.getOrElse(0, 1.pure[IO])
_ = a shouldEqual 1
} yield {}
result.run()
}

test(s"put succeeds after cache is released") {
val result = for {
cache <- cache.use(_.pure[IO])
Expand Down
24 changes: 0 additions & 24 deletions src/test/scala/com/evolutiongaming/scache/CacheSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -59,30 +59,6 @@ class CacheSpec extends AsyncFunSuite with Matchers {
}


test(s"getOrElse: $name") {
val result = cache.use { cache =>
for {
value <- cache.getOrElse(0, 1.pure[IO])
_ = value shouldEqual 1
_ <- cache.put(0, 2)
value <- cache.getOrElse(0, 1.pure[IO])
_ = value shouldEqual 2
} yield {}
}
result.run()
}


test(s"getOrElse succeeds after cache is released: $name") {
val result = for {
cache <- cache.use(_.pure[IO])
a <- cache.getOrElse(0, 1.pure[IO])
_ = a shouldEqual 1
} yield {}
result.run()
}


test(s"put: $name") {
val result = cache.use { cache =>
for {
Expand Down
17 changes: 0 additions & 17 deletions src/test/scala/com/evolutiongaming/scache/SerialMapSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,6 @@ class SerialMapSpec extends AsyncFunSuite with Matchers {
get[IO].run()
}

test("getOrElse") {
getOrElse[IO].run()
}

test("put") {
put[IO].run()
}
Expand Down Expand Up @@ -79,19 +75,6 @@ class SerialMapSpec extends AsyncFunSuite with Matchers {
}
}

private def getOrElse[F[_] : Concurrent] = {
val key = "key"
for {
serialMap <- SerialMap.of[F, String, Int]
value0 <- serialMap.getOrElse(key, 1.pure[F])
_ <- serialMap.put(key, 2)
value1 <- serialMap.getOrElse(key, 1.pure[F])
} yield {
value0 shouldEqual 1
value1 shouldEqual 2
}
}

private def put[F[_] : Concurrent] = {
val key = "key"
for {
Expand Down

0 comments on commit 3bb42ae

Please sign in to comment.