Skip to content

Instantly share code, notes, and snippets.

@dinorahtovar
Last active July 20, 2018 22:44
Show Gist options
  • Save dinorahtovar/c1f987a68ac8aa303fbafd511b950310 to your computer and use it in GitHub Desktop.
Save dinorahtovar/c1f987a68ac8aa303fbafd511b950310 to your computer and use it in GitHub Desktop.
Flat map of observables with a Retrofit Request.
/**
* Returns an observable from a function that decrypts stored user data
*/
fun currentUserObservable(): Observable<UserViewModel> {
return Observable.create(ObservableOnSubscribe<UserViewModel> { subscriber ->
val user = currentUser()
if (user != null)
subscriber.onNext(user)
else
subscriber.onError(Throwable("User is null"))
subscriber.onComplete()
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
/**
* Returns an onservable from a function that decrypts stored auth token
*/
fun currentTokenObservable(): Observable<String> {
return Observable.create(ObservableOnSubscribe<String> { subscriber ->
val authToken = currentAuthToken()
if (!authToken.isNullOrEmpty())
subscriber.onNext(authToken!!)
else
subscriber.onError(Throwable("Auth Token is null"))
subscriber.onComplete()
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
/**
* Calls the getAmoun Service to obtain the info from the user
* @return Observable<AmountResponseViewModel>
*/
internal fun getAmountService(): Observable<AmountResponseViewModel> {
return amountLocalStorage.currentAuthTokenObservable().flatMap {
authToken: String -> userLocalStorage.currentUserObservable().flatMap {
user: UserViewModel -> retrofit.create(AmountService::class.java)
.amount(authToken, user.id, user.secondaryId)
} }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment