class Deepstream::Record
Attributes
data[R]
Public Class Methods
new(client, name)
click to toggle source
# File lib/deepstream/record.rb, line 9 def initialize(client, name) @client = client @name = name @data = {} @version = nil @is_reinitializing = false @data_cache = {} @client.send_message(TOPIC::RECORD, ACTION::CREATEORREAD, @name) @ready_callback = nil end
Public Instance Methods
__name()
click to toggle source
# File lib/deepstream/record.rb, line 24 def __name @name end
__version()
click to toggle source
# File lib/deepstream/record.rb, line 20 def __version @version end
delete()
click to toggle source
# File lib/deepstream/record.rb, line 56 def delete @client.delete(@name) end
end_reinitializing()
click to toggle source
# File lib/deepstream/record.rb, line 42 def end_reinitializing reset_version if @client.options[:reinitialize_master] set(@data_cache) if @client.options[:reinitialize_master] @is_reinitializing = false end
inspect()
click to toggle source
# File lib/deepstream/record.rb, line 48 def inspect "#{self.class} #{@name} #{@version} #{@data}" end
is_reinitializing?()
click to toggle source
# File lib/deepstream/record.rb, line 32 def is_reinitializing? @is_reinitializing end
method_missing(name, *args)
click to toggle source
# File lib/deepstream/record.rb, line 100 def method_missing(name, *args) name = name.to_s return @data.fetch(@data.is_a?(Array) ? name.to_i : name, nil) if args.empty? return set(name[0..-2], *args) if name.end_with?('=') && !args.empty? raise(NoMethodError, name) end
patch(version, path, value)
click to toggle source
# File lib/deepstream/record.rb, line 86 def patch(version, path, value) @version = version.to_i set_path(@data, path, Helpers.to_type(value)) rescue => e @client.on_exception(e) end
read(version, data)
click to toggle source
# File lib/deepstream/record.rb, line 78 def read(version, data) update(version, data) if @ready_callback @ready_callback.call(self) @ready_callback = nil end end
reset_version()
click to toggle source
# File lib/deepstream/record.rb, line 28 def reset_version @version = 0 end
set(*args)
click to toggle source
# File lib/deepstream/record.rb, line 60 def set(*args) if args.size == 1 raise(ArgumentError, "Record data must be a hash") unless args.first.is_a?(Hash) @data = args.first @client.send_message(TOPIC::RECORD, ACTION::UPDATE, @name, (@version += 1), @data.to_json) if @version elsif args.size == 2 path, value = args set_path(@data, path, value) @client.send_message(TOPIC::RECORD, ACTION::PATCH, @name, (@version += 1), path, Helpers.to_deepstream_type(value)) if @version end rescue => e @client.on_exception(e) end
start_reinitializing()
click to toggle source
# File lib/deepstream/record.rb, line 36 def start_reinitializing @is_reinitializing = true @data_cache = @data @client.send_message(TOPIC::RECORD, ACTION::CREATEORREAD, @name, priority: true) end
unsubscribe()
click to toggle source
# File lib/deepstream/record.rb, line 52 def unsubscribe @client.send_message(TOPIC::RECORD, ACTION::UNSUBSCRIBE, name) end
update(version, data)
click to toggle source
# File lib/deepstream/record.rb, line 93 def update(version, data) @version = version.to_i @data = JSON.parse(data) rescue => e @client.on_exception(e) end
when_ready(&block)
click to toggle source
# File lib/deepstream/record.rb, line 74 def when_ready(&block) @ready_callback = block end
Private Instance Methods
set_path(data, path, value)
click to toggle source
# File lib/deepstream/record.rb, line 109 def set_path(data, path, value) key, subkey = path.to_s.split('.', 2) if data.is_a?(Hash) subkey ? set_path(data.fetch(key), subkey, value) : data[key] = value elsif data.is_a?(Array) subkey ? set_path(data[key.to_i], subkey, value) : data[key.to_i] = value end end