class Deepstream::List

Constants

LIST_CALLBACKS

Attributes

version[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method
# File lib/deepstream/list.rb, line 10
def initialize(*args)
  super
  @data = []
  @handlers = {}
end

Public Instance Methods

add(record_name) click to toggle source
# File lib/deepstream/list.rb, line 16
def add(record_name)
  unless @data.include?(record_name)
    @data << record_name
    set
    notify_listeners(:added, record_name)
  end
rescue => e
  @client.on_exception(e)
end
all() click to toggle source
# File lib/deepstream/list.rb, line 44
def all
  @data.map { |record_name| @client.get(record_name) }
end
end_reinitializing() click to toggle source
# File lib/deepstream/list.rb, line 48
def end_reinitializing
  reset_version
  set
  @is_reinitializing = false
end
keys() click to toggle source
# File lib/deepstream/list.rb, line 40
def keys
  @data
end
off(cb_name, &block) click to toggle source
# File lib/deepstream/list.rb, line 69
def off(cb_name, &block)
  if block_given?
    @handlers[cb_name].delete block
  elsif cb_name
    @handlers[cb_name] = []
  else
    @handlers = {}
  end
  nil
end
on(cb_name, &block) click to toggle source
# File lib/deepstream/list.rb, line 61
def on(cb_name, &block)
  unless LIST_CALLBACKS.include?(cb_name)
    raise(UnknownListCallback, "Uknown callback name: #{cb_name}. Must be one of: #{LIST_CALLBACKS}")
  end
  (@handlers[cb_name] ||= []).push(block)
  nil
end
read(version, data) click to toggle source
# File lib/deepstream/list.rb, line 26
def read(version, data)
  @version = version.to_i
  data = JSON.parse(data)
  if data.is_a?(Array)
    set_new_data (@data + data).uniq
    set if @data.size > data.size
  end
end
remove(record_name) click to toggle source
# File lib/deepstream/list.rb, line 35
def remove(record_name)
  set if @data.delete(record_name)
  notify_listeners(:removed, record_name)
end
update(version, data) click to toggle source
# File lib/deepstream/list.rb, line 54
def update(version, data)
  @version = version.to_i
  set_new_data JSON.parse(data)
rescue => e
  @client.on_exception(e)
end

Private Instance Methods

notify_listeners(cb_name, uid) click to toggle source
# File lib/deepstream/list.rb, line 92
def notify_listeners(cb_name, uid)
  (@handlers[cb_name] || []).each do |proc|
    record = @client.get(uid)
    if record.__version
      proc.call(record)
    else
      record.when_ready(&proc)
    end
  end
end
set() click to toggle source
# File lib/deepstream/list.rb, line 82
def set
  @client.send_message(TOPIC::RECORD, ACTION::UPDATE, @name, (@version += 1), @data.to_json) if @version
end
set_new_data(new_data) click to toggle source
# File lib/deepstream/list.rb, line 86
def set_new_data(new_data)
  (@data - new_data).each { |uid| notify_listeners(:removed, uid) }
  (new_data - @data).each { |uid| notify_listeners(:added, uid) }
  @data = new_data
end