1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# frozen_string_literal: true
class REST::AccountSerializer < ActiveModel::Serializer
include RoutingHelper
include FormattingHelper
attributes :id, :username, :acct, :display_name, :locked, :bot, :discoverable, :group, :created_at,
:note, :url, :avatar, :avatar_static, :header, :header_static,
:followers_count, :following_count, :statuses_count, :last_status_at
has_one :moved_to_account, key: :moved, serializer: REST::AccountSerializer, if: :moved_and_not_nested?
has_many :emojis, serializer: REST::CustomEmojiSerializer
attribute :suspended, if: :suspended?
attribute :silenced, key: :limited, if: :silenced?
attribute :noindex, if: :local?
attribute :memorial, if: :memorial?
class AccountDecorator < SimpleDelegator
def self.model_name
Account.model_name
end
def moved?
false
end
end
class RoleSerializer < ActiveModel::Serializer
attributes :id, :name, :color
def id
object.id.to_s
end
end
has_many :roles, serializer: RoleSerializer, if: :local?
class FieldSerializer < ActiveModel::Serializer
include FormattingHelper
attributes :name, :value, :verified_at
def value
account_field_value_format(object)
end
end
has_many :fields
def id
object.id.to_s
end
def acct
object.pretty_acct
end
def note
object.suspended? ? '' : account_bio_format(object)
end
def url
ActivityPub::TagManager.instance.url_for(object)
end
def avatar
full_asset_url(object.suspended? ? object.avatar.default_url : object.avatar_original_url)
end
def avatar_static
full_asset_url(object.suspended? ? object.avatar.default_url : object.avatar_static_url)
end
def header
full_asset_url(object.suspended? ? object.header.default_url : object.header_original_url)
end
def header_static
full_asset_url(object.suspended? ? object.header.default_url : object.header_static_url)
end
def created_at
object.created_at.midnight.as_json
end
def last_status_at
object.last_status_at&.to_date&.iso8601
end
def followers_count
(Setting.hide_followers_count || object.user&.setting_hide_followers_count) ? -1 : object.followers_count
end
def display_name
object.suspended? ? '' : object.display_name
end
def locked
object.suspended? ? false : object.locked
end
def bot
object.suspended? ? false : object.bot
end
def discoverable
object.suspended? ? false : object.discoverable
end
def moved_to_account
object.suspended? ? nil : AccountDecorator.new(object.moved_to_account)
end
def emojis
object.suspended? ? [] : object.emojis
end
def fields
object.suspended? ? [] : object.fields
end
def suspended
object.suspended?
end
def silenced
object.silenced?
end
def memorial
object.memorial?
end
def roles
if object.suspended? || object.user.nil?
[]
else
[object.user.role].compact.filter(&:highlighted?)
end
end
def noindex
object.user_prefers_noindex?
end
delegate :suspended?, :silenced?, :local?, :memorial?, to: :object
def moved_and_not_nested?
object.moved?
end
end
|