All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sandinh.couchbase.access.WithCaoKey2.scala Maven / Gradle / Ivy

There is a newer version: 3.0.2
Show newest version
package com.sandinh.couchbase.access

import com.couchbase.client.java.document.Document
import rx.lang.scala.Observable

/** internal */
trait WithCaoKey2[T, A, B, U, D <: Document[U]] { self: CaoBase[T, U, D] =>
  /** Map 2 param of type A, B to a CB key
    * @return CB key */
  protected def key(a: A, b: B): String

  final def get(a: A, b: B): Observable[T] = self.get(key(a, b))
  final def getBulk(aa: Iterable[A], b: B): Observable[Option[T]] = Observable.from(aa).concatMap(get(_, b).singleOption)

  final def set(a: A, b: B, t: T): Observable[T] = self.set(key(a, b), t)
  final def setBulk(aa: Iterable[A], b: B, tt: Iterable[T]): Observable[T] = Observable.from(aa zip tt).concatMap {
    case (a, t) => set(a, b, t)
  }

  final def change(a: A, b: B)(f: Option[T] => T): Observable[T] = get(a, b).singleOption.map(f).flatMap(set(a, b, _))
  final def flatChange(a: A, b: B)(f: Option[T] => Observable[T]): Observable[T] = get(a, b).singleOption.flatMap(f).flatMap(set(a, b, _))

  final def changeBulk(aa: Iterable[A], b: B)(f: Option[T] => T): Observable[T] = Observable.from(aa).concatMap { a =>
    get(a, b).singleOption.map(f).flatMap(set(a, b, _))
  }
  final def flatChangeBulk(aa: Iterable[A], b: B)(f: Option[T] => Observable[T]): Observable[T] = Observable.from(aa).concatMap { a =>
    get(a, b).singleOption.flatMap(f).flatMap(set(a, b, _))
  }

  final def remove(a: A, b: B): Observable[D] = self.remove(key(a, b))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy