Module: Gemmy::Patches::HashPatch::PersistedHash

Defined in:
lib/gemmy/patches/hash_patch.rb

Overview

Helper methods for the persistence patch

Instance Method Summary collapse

Instance Method Details

#clearObject



382
383
384
385
386
# File 'lib/gemmy/patches/hash_patch.rb', line 382

def clear
  autovivified = Gemmy.patch("hash/i/autovivified")\
                      .method(:_autovivified)
  @store.transaction { @store[:data] = autovivified.call({}) }
end

#dataObject



355
356
357
# File 'lib/gemmy/patches/hash_patch.rb', line 355

def data
  @store.transaction { @store[:data] }
end

#dig_delete(*keys) ⇒ Object

Delete functions like “dig_delete” I.e. if given a few keys as arguments, it will treat only the last as a delete key and all the rest as dig keys.



362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/gemmy/patches/hash_patch.rb', line 362

def dig_delete(*keys)
  key_to_delete = keys.pop
  if keys.empty?
    delete key_to_delete
    @store.transaction do
      @store[:data].delete key_to_delete
    end
  else
    dig(*keys).delete key_to_delete
    @store.transaction do
      @store[:data].dig(*keys).delete key_to_delete
    end
  end
end

#get(*keys, disk: true) ⇒ Object



342
343
344
# File 'lib/gemmy/patches/hash_patch.rb', line 342

def get(*keys, disk: true)
  disk ? @store.transaction { @store[:data].dig(*keys) } : dig(*keys)
end

#set(*keys, val) ⇒ Object



346
347
348
349
350
351
352
353
# File 'lib/gemmy/patches/hash_patch.rb', line 346

def set(*keys, val)
  bury = Gemmy::Patches::HashPatch::InstanceMethods::Bury.method(:bury)
  bury.call(self, *keys, val)
  @store.transaction do
    bury.call(@store[:data], *(keys + [val]))
  end
  val
end

#set_state(hash) ⇒ Object

This won’t autovivify the hash automatically



378
379
380
# File 'lib/gemmy/patches/hash_patch.rb', line 378

def set_state(hash)
  @store.transaction { @store[:data] = hash }
end