unepwcmc/SAPI

View on GitHub
app/models/concerns/protected_deletion.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ProtectedDeletion
  extend ActiveSupport::Concern

  # ideally override this
  def can_be_deleted?
    dependent_objects.empty?
  end

  # used to return informative error message on failed destroy
  def dependent_objects
    dependent_objects_map.map do |k, v|
      v.limit(1).count > 0 ? k : nil
    end.compact
  end

  protected

  # returns hash that maps the displayable name of a dependency
  # to a relation that returns dependent objects
  # e.g. for an object that has_many :foos:
  # {'amazingly important Foos' => foos}
  def dependent_objects_map
    {}
  end
end