ozfortress/citadel

View on GitHub
app/models/concerns/users/deleted_by.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Users
  module DeletedBy
    extend ActiveSupport::Concern

    included do
      belongs_to :deleted_by, optional: true, class_name: 'User'

      scope :existing, -> { where(deleted_by: nil) }
      scope :deleted, -> { where.not(deleted_by: nil) }
      scope :deleted_by, ->(user) { where(deleted_by: user) }
    end

    def deleted?
      !exists?
    end

    def exists?
      deleted_by.nil?
    end

    def delete(user)
      _delete(user)
      save
    end

    def delete!(user)
      _delete(user)
      save!
    end

    def undelete
      _undelete
      save
    end

    def undelete!
      _undelete
      save!
    end

    private

    def _delete(user)
      self.deleted_by = user
      self.deleted_at = Time.zone.now
    end

    def _undelete
      self.deleted_by = nil
    end
  end
end