42 lines
939 B
Ruby
42 lines
939 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module PublishScope
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
def visibility_scope
|
||
|
case @status.visibility
|
||
|
when 'public', 'unlisted'
|
||
|
local_scope
|
||
|
when 'private'
|
||
|
Account.where(id: Account
|
||
|
.union(local_followers_scope)
|
||
|
.union(local_mentions_scope)
|
||
|
.union(local_sender_scope)
|
||
|
)
|
||
|
when 'limited', 'direct'
|
||
|
Account.where(id: Account
|
||
|
.union(local_mentions_scope)
|
||
|
.union(local_sender_scope)
|
||
|
)
|
||
|
end.select(:id)
|
||
|
end
|
||
|
|
||
|
def local_scope
|
||
|
Account.local
|
||
|
end
|
||
|
|
||
|
def local_followers_scope
|
||
|
@status.account.delivery_followers.local.select(:id)
|
||
|
end
|
||
|
|
||
|
def local_mentions_scope
|
||
|
Account.local.where(id: @status.mentions.select(:account_id)).select(:id)
|
||
|
end
|
||
|
|
||
|
def local_sender_scope
|
||
|
Account.local.where(id: @account_id).select(:id)
|
||
|
end
|
||
|
end
|
||
|
end
|