class Jason::Channel
Attributes
subscriptions[RW]
Public Instance Methods
receive(message)
click to toggle source
# File lib/jason/channel.rb, line 8 def receive(message) handle_message(message) end
subscribe()
click to toggle source
# File lib/jason/channel.rb, line 4 def subscribe stream_from 'jason' end
Private Instance Methods
create_subscription(model, conditions, includes)
click to toggle source
# File lib/jason/channel.rb, line 32 def create_subscription(model, conditions, includes) subscription = Jason::Subscription.upsert_by_config(model, conditions: conditions || {}, includes: includes || nil) return if !subscription.user_can_access?(current_user) stream_from subscription.channel subscriptions.push(subscription) subscription.add_consumer(identifier) end
get_payload(config, force_refresh = false)
click to toggle source
# File lib/jason/channel.rb, line 48 def get_payload(config, force_refresh = false) subscription = Jason::Subscription.upsert_by_config(config['model'], conditions: config['conditions'], includes: config['includes']) return if !subscription.user_can_access?(current_user) if force_refresh subscription.set_ids_for_sub_models end subscription.get.each do |model_name, payload| transmit(payload) if payload.present? end end
handle_message(message)
click to toggle source
# File lib/jason/channel.rb, line 14 def handle_message(message) @subscriptions ||= [] begin # ActionCable swallows errors in this message - ensure they're output to logs. if (config = message['createSubscription']) create_subscription(config['model'], config['conditions'], config['includes']) elsif (config = message['removeSubscription']) remove_subscription(config) elsif (config = message['getPayload']) get_payload(config, message['forceRefresh']) end rescue => e puts e.message puts e.backtrace raise e end end
remove_subscription(config)
click to toggle source
# File lib/jason/channel.rb, line 42 def remove_subscription(config) subscription = Jason::Subscription.upsert_by_config(config['model'], conditions: config['conditions'], includes: config['includes']) subscriptions.reject! { |s| s.id == subscription.id } subscription.remove_consumer(identifier) end