Skip to content
An observables framework for Kotlin
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
gradle/wrapper
scripts run test reports Mar 6, 2017
snail-kotlin fix forreal May 9, 2019
.gitignore Initial Commit Jan 5, 2017
README.md update readme Feb 18, 2019
build.gradle bump kotlin and target android api level May 3, 2019
codecov.yml update settings May 8, 2019
gradle.properties Initial Commit Jan 5, 2017
gradlew Initial Commit Jan 5, 2017
gradlew.bat Initial Commit Jan 5, 2017
settings.gradle renaming module Jan 5, 2017

README.md

Snail-Kotlin 🐌 Bitrise codecov

A lightweight observables framework, also available in Swift

Download

You can download a jar from GitHub's releases page.

Jitpack

allprojects {
 repositories {
    ...
    maven { url "https://jitpack.io" }
 }
}

dependencies {
  compile 'com.github.urbancompass:snail-kotlin:x.x.x'
}

Or Maven:

<dependency>
  <groupId>com.compass.snail</groupId>
  <artifactId>snail</artifactId>
  <version>0.0.9</version>
  <type>pom</type>
</dependency>

Creating Observables

val observable = Observable<thing>()

Subscribing to Observables

observable.subscribe(
    next = { thing in ... }, // do something with thing
    error = { error in ... }, // do something with error
    done = { ... } // do something when it's done
)

Closures are optional too...

observable.subscribe(
    next = { thing in ... } // do something with thing
)
observable.subscribe(
    error = { error in ... } // do something with error
)

Creating Observables Variables

val variable = Variable<whatever>(some initial value)
val optionalString = Variable<String?>(null)
optionalString.asObservable().subscribe(
    next = { string in ... } // do something with value changes
)

optionalString.value = "something"
val int = Variable<Int>(12)
int.asObservable().subscribe(
    next = { int in ... } // do something with value changes
)

int.value = 42

Miscellaneous Observables

val just = Just(1) // always returns the initial value (1 in this case)

val failure = Fail(RunTimeException()) // always returns error
failure.subscribe(
	error = { it }  //it is RuntimeException
)

val n = 5
let replay = Replay(n) // replays the last N events when a new observer subscribes

Dispatchers

You can specify which dispatcher an observables will be notified on by using .subscribe(dispatcher: <desired dispatcher>). If you don't specify, then the observable will be notified on the same dispatcher that the observable published on.

There are 3 scenarios:

  1. You don't specify the dispatcher. Your observer will be notified on the same dispatcher as the observable published on.

  2. You specified Main dispatcher AND the observable published on the Main dispatcher. Your observer will be notified synchronously on the Main dispatcher.

  3. You specified a dispatcher. Your observer will be notified async on the specified dispatcher.

Examples

Subscribing on Main

observable.subscribe(Dispatchers.Main, next = {
    // do stuff with it...
})
You can’t perform that action at this time.