Snail-Kotlin 🐌 Bitrise codecov UrbanCompass by Snail-Kotlin

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 UI dispatcher AND the observable published on the UI dispatcher. Your observer will be notified synchronously on the UI dispatcher.

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

Examples

Subscribing on UI

observable.subscribe(UI, next = {
    // do stuff with it...
})
compile "com.github.UrbanCompass:Snail-Kotlin:0.0.9"

Related Libraries

vavr-kotlin

Last updated 3 mins ago

Snail-Kotlin

Last updated 3 mins ago

rxkotlinfx

Last updated 3 mins ago

rxkotlin-jdbc

Last updated 3 mins ago

rxkotlin

Last updated 3 mins ago