def apply()

in common/src/main/scala/utils/LruCache.scala [36:64]


  def apply(key: Any)(generateValue: => Future[V])(implicit ec: ExecutionContext): Future[V] = {
    def insert = {
      val newEntry = new Entry(Promise[V](), timeToLive.fromNow)
      val valueFuture =
        store.put(key, newEntry) match {
          case null =>
            generateValue
          case entry => if (entry.isAlive) {
            entry.future
          } else {
            generateValue
          }
        }
      valueFuture.onComplete { value =>
        newEntry.promise.tryComplete(value)
        //Remove any cached entries that were exceptions
        if(value.isFailure) store.remove(key, newEntry)
      }
      newEntry.promise.future
    }

    store.get(key) match {
      case null =>
        insert
      case entry if entry.isAlive =>
        entry.future
      case entry => insert
    }
  }