From 175affafb3883c1935f46ffae3c0fa898e801cde Mon Sep 17 00:00:00 2001 From: Daniil Borisovskii Date: Mon, 27 Apr 2020 13:11:04 +0300 Subject: [PATCH 1/5] Added extension 'unwrapOrError' to main RX classes typed with Optional --- rx-extensions/build.gradle | 14 +++++++++++++- .../main/java/ru/touchin/extensions/rx/Flowable.kt | 11 +++++++++++ .../main/java/ru/touchin/extensions/rx/Maybe.kt | 11 +++++++++++ .../java/ru/touchin/extensions/rx/Observable.kt | 11 +++++++++++ .../main/java/ru/touchin/extensions/rx/Single.kt | 11 +++++++++++ .../ru/touchin/extensions/rx/utils/Constants.kt | 5 +++++ 6 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/Constants.kt 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..acf4e0b 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,18 @@ 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)) +} 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..6f1fc21 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,18 @@ 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)) +} 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/Constants.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/Constants.kt new file mode 100644 index 0000000..ad51ae2 --- /dev/null +++ b/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/Constants.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" +} From fe3876d886d20e8001109394e08096f40d6d7628 Mon Sep 17 00:00:00 2001 From: Daniil Borisovskii Date: Tue, 28 Apr 2020 18:58:50 +0300 Subject: [PATCH 2/5] Added function "unwrapOrSkip()" for Observable and Flowable --- .../src/main/java/ru/touchin/extensions/rx/Flowable.kt | 6 ++++++ .../src/main/java/ru/touchin/extensions/rx/Observable.kt | 6 ++++++ 2 files changed, 12 insertions(+) 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 acf4e0b..12f7397 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 @@ -17,3 +17,9 @@ fun Flowable>.unwrapOrError( ?.let { Flowable.just(it) } ?: Flowable.error(ShouldNotHappenException(errorMessage)) } + +fun Flowable>.unwrapOrSkip(): Flowable = this.flatMap { wrapper -> + wrapper.get() + ?.let { Flowable.just(it) } + ?: Flowable.empty().skip(1) +} 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 6f1fc21..399dff2 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 @@ -17,3 +17,9 @@ fun Observable>.unwrapOrError( ?.let { Observable.just(it) } ?: Observable.error(ShouldNotHappenException(errorMessage)) } + +fun Observable>.unwrapOrSkip(): Observable = this.flatMap { wrapper -> + wrapper.get() + ?.let { Observable.just(it) } + ?: Observable.empty().skip(1) +} From 4e9e10412442c604a5cfa72f0aadac18109c6e0d Mon Sep 17 00:00:00 2001 From: Daniil Borisovskii Date: Tue, 28 Apr 2020 20:22:36 +0300 Subject: [PATCH 3/5] Make function 'unwrapOrSkip' a little bit more prettier --- .../src/main/java/ru/touchin/extensions/rx/Flowable.kt | 8 +++----- .../src/main/java/ru/touchin/extensions/rx/Observable.kt | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) 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 12f7397..6ed222d 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 @@ -18,8 +18,6 @@ fun Flowable>.unwrapOrError( ?: Flowable.error(ShouldNotHappenException(errorMessage)) } -fun Flowable>.unwrapOrSkip(): Flowable = this.flatMap { wrapper -> - wrapper.get() - ?.let { Flowable.just(it) } - ?: Flowable.empty().skip(1) -} +fun Flowable>.unwrapOrSkip(): Flowable = this + .filter { it.get() != null } + .map { it.get() } 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 399dff2..92f9f8e 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 @@ -18,8 +18,6 @@ fun Observable>.unwrapOrError( ?: Observable.error(ShouldNotHappenException(errorMessage)) } -fun Observable>.unwrapOrSkip(): Observable = this.flatMap { wrapper -> - wrapper.get() - ?.let { Observable.just(it) } - ?: Observable.empty().skip(1) -} +fun Observable>.unwrapOrSkip(): Observable = this + .filter { it.get() != null } + .map { it.get() } From 89ddc59ff8ccddd3645d9c5338025bf02926e978 Mon Sep 17 00:00:00 2001 From: Daniil Borisovskii Date: Tue, 28 Apr 2020 21:25:03 +0300 Subject: [PATCH 4/5] Renamed 'unwrapAndSkip()' to 'unwrapAndFilter()' --- .../src/main/java/ru/touchin/extensions/rx/Flowable.kt | 2 +- .../src/main/java/ru/touchin/extensions/rx/Observable.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 6ed222d..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 @@ -18,6 +18,6 @@ fun Flowable>.unwrapOrError( ?: Flowable.error(ShouldNotHappenException(errorMessage)) } -fun Flowable>.unwrapOrSkip(): Flowable = this +fun Flowable>.unwrapOrFilter(): Flowable = this .filter { it.get() != null } .map { it.get() } 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 92f9f8e..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 @@ -18,6 +18,6 @@ fun Observable>.unwrapOrError( ?: Observable.error(ShouldNotHappenException(errorMessage)) } -fun Observable>.unwrapOrSkip(): Observable = this +fun Observable>.unwrapOrFilter(): Observable = this .filter { it.get() != null } .map { it.get() } From c1b12544b8711d2d86dcd0c4c8a2f6018bf0cc3f Mon Sep 17 00:00:00 2001 From: Daniil Borisovskii Date: Tue, 28 Apr 2020 22:27:16 +0300 Subject: [PATCH 5/5] Rename 'Constants' to 'StringConstants' --- .../extensions/rx/utils/{Constants.kt => StringConstants.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/{Constants.kt => StringConstants.kt} (100%) diff --git a/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/Constants.kt b/rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/StringConstants.kt similarity index 100% rename from rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/Constants.kt rename to rx-extensions/src/main/java/ru/touchin/extensions/rx/utils/StringConstants.kt