Sha256: 54ad0fdebf0458fb7988d7e5c9a42c8dc437f6ff091a9d1c7a83630a9f898bed
Contents?: true
Size: 1.43 KB
Versions: 2
Compression:
Stored size: 1.43 KB
Contents
module Ohm # 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 # module SoftDelete def self.included(model) model.attribute :deleted, ->(x) { !!x } model.extend ClassMethods end 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 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 def deleted? deleted end module ClassMethods def deleted Set.new(self, key, key[:deleted]) end def exists?(id) super || deleted.exists?(id) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ohm-contrib-3.0.0 | lib/ohm/softdelete.rb |
ohm-contrib-2.2.0 | lib/ohm/softdelete.rb |