lib/render_sync/clients/pusher.rb
module RenderSync
module Clients
class Pusher
def setup
require 'pusher'
::Pusher.app_id = RenderSync.app_id
::Pusher.key = RenderSync.api_key
::Pusher.secret = RenderSync.auth_token
if RenderSync.pusher_api_scheme
::Pusher.scheme = RenderSync.pusher_api_scheme
end
if RenderSync.pusher_api_host
::Pusher.host = RenderSync.pusher_api_host
end
if RenderSync.pusher_api_port
::Pusher.port = RenderSync.pusher_api_port
end
end
def batch_publish(*args)
Message.batch_publish(*args)
end
def build_message(*args)
Message.new(*args)
end
# Public: Normalize channel to adapter supported format
#
# channel - The string channel name
#
# Returns The normalized channel prefixed with supported format for Pusher
def normalize_channel(channel)
channel
end
class Message
attr_accessor :channel, :data
def self.batch_publish(messages)
messages.each do |message|
message.publish
end
end
def initialize(channel, data)
self.channel = channel
self.data = data
end
def publish
if RenderSync.async?
publish_asynchronous
else
publish_synchronous
end
end
def publish_synchronous
::Pusher.trigger([channel], 'sync', data)
end
def publish_asynchronous
RenderSync.reactor.perform do
::Pusher.trigger_async([channel], 'sync', data)
end
end
end
end
end
end