Sha256: 1dde39d983d9ac8d6520e57dcfc5b00f09dfd3872e2d20a040751cba47c3d5ac
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
require 'json' require 'deepstream/constants' require 'deepstream/helpers' module Deepstream class Record attr_reader :name, :data, :version def initialize(client, name) @client = client @name = name @data = {} @version = nil @client.send_message(TOPIC::RECORD, ACTION::CREATEORREAD, @name) end def inspect "#{self.class} #{@name} #{@version} #{@data}" end def unsubscribe @client.send_message(TOPIC::RECORD, ACTION::UNSUBSCRIBE, name) end def delete @client.delete(@name) end def set(*args) if args.one? @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 end def read(version, data) update(version, data) end def patch(version, path, value) @version = version.to_i set_path(@data, path, Helpers.to_type(value)) end def update(version, data) @version = version.to_i @data = JSON.parse(data) end def method_missing(name, *args) return @data.fetch(name.to_s, nil) if args.empty? raise(NoMethodError, name) end private def set_path(data, path, value) key, subkey = path.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 end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
deepstream-0.2.7 | lib/deepstream/record.rb |
deepstream-0.2.6 | lib/deepstream/record.rb |