Pusher users often want to transmit JSON or HTML to the browser upon model events, but models have no business generating either. ActionPusher allows you to render data to Pusher using your existing view templates from an observer or model.
- Rails 3.1
- Pusher gem
gem 'action_pusher', :require => false
Create an initializer at config/initializers/action_pusher.rb such as:
require 'action_pusher' ActionPusher::Base.view_paths = File.join( Rails.root, 'app/api' )
Ensure that view_paths points to the location where your templates are actually stored. The default is app/views.
Create a directory at app/pushers to store your ActionPusher "controllers".
class NotificationPusher < ActionPusher::Base def initialize(notification) @notification = notification event = @notification.event channel = @notification.notification_channel.name Pushable.push(channel, event, render(template: 'notifications/show')) end def controller_path; 'notifications'; end end
Now when I call NotificationPusher.new( notification ) from my model callbacks, observers, what-have-you... my Notification model object is transmitted to Pusher as pretty JSON output from jbuilder!