Class: SeapigMasterObject
- Inherits:
-
SeapigObject
- Object
- Hash
- SeapigObject
- SeapigMasterObject
- Defined in:
- lib/seapig-client-ruby/client.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#stall ⇒ Object
Returns the value of attribute stall.
Attributes inherited from SeapigObject
#destroyed, #id, #initialized, #version
Instance Method Summary collapse
- #bump(options = {}) ⇒ Object
-
#initialize(client, id, options) ⇒ SeapigMasterObject
constructor
A new instance of SeapigMasterObject.
- #onproduce(&block) ⇒ Object
-
#produce(id, version_inferred) ⇒ Object
—– for SeapigClient.
- #set(options = {}) ⇒ Object
- #upload(version_old, data_old, version_new, data_new) ⇒ Object
Methods inherited from SeapigObject
#destroy, #matches, #ondestroy, #onstatuschange, #sanitized, #unlink
Constructor Details
#initialize(client, id, options) ⇒ SeapigMasterObject
Returns a new instance of SeapigMasterObject.
305 306 307 308 309 310 |
# File 'lib/seapig-client-ruby/client.rb', line 305 def initialize(client, id, ) super(client, id, ) @version = ([:version] or [(Time.new.to_f*1000).floor, 0]) @shadow = self.sanitized @stall = false end |
Instance Attribute Details
#stall ⇒ Object
Returns the value of attribute stall.
302 303 304 |
# File 'lib/seapig-client-ruby/client.rb', line 302 def stall @stall end |
Instance Method Details
#bump(options = {}) ⇒ Object
334 335 336 337 338 339 340 341 |
# File 'lib/seapig-client-ruby/client.rb', line 334 def bump(={}) version_old = @version data_old = @shadow @version = ([: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) ⇒ Object
313 314 315 316 |
# File 'lib/seapig-client-ruby/client.rb', line 313 def onproduce(&block) @onproduce_proc = block self end |
#produce(id, version_inferred) ⇒ Object
—– for SeapigClient
345 346 347 348 349 350 351 352 |
# 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 = {}) ⇒ Object
319 320 321 322 323 324 325 326 327 328 329 330 331 |
# File 'lib/seapig-client-ruby/client.rb', line 319 def set(={}) @version = [:version] if [:version] if [:object] @stall = false self.clear self.merge!([:object]) elsif [:object] == false or [:stall] @stall = true end @shadow = sanitized @initialized = true upload(0, {}, @version, @stall ? false : @shadow) end |
#upload(version_old, data_old, version_new, data_new) ⇒ Object
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 |
# 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 |