diff --git a/rx-extensions/build.gradle b/rx-extensions/build.gradle index 3b49d3c..14da026 100644 --- a/rx-extensions/build.gradle +++ b/rx-extensions/build.gradle @@ -1,6 +1,18 @@ -apply plugin: 'kotlin' +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion versions.compileSdk + + defaultConfig { + minSdkVersion 16 + } +} dependencies { + api project(":utils") + api project(":logging") + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "io.reactivex.rxjava2:rxjava:$versions.rxJava" } diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Flowable.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Flowable.kt index 043cf09..9f2f959 100644 --- a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Flowable.kt +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Flowable.kt @@ -2,7 +2,22 @@ package ru.touchin.extensions.rx import io.reactivex.Completable import io.reactivex.Flowable +import ru.touchin.extensions.rx.utils.StringConstants +import ru.touchin.roboswag.core.utils.Optional +import ru.touchin.roboswag.core.utils.ShouldNotHappenException fun Flowable.emitAfter(other: Completable): Flowable = this.flatMap { value -> other.andThen(Flowable.just(value)) } + +fun Flowable>.unwrapOrError( + errorMessage: String = StringConstants.OPTIONAL_UNWRAPPING_ERROR_MESSAGE +): Flowable = this.flatMap { wrapper -> + wrapper.get() + ?.let { Flowable.just(it) } + ?: Flowable.error(ShouldNotHappenException(errorMessage)) +} + +fun Flowable>.unwrapOrFilter(): Flowable = this + .filter { it.get() != null } + .map { it.get() } diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Maybe.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Maybe.kt index 5f5fe6c..4fdd873 100644 --- a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Maybe.kt +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Maybe.kt @@ -2,7 +2,18 @@ package ru.touchin.extensions.rx import io.reactivex.Completable import io.reactivex.Maybe +import ru.touchin.extensions.rx.utils.StringConstants +import ru.touchin.roboswag.core.utils.Optional +import ru.touchin.roboswag.core.utils.ShouldNotHappenException fun Maybe.emitAfter(other: Completable): Maybe = this.flatMap { value -> other.andThen(Maybe.just(value)) } + +fun Maybe>.unwrapOrError( + errorMessage: String = StringConstants.OPTIONAL_UNWRAPPING_ERROR_MESSAGE +): Maybe = this.flatMap { wrapper -> + wrapper.get() + ?.let { Maybe.just(it) } + ?: Maybe.error(ShouldNotHappenException(errorMessage)) +} diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Observable.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Observable.kt index 0c5a8c5..eb643dd 100644 --- a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Observable.kt +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Observable.kt @@ -2,7 +2,22 @@ package ru.touchin.extensions.rx import io.reactivex.Completable import io.reactivex.Observable +import ru.touchin.extensions.rx.utils.StringConstants +import ru.touchin.roboswag.core.utils.Optional +import ru.touchin.roboswag.core.utils.ShouldNotHappenException fun Observable.emitAfter(other: Completable): Observable = this.flatMap { value -> other.andThen(Observable.just(value)) } + +fun Observable>.unwrapOrError( + errorMessage: String = StringConstants.OPTIONAL_UNWRAPPING_ERROR_MESSAGE +): Observable = this.flatMap { wrapper -> + wrapper.get() + ?.let { Observable.just(it) } + ?: Observable.error(ShouldNotHappenException(errorMessage)) +} + +fun Observable>.unwrapOrFilter(): Observable = this + .filter { it.get() != null } + .map { it.get() } diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Single.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Single.kt index 9c3b6c7..392de40 100644 --- a/rx-extensions/src/main/java/ru/touchin/extensions/rx/Single.kt +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/Single.kt @@ -2,7 +2,18 @@ package ru.touchin.extensions.rx import io.reactivex.Completable import io.reactivex.Single +import ru.touchin.extensions.rx.utils.StringConstants +import ru.touchin.roboswag.core.utils.Optional +import ru.touchin.roboswag.core.utils.ShouldNotHappenException fun Single.emitAfter(other: Completable): Single = this.flatMap { value -> other.andThen(Single.just(value)) } + +fun Single>.unwrapOrError( + errorMessage: String = StringConstants.OPTIONAL_UNWRAPPING_ERROR_MESSAGE +): Single = this.flatMap { wrapper -> + wrapper.get() + ?.let { Single.just(it) } + ?: Single.error(ShouldNotHappenException(errorMessage)) +} diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/StringConstants.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/StringConstants.kt new file mode 100644 index 0000000..ad51ae2 --- /dev/null +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/StringConstants.kt @@ -0,0 +1,5 @@ +package ru.touchin.extensions.rx.utils + +object StringConstants { + const val OPTIONAL_UNWRAPPING_ERROR_MESSAGE = "Wrapped object must not be null" +}