app/models/concerns/disabling.rb
# The disposable module is a soft-delete helper that:
#
# * adds `disable!` method that set a `disabled_at` attribute and then _buries_ the object
# * adds a `bury!` hook method that allows further modification when disabling
# * aliases `destroy!` and `destroy` to `disable!`, but still keeps `delete` and friends
#
module Disabling
extend ActiveSupport::Concern
def disable!
transaction do
update_attribute :disabled_at, Time.current
bury!
end
end
def disabled?
disabled_at.present?
end
def enabled?
!disabled?
end
# override to perform additional
# post-disable actions
def bury!
end
def ensure_enabled!
raise Mumuki::Domain::DisabledError if disabled?
end
alias_method :destroy!, :disable!
alias_method :destroy, :disable!
end