- # frozen_string_literal: true
-
- class StatusPolicy
- attr_reader :account, :status
-
- def initialize(account, status)
- @account = account
- @status = status
- end
-
- def show?
- if direct?
- owned? || status.mentions.where(account: account).exists?
- elsif private?
- owned? || account&.following?(status.account) || status.mentions.where(account: account).exists?
- else
- account.nil? || !status.account.blocking?(account)
- end
- end
-
- def reblog?
- !direct? && !private? && show?
- end
-
- def destroy?
- admin? || owned?
- end
-
- alias unreblog? destroy?
-
- private
-
- def admin?
- account&.user&.admin?
- end
-
- def direct?
- status.direct_visibility?
- end
-
- def owned?
- status.account.id == account&.id
- end
-
- def private?
- status.private_visibility?
- end
- end
|