A Ruby API for the Routemaster event bus.

Version   Build   Docs


Add this line to your application's Gemfile:

gem 'routemaster-client'

And then execute:

$ bundle

Or install it yourself as:

$ gem install routemaster-client


Configure your client:

require 'routemaster/client'
client = '', uuid: 'demo')

You can also specify a timeout value in seconds if you like with the timeout option. '', uuid: 'demo', timeout: 2)

Push an event about an entity in the topic widgets with a callback URL:

client.created('widgets', '')
client.updated('widgets', '')
client.noop('widgets', '')

There are methods for the four canonical event types: created, updated, deleted, and noop.

noop is typically used when a subscriber is first connected (or reset), and the publisher floods with noops for all existing entities so subscribers can refresh their view of the domain.

Register to be notified about widgets and kitten at most 60 seconds after events, in batches of at most 500 events, to a given callback URL:

  topics:   ['widgets', 'kitten'],
  callback: '',
  uuid:     'demo',
  timeout:  60_000,
  max:      500)

Receive events at path /events using a Rack middleware:

require 'routemaster/receiver'

class Listener
  def on_events_received(batch)
    batch.each do |event|
      puts event['url']

Wisper.subscribe(, :prefix => true)

use Routemaster::Receiver, {
  path:    '/events',
  uuid:    'demo'

This relies on the excellent event bus from the wisper gem.

Monitor the status of topics and subscriptions:

#=> [ #<Routemaster::Topic:XXXX @name="widgets", @publisher="demo", @events=12589>, ...]

#=> [ {
#     subscriber: 'bob',
#     callback:   '',
#     topics:     ['widgets', 'kitten'],
#     events:     { sent: 21_450, queued: 498, oldest: 59_603 }
#  } ... ]


  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. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request