Module: SoftDeletion::Core::ClassMethods

Defined in:
lib/soft_deletion/core.rb

Instance Method Summary collapse

Instance Method Details

#mark_as_soft_deleted_sqlObject



29
30
31
# File 'lib/soft_deletion/core.rb', line 29

def mark_as_soft_deleted_sql
  { deleted_at: Time.now }
end

#soft_delete_all!(ids_or_models) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/soft_deletion/core.rb', line 33

def soft_delete_all!(ids_or_models)
  ids_or_models = Array.wrap(ids_or_models)

  if ids_or_models.first.is_a?(ActiveRecord::Base)
    ids = ids_or_models.map(&:id)
    models = ids_or_models
  else
    ids = ids_or_models
    models = where(:id => ids)
  end

  transaction do
    where(:id => ids).update_all(mark_as_soft_deleted_sql)

    models.each do |model|
      model.soft_delete_dependencies.each { |dep| dep.execute_soft_delete(:soft_delete!, []) }
      model.run_callbacks :soft_delete
    end
  end
end

#soft_delete_dependentsObject



15
16
17
18
19
# File 'lib/soft_deletion/core.rb', line 15

def soft_delete_dependents
  reflect_on_all_associations.
    select { |a| [:destroy, :delete_all, :nullify].include?(a.options[:dependent]) }.
    select { |a| a.klass.method_defined?(:soft_delete!) }.map(&:name)
end

#with_deletedObject



21
22
23
24
25
26
27
# File 'lib/soft_deletion/core.rb', line 21

def with_deleted
  key = :"soft_deletion_with_deleted_#{soft_delete_default_scope}"
  Thread.current[key] = true
  yield
ensure
  Thread.current[key] = nil
end