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