module Ohm::SoftDelete
Provides support for soft deletion.
class Post < Ohm::Model include Ohm::SoftDelete attribute :title index :title end post = Post.create(title: 'Title') post.deleted? # => false post.delete post.deleted? # => true Post.all.empty? # => true Post.find(title: 'Title').include?(post) # => true Post.exists?(post.id) # => true post = Post[post.id] post.deleted? # => true
Public Class Methods
included(model)
click to toggle source
# File lib/ohm/softdelete.rb, line 36 def self.included(model) model.attribute :deleted, ->(x) { !!x } model.extend ClassMethods end
Public Instance Methods
delete()
click to toggle source
# File lib/ohm/softdelete.rb, line 42 def delete redis.queue("MULTI") redis.queue("SREM", model.all.key, id) redis.queue("SADD", model.deleted.key, id) redis.queue("HSET", key, :deleted, true) redis.queue("EXEC") redis.commit self.deleted = true self end
deleted?()
click to toggle source
# File lib/ohm/softdelete.rb, line 68 def deleted? deleted end
restore()
click to toggle source
# File lib/ohm/softdelete.rb, line 55 def restore redis.queue("MULTI") redis.queue("SADD", model.all.key, id) redis.queue("SREM", model.deleted.key, id) redis.queue("HDEL", key, :deleted) redis.queue("EXEC") redis.commit self.deleted = nil self end