-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathuser_serializer.rb
101 lines (78 loc) · 2.6 KB
/
user_serializer.rb
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
class UserSerializer
include Serialization::PanoptesRestpack
include RecentLinkSerializer
include MediaLinksSerializer
include CachedSerializer
ME_ONLY_ATTRS = %w(
email languages global_email_communication
project_email_communication beta_email_communication
uploaded_subjects_count subject_limit admin login_prompt zooniverse_id
upload_whitelist valid_email ux_testing_email_communication
intervention_notifications banned
).freeze
attributes :id, :login, :display_name, :credited_name, :email, :languages,
:created_at, :updated_at, :type, :global_email_communication,
:project_email_communication, :beta_email_communication,
:subject_limit, :uploaded_subjects_count, :admin, :href, :login_prompt,
:private_profile, :zooniverse_id, :upload_whitelist, :avatar_src,
:valid_email, :ux_testing_email_communication, :intervention_notifications,
:banned
can_include :classifications, :project_preferences, :collection_preferences,
projects: { param: "owner", value: "login" },
collections: { param: "owner", value: "login" }
media_include :avatar, :profile_header
can_filter_by :login, :email
preload :avatar
cache_total_count true
def self.page(params = {}, scope = nil, context = {})
page_with_options NonCustomScopeFilterOptions.new(self, params, scope, context)
end
def admin
end
def type
"users"
end
def login_prompt
@model.migrated && @model.sign_in_count <= 1
end
def avatar_src
@model.avatar&.url_for_format(:get)
end
def credited_name
if [email protected]_name || @model.credited_name.include?('@')
@model.login
else
@model.credited_name
end
end
private
def permitted_requester?
@permitted ||= @context[:include_private] || requester
end
ME_ONLY_ATTRS.each do |me_only_attribute|
alias_method :"include_#{me_only_attribute}?", :permitted_requester?
end
def requester
@context[:requester] && @context[:requester].logged_in? &&
(@context[:requester].is_admin? || requester_is_user?)
end
def requester_is_user?
@model.id == @context[:requester].id
end
def add_links(model, data)
data[:links] = {}
end
class NonCustomScopeFilterOptions < RestPack::Serializer::Options
CUSTOM_SCOPE_FILTERS = %i(email login).freeze
def scope_with_filters
scope_filter = {}
non_custom_filters = @filters.except(*CUSTOM_SCOPE_FILTERS)
non_custom_filters.keys.each do |filter|
value = query_to_array(@filters[filter])
scope_filter[filter] = value
end
@scope.where(scope_filter)
end
end
end