Ah, push it, pu-pu-push it real good!


Push changes in your ActiveModels to Backbone.js clients' models and collections.


At this point there are three ActiveModel events that can be pushed out to the Faye server, creation, updat-uhh-ion, and deletion. They can pushed to two channels, collection channels and instance channels. For example if you had a family model and it has_many member models you might have a Backbone family collection, when a new member was born, you're family Backbone collection would be notified via the collection channel, but other families don't need to be notified of the new member. So you can scope a model's collection channel by defining a collection_channel method in both the ActiveModel and the Backbone collection. Similarly you could customize the instance channel used with instance_channel methods. As usual the code speaks for itself:

class Family < ActiveRecord::Base attr_accessible :name has_many :members end

class Member < ActiveRecord::Base attr_accessible :name, :family_id belongs_to :family

push :create  => :collections,
     :update  => [ :collections, :instances ],
     :destroy => [ :collections, :instances ]

def collection_channel


class Family extends Backbone.PushableCollection channel: -> "family_#@id_members"

url: ->
  if @id
    '/families/' + @id + '/members.json'

model: Member

initialize: (members, options) -> # members is actually options if not initialized with members
    @id = (members || options).id
  catch TypeError
    throw "MissingFamilyID"

class Member extends Backbone.PushableModel url: -> if @isNew() "/families/#@family_id/members.json" else "/members/#@id.json"

channel: -> "member_#{@id}"

Starting the Faye Server

Start a Faye server instance with...

rake faye:start

This rake task supports the following options:

  • verbose=true
  • port=9292 9292 is the default
  • key=server.key For an SSL key
  • cert=server.crt For an SSL certificate


  • Write some specs
  • Flesh the docs out more, an example app even