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