module SoftDeleteRails::Model::InstanceMethods
Public Instance Methods
destroy(force=nil)
click to toggle source
Calls superclass method
# File lib/soft_delete_rails/has_soft_delete.rb, line 22 def destroy(force=nil) if force == :force if super() hard_destroy_dependent_records return !self.persisted? end else run_callbacks(:destroy) do soft_deleted? || new_record? ? save : update_deleted_at(Time.current) end end end
revive()
click to toggle source
# File lib/soft_delete_rails/has_soft_delete.rb, line 35 def revive if soft_deleted? update_deleted_at(nil) revive_dependent_records return self.reload # return self reloaded end end
soft_deleted?()
click to toggle source
# File lib/soft_delete_rails/has_soft_delete.rb, line 43 def soft_deleted? deleted_at.present? end
Private Instance Methods
hard_destroy_dependent_records()
click to toggle source
Perform a hard destroy on the dependent records
# File lib/soft_delete_rails/has_soft_delete.rb, line 71 def hard_destroy_dependent_records reflections.each do |key, relation| if relation.options[:dependent] == :destroy records = send(key).try(:unscope, where: :deleted_at) if key.to_s.singularize.camelize.constantize.column_names.include?('deleted_at') records = Array.wrap(send(key)) if records.blank? records.each do |record| if record.respond_to?(:soft_deleted?) record.destroy(:force) else record.destroy end end end end end
reflections()
click to toggle source
# File lib/soft_delete_rails/has_soft_delete.rb, line 87 def reflections self.class.reflections end
revive_dependent_records()
click to toggle source
# File lib/soft_delete_rails/has_soft_delete.rb, line 58 def revive_dependent_records reflections.each do |key, relation| if relation.options[:dependent] == :destroy records = Array.wrap(send(key).try(:deleted)) if key.to_s.singularize.camelize.constantize.column_names.include?('deleted_at') records = Array.wrap(send(key)) if records.blank? records.to_a.each do |record| record.revive if record.respond_to?(:revive) end end end end
update_deleted_at(value)
click to toggle source
# File lib/soft_delete_rails/has_soft_delete.rb, line 49 def update_deleted_at(value) self.deleted_at = value if self.class.delete_options[:validate] == false save(validate: false) else save! end end