Sha256: acf144e416362e9ca54a06a3b00cc2303ab75b87d284ba9edb107383ebdd82f6
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
module Paranoia def self.included(klazz) klazz.extend Query klazz.extend Callbacks end module Query def paranoid? ; true ; end def with_deleted all.tap { |x| x.default_scoped = false } end def only_deleted with_deleted.where.not(deleted_at: nil) end alias :deleted :only_deleted def restore(id) if id.is_a?(Array) id.map { |one_id| restore(one_id) } else only_deleted.find(id).restore! end end end module Callbacks def self.extended(klazz) klazz.define_callbacks :restore klazz.define_singleton_method("before_restore") do |*args, &block| set_callback(:restore, :before, *args, &block) end klazz.define_singleton_method("around_restore") do |*args, &block| set_callback(:restore, :around, *args, &block) end klazz.define_singleton_method("after_restore") do |*args, &block| set_callback(:restore, :after, *args, &block) end end end def destroy run_callbacks(:destroy) { delete } end def delete return if new_record? destroyed? ? destroy! : update_column(:deleted_at, Time.now) end def restore! run_callbacks(:restore) { update_column :deleted_at, nil } end def destroyed? !!deleted_at end alias :deleted? :destroyed? end class ActiveRecord::Base def self.acts_as_paranoid alias :destroy! :destroy alias :delete! :delete include Paranoia default_scope { where(self.quoted_table_name + '.deleted_at IS NULL') } end def self.paranoid? ; false ; end def paranoid? ; self.class.paranoid? ; end # Override the persisted method to allow for the paranoia gem. # If a paranoid record is selected, then we only want to check # if it's a new record, not if it is "destroyed". def persisted? paranoid? ? !new_record? : super end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
paranoia-2.0.1 | lib/paranoia.rb |