Ably

Build Status Gem Version

A Ruby client library for ably.io, the real-time messaging service.

Documentation

Visit https://ably.io/documentation for a complete API reference and more examples.

Installation

The client library is available as a gem from RubyGems.org.

Add this line to your application's Gemfile:

gem 'ably'

And then install this Bundler dependency:

$ bundle

Or install it yourself as:

$ gem install ably

Using the Realtime API

Introduction

All examples must be run within an EventMachine reactor as follows:

EventMachine.run do
  # ...
end

All examples assume a client has been created as follows:

client = Ably::Realtime.new(api_key: "xxxxx")

Connection

Successful connection:

client.connection.connect do
  # successful connection
end

Failed connection:

connection_result = client.connection.connect
connection_result.errback = Proc.new do
  # failed connection
end

Subscribing to a channel

Given:

channel = client.channel("test")

Subscribe to all events:

channel.subscribe do |message|
  message[:name] #=> "greeting"
  message[:data] #=> "Hello World!"
end

Only certain events:

channel.subscribe("myEvent") do |message|
  message[:name] #=> "myEvent"
  message[:data] #=> "myData"
end

Publishing to a channel

channel.publish("greeting", "Hello World!")

Querying the History

channel.history do |messages|
  messages # Ably::Models::PaginatedResource
  messages.first # Ably::Models::Message
  messages.length # number of messages in the retrieved history page
  messages.next_page # Ably::Models::PaginatedResource
end

Presence on a channel

channel.presence.enter(data: 'john.doe') do |presence|
  presence.get #=> [Array of members present]
end

Querying the Presence History

channel.presence.history do |presence_messages|
  presence_messages.first.action # Any of :enter, :update or :leave
  presence_messages.first.client_id
  presence_messages.first.data
  presence_messages.next_page # Ably::Models::PaginatedResource
end

Using the REST API

Introduction

Unlike the Realtime API, all calls are synchronous and are not run within an EventMachine reactor.

All examples assume a client and/or channel has been created as follows:

client = Ably::Rest.new(api_key: "xxxxx")
channel = client.channel('test')

Publishing a message to a channel

channel.publish("myEvent", "Hello!") #=> true

Querying the History

channel.history #=> #<Ably::Models::PaginatedResource ...>

Presence on a channel

channel.presence.get # => #<Ably::Models::PaginatedResource ...>

Querying the Presence History

channel.presence.history # => #<Ably::Models::PaginatedResource ...>

Generate Token and Token Request

client.auth.request_token
# => #<Ably::Models::Token ...>

client.auth.create_token_request
# => {"id"=>...,
#     "clientId"=>nil,
#     "ttl"=>3600,
#     "timestamp"=>...,
#     "capability"=>"{\"*\":[\"*\"]}",
#     "nonce"=>...,
#     "mac"=>...}

Fetching your application's stats

client.stats #=> PaginatedResource [{:channels=>..., :apiRequests=>..., ...}]

Dependencies

If you only need to use the REST features of this library and do not want EventMachine as a dependency, then you should use the Ably Ruby REST gem.

Support and feedback

Please visit https://support.ably.io/ for access to our knowledgebase and to ask for any assistance.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Ensure you have added suitable tests and the test suite is passing(bundle exec rspec)
  5. Push to the branch (git push origin my-new-feature)
  6. Create a new Pull Request

License

Copyright (c) 2015 Ably, Licensed under an MIT license. Refer to LICENSE.txt for the license terms.