]> cat aescling's git repositories - mastodon.git/blob - app/lib/user_settings_decorator.rb
Update AUTHORS.md (#9141)
[mastodon.git] / app / lib / user_settings_decorator.rb
1 # frozen_string_literal: true
2
3 class UserSettingsDecorator
4 attr_reader :user, :settings
5
6 def initialize(user)
7 @user = user
8 end
9
10 def update(settings)
11 @settings = settings
12 process_update
13 end
14
15 private
16
17 def process_update
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')
34 end
35
36 def merged_notification_emails
37 user.settings['notification_emails'].merge coerced_settings('notification_emails').to_h
38 end
39
40 def merged_interactions
41 user.settings['interactions'].merge coerced_settings('interactions').to_h
42 end
43
44 def default_privacy_preference
45 settings['setting_default_privacy']
46 end
47
48 def default_sensitive_preference
49 boolean_cast_setting 'setting_default_sensitive'
50 end
51
52 def unfollow_modal_preference
53 boolean_cast_setting 'setting_unfollow_modal'
54 end
55
56 def boost_modal_preference
57 boolean_cast_setting 'setting_boost_modal'
58 end
59
60 def delete_modal_preference
61 boolean_cast_setting 'setting_delete_modal'
62 end
63
64 def system_font_ui_preference
65 boolean_cast_setting 'setting_system_font_ui'
66 end
67
68 def auto_play_gif_preference
69 boolean_cast_setting 'setting_auto_play_gif'
70 end
71
72 def display_media_preference
73 settings['setting_display_media']
74 end
75
76 def expand_spoilers_preference
77 boolean_cast_setting 'setting_expand_spoilers'
78 end
79
80 def reduce_motion_preference
81 boolean_cast_setting 'setting_reduce_motion'
82 end
83
84 def noindex_preference
85 boolean_cast_setting 'setting_noindex'
86 end
87
88 def hide_network_preference
89 boolean_cast_setting 'setting_hide_network'
90 end
91
92 def theme_preference
93 settings['setting_theme']
94 end
95
96 def default_language_preference
97 settings['setting_default_language']
98 end
99
100 def boolean_cast_setting(key)
101 ActiveModel::Type::Boolean.new.cast(settings[key])
102 end
103
104 def coerced_settings(key)
105 coerce_values settings.fetch(key, {})
106 end
107
108 def coerce_values(params_hash)
109 params_hash.transform_values { |x| ActiveModel::Type::Boolean.new.cast(x) }
110 end
111
112 def change?(key)
113 !settings[key].nil?
114 end
115 end
This page took 0.197651 seconds and 4 git commands to generate.