1 # frozen_string_literal: true
3 class UserSettingsDecorator
4 attr_reader
:user, :settings
18 user
.settings
['notification_emails'] = merged_notification_emails
if change
?('notification_emails')
19 user
.settings
['interactions'] = merged_interactions
if change
?('interactions')
20 user
.settings
['default_privacy'] = default_privacy_preference
if change
?('setting_default_privacy')
21 user
.settings
['default_sensitive'] = default_sensitive_preference
if change
?('setting_default_sensitive')
22 user
.settings
['default_language'] = default_language_preference
if change
?('setting_default_language')
23 user
.settings
['unfollow_modal'] = unfollow_modal_preference
if change
?('setting_unfollow_modal')
24 user
.settings
['boost_modal'] = boost_modal_preference
if change
?('setting_boost_modal')
25 user
.settings
['delete_modal'] = delete_modal_preference
if change
?('setting_delete_modal')
26 user
.settings
['auto_play_gif'] = auto_play_gif_preference
if change
?('setting_auto_play_gif')
27 user
.settings
['display_media'] = display_media_preference
if change
?('setting_display_media')
28 user
.settings
['expand_spoilers'] = expand_spoilers_preference
if change
?('setting_expand_spoilers')
29 user
.settings
['reduce_motion'] = reduce_motion_preference
if change
?('setting_reduce_motion')
30 user
.settings
['system_font_ui'] = system_font_ui_preference
if change
?('setting_system_font_ui')
31 user
.settings
['noindex'] = noindex_preference
if change
?('setting_noindex')
32 user
.settings
['theme'] = theme_preference
if change
?('setting_theme')
33 user
.settings
['hide_network'] = hide_network_preference
if change
?('setting_hide_network')
36 def merged_notification_emails
37 user
.settings
['notification_emails'].merge
coerced_settings('notification_emails').to_h
40 def merged_interactions
41 user
.settings
['interactions'].merge
coerced_settings('interactions').to_h
44 def default_privacy_preference
45 settings
['setting_default_privacy']
48 def default_sensitive_preference
49 boolean_cast_setting
'setting_default_sensitive'
52 def unfollow_modal_preference
53 boolean_cast_setting
'setting_unfollow_modal'
56 def boost_modal_preference
57 boolean_cast_setting
'setting_boost_modal'
60 def delete_modal_preference
61 boolean_cast_setting
'setting_delete_modal'
64 def system_font_ui_preference
65 boolean_cast_setting
'setting_system_font_ui'
68 def auto_play_gif_preference
69 boolean_cast_setting
'setting_auto_play_gif'
72 def display_media_preference
73 settings
['setting_display_media']
76 def expand_spoilers_preference
77 boolean_cast_setting
'setting_expand_spoilers'
80 def reduce_motion_preference
81 boolean_cast_setting
'setting_reduce_motion'
84 def noindex_preference
85 boolean_cast_setting
'setting_noindex'
88 def hide_network_preference
89 boolean_cast_setting
'setting_hide_network'
93 settings
['setting_theme']
96 def default_language_preference
97 settings
['setting_default_language']
100 def boolean_cast_setting(key
)
101 ActiveModel
::Type::Boolean.new
.cast(settings
[key
])
104 def coerced_settings(key
)
105 coerce_values settings
.fetch(key
, {})
108 def coerce_values(params_hash
)
109 params_hash
.transform_values
{ |x
| ActiveModel
::Type::Boolean.new
.cast(x
) }