class SeapigMasterObject

Attributes

stall[RW]

Public Class Methods

new(client, id, options) click to toggle source
Calls superclass method SeapigObject::new
# File lib/seapig-client-ruby/client.rb, line 305
def initialize(client, id, options)
        super(client, id, options)
        @version = (options[:version] or [(Time.new.to_f*1000).floor, 0])
        @shadow = self.sanitized
        @stall = false
end

Public Instance Methods

bump(options={}) click to toggle source
# File lib/seapig-client-ruby/client.rb, line 334
def bump(options={})
        version_old = @version
        data_old = @shadow
        @version = (options[:version] or [version_old[0], version_old[1]+1])
        @shadow = sanitized
        @initialized = true
        upload(version_old, data_old, @version, @stall ? false : @shadow)
end
onproduce(&block) click to toggle source
# File lib/seapig-client-ruby/client.rb, line 313
def onproduce(&block)
        @onproduce_proc = block
        self
end
produce(id, version_inferred) click to toggle source

—– for SeapigClient

# File lib/seapig-client-ruby/client.rb, line 345
def produce(id, version_inferred)
        if @onproduce_proc
                @onproduce_proc.call(self, version_inferred)
        else
                raise "Master object #{id} has to either be initialized at all times or have an onproduce callback" if not @initialized
                upload(0, {}, @version, @shadow)
        end
end
set(options={}) click to toggle source
# File lib/seapig-client-ruby/client.rb, line 319
def set(options={})
        @version = options[:version] if options[:version]
        if options[:object]
                @stall = false
                self.clear
                self.merge!(options[:object])
        elsif options[:object] == false or options[:stall]
                @stall = true
        end
        @shadow = sanitized
        @initialized = true
        upload(0, {}, @version, @stall ? false : @shadow)
end
upload(version_old, data_old, version_new, data_new) click to toggle source
# File lib/seapig-client-ruby/client.rb, line 355
def upload(version_old, data_old, version_new, data_new)
        if @client.connected
                if version_old == 0 or data_new == false or data_new == true
                        @client.socket.send JSON.dump(id: @id, action: 'object-patch', :"version-new" => version_new, value: data_new)
                else
                        diff = JsonDiff.generate(data_old, data_new)
                        if JSON.dump(diff).size < JSON.dump(data_new).size #can we afford this?
                                @client.socket.send JSON.dump(id: @id, action: 'object-patch', :'version-old' => version_old, :'version-new' => version_new, patch: diff)
                        else
                                @client.socket.send JSON.dump(id: @id, action: 'object-patch', :'version-new' => version_new, value: data_new)
                        end
                end
        end
        self
end