module SoftDeletion::Core::ClassMethods

Public Instance Methods

mark_as_soft_deleted_sql() click to toggle source
# 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) click to toggle source
# 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_dependents() click to toggle source
# 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_deleted() { || ... } click to toggle source
# 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