Module: SoftDelete::SoftDeletable

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

Overview

TODO: wrap in a transaction

Constant Summary collapse

@@soft_delete_dependency_behavior =
nil
@@include_default_scope =
true

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.dependent(behavior = :ignore) ⇒ Object

descibes how soft delete should handle dependencies ignore ignore dependencies and do nothing. this is the default behavior default fire off the same action that is described by ar dsl soft_delete if dsl is :destroy, then override with a soft_delete

Raises:

  • (ArgumentError)


31
32
33
34
35
36
# File 'lib/soft_delete/soft_deletable.rb', line 31

def self.dependent(behavior = :ignore)
  raise ArgumentError unless i[ignore default soft_delete].include? behavior

  @@soft_delete_dependency_behavior = behavior
  self
end

.not_scopedObject



18
19
20
21
22
# File 'lib/soft_delete/soft_deletable.rb', line 18

def self.not_scoped
  @@include_default_scope = false

  self
end

Instance Method Details

#soft_delete(validate: true) ⇒ Object



38
39
40
41
42
# File 'lib/soft_delete/soft_deletable.rb', line 38

def soft_delete(validate: true)
  soft_delete!(validate: validate)
rescue ActiveRecord::RecordInvalid
  false
end

#soft_delete!(validate: true) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/soft_delete/soft_deletable.rb', line 44

def soft_delete!(validate: true)
  ActiveRecord::Base.transaction do
    handle_soft_delete_dependency_behavior
    run_callbacks(:destroy) do
      self.deleted_at = Time.now
      save!(validate: validate)
    end
  end
end