Module: ConcernsOnRails::SoftDeletable

Extended by:
ActiveSupport::Concern
Defined in:
lib/concerns_on_rails/soft_deletable.rb

Instance Method Summary collapse

Instance Method Details

#after_restoreObject



48
# File 'lib/concerns_on_rails/soft_deletable.rb', line 48

def after_restore; end

#after_soft_deleteObject



46
# File 'lib/concerns_on_rails/soft_deletable.rb', line 46

def after_soft_delete; end

#before_restoreObject



47
# File 'lib/concerns_on_rails/soft_deletable.rb', line 47

def before_restore; end

#before_soft_deleteObject

Soft delete hooks



45
# File 'lib/concerns_on_rails/soft_deletable.rb', line 45

def before_soft_delete; end

#deleted?Boolean Also known as: is_soft_deleted?, soft_deleted?

Returns:

  • (Boolean)


82
83
84
# File 'lib/concerns_on_rails/soft_deletable.rb', line 82

def deleted?
  self[self.class.soft_delete_field].present?
end

#is_really_deleted?Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/concerns_on_rails/soft_deletable.rb', line 91

def is_really_deleted?
  !self.class.unscoped.exists?(id)
end

#really_delete!Object

bypasses AR callbacks and validations — use when you want a true hard delete



77
78
79
80
# File 'lib/concerns_on_rails/soft_deletable.rb', line 77

def really_delete!
  self.class.unscoped.where(self.class.primary_key => id).delete_all
  freeze
end

#restore!Object



63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/concerns_on_rails/soft_deletable.rb', line 63

def restore!
  return true unless deleted?

  before_restore
  result = if self.class.soft_delete_touch
             update(self.class.soft_delete_field => nil)
           else
             update_column(self.class.soft_delete_field, nil)
           end
  after_restore if result
  result
end

#soft_delete!Object



50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/concerns_on_rails/soft_deletable.rb', line 50

def soft_delete!
  return true if deleted?

  before_soft_delete
  result = if self.class.soft_delete_touch
             update(self.class.soft_delete_field => Time.zone.now)
           else
             update_column(self.class.soft_delete_field, Time.zone.now)
           end
  after_soft_delete if result
  result
end