catstodon/app/models/concerns/account/suspensions.rb

44 lines
1 KiB
Ruby

# frozen_string_literal: true
module Account::Suspensions
extend ActiveSupport::Concern
included do
scope :suspended, -> { where.not(suspended_at: nil) }
scope :without_suspended, -> { where(suspended_at: nil) }
end
def suspended?
suspended_at.present? && !instance_actor?
end
alias unavailable? suspended?
def suspended_locally?
suspended? && suspension_origin_local?
end
def suspended_permanently?
suspended? && deletion_request.nil?
end
alias permanently_unavailable? suspended_permanently?
def suspended_temporarily?
suspended? && deletion_request.present?
end
def suspend!(date: Time.now.utc, origin: :local, block_email: true)
transaction do
create_deletion_request!
update!(suspended_at: date, suspension_origin: origin)
create_canonical_email_block! if block_email
end
end
def unsuspend!
transaction do
deletion_request&.destroy!
update!(suspended_at: nil, suspension_origin: nil)
destroy_canonical_email_block!
end
end
end