mirror of
https://github.com/mastodon/mastodon.git
synced 2025-01-24 11:01:43 +01:00
48 lines
1.1 KiB
Ruby
48 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Status::Visibility
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
enum :visibility,
|
||
|
{ public: 0, unlisted: 1, private: 2, direct: 3, limited: 4 },
|
||
|
suffix: :visibility,
|
||
|
validate: true
|
||
|
|
||
|
scope :distributable_visibility, -> { where(visibility: %i(public unlisted)) }
|
||
|
scope :list_eligible_visibility, -> { where(visibility: %i(public unlisted private)) }
|
||
|
scope :not_direct_visibility, -> { where.not(visibility: :direct) }
|
||
|
|
||
|
validates :visibility, exclusion: { in: %w(direct limited) }, if: :reblog?
|
||
|
|
||
|
before_validation :set_visibility, unless: :visibility?
|
||
|
end
|
||
|
|
||
|
class_methods do
|
||
|
def selectable_visibilities
|
||
|
visibilities.keys - %w(direct limited)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def hidden?
|
||
|
!distributable?
|
||
|
end
|
||
|
|
||
|
def distributable?
|
||
|
public_visibility? || unlisted_visibility?
|
||
|
end
|
||
|
|
||
|
alias sign? distributable?
|
||
|
|
||
|
private
|
||
|
|
||
|
def set_visibility
|
||
|
self.visibility ||= reblog.visibility if reblog?
|
||
|
self.visibility ||= visibility_from_account
|
||
|
end
|
||
|
|
||
|
def visibility_from_account
|
||
|
account.locked? ? :private : :public
|
||
|
end
|
||
|
end
|