class Metybur::Collection

Public Class Methods

new(collection_name, websocket) click to toggle source
# File lib/metybur/collection.rb, line 2
def initialize(collection_name, websocket)
  @collection_name = collection_name
  @callbacks = {}
  self.websocket = websocket
end

Public Instance Methods

on(event, &block) click to toggle source
# File lib/metybur/collection.rb, line 18
def on(event, &block)
  callbacks_for(event) << block
  self
end
websocket=(websocket) click to toggle source
# File lib/metybur/collection.rb, line 8
def websocket=(websocket)
  return if websocket == @websocket
  @websocket = websocket

  websocket.on(:message) do |event|
    attributes = JSON.parse(event.data, symbolize_names: true)
    handle_message(attributes) if attributes[:collection] == @collection_name
  end
end

Private Instance Methods

callbacks_for(event) click to toggle source
# File lib/metybur/collection.rb, line 31
def callbacks_for(event)
  @callbacks[event] ||= []
end
handle_message(attributes) click to toggle source
# File lib/metybur/collection.rb, line 25
def handle_message(attributes)
  event = attributes[:msg].to_sym
  arguments = attributes.slice(:id, :fields, :cleared).values
  callbacks_for(event).each { |callback| callback.call(*arguments) }
end