Note: Remember the Milk's most recent API changes have not yet been integrated. Updates will be provided at #4.
This is a Scala wrapper for the Remember the Milk API.
Installation
libraryDependencies += "com.github.vergenzt" %% "rtm-scala" % "0.1.4"
Or in Gradle:
compile "com.github.vergenzt:rtm-scala_2.11:0.1.4"
The project is currently only built with Scala 2.11. If you'd like a build for a prior version, let me know and I'll set it up.
Usage
The actual API implementation consists entirely of Scala objects
rather than classes
. Implicit parameters are used to pass API keys and authentication tokens.
Example (desktop authentication):
import com.github.vergenzt.rtmscala._
implicit val apiCreds = ApiCreds("<api_key>", "<secret>")
implicit val authToken = {
val frob = rtm.auth.getFrob()
println("Go to this url and authenticate:")
println(rtm.auth.getURL(Permission.Read, frob))
StdIn.readLine("Press Enter when done.")
rtm.auth.getToken(frob)
}
val tasks = rtm.tasks.getList("status:incomplete")
tasks.foreach(task => println(task.name))
Alternatively, you can authenticate by passing in a function taking the string URL, returning a future to direct the user to the URL (which completes when the user has authenticated) using rtm.auth.authenticate(Permission)(String => Future[Unit]): Future[AuthToken]
.
Timelines
Methods that require a Timeline
take it implicitly. So once you have ApiCreds
and an AuthToken
in implicit scope just declare one as follows:
implicit val timeline = rtm.timelines.create()
Timelines are the only mutable objects in the whole library, which maintain a sequence of Transactions
, one for each method in which they are involved. Transactions
that are undoable
can be passed to rtm.transactions.undo
to undo them.
Example:
// ... authenticate, etc.
implicit val timeline = rtm.timelines.create()
// do something you regret...
val task = rtm.tasks.getList().head
rtm.tasks.delete(task)
// undo it!
val transaction = timeline.transactions.last
rtm.transactions.undo(transaction)
Progress
The following methods are not yet implemented:
rtm.settings.*
rtm.time.*
rtm.timezones.*
rtm.reflection.*
All other API methods are implemented, though not all are thoroughly tested.
Building / Contributing
Gradle does not have to be installed on your system for any of this.
To build and run tests on the console:
./gradlew build
To create Eclipse project configuration:
./gradlew eclipse
Feel free to submit issues or pull requests and I'll respond as soon as I can. :)