user_settings_decorator.rb 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # frozen_string_literal: true
  2. class UserSettingsDecorator
  3. attr_reader :user, :settings
  4. def initialize(user)
  5. @user = user
  6. end
  7. def update(settings)
  8. @settings = settings
  9. process_update
  10. end
  11. private
  12. def process_update
  13. user.settings['notification_emails'] = merged_notification_emails
  14. user.settings['interactions'] = merged_interactions
  15. user.settings['default_privacy'] = default_privacy_preference
  16. user.settings['default_sensitive'] = default_sensitive_preference
  17. user.settings['unfollow_modal'] = unfollow_modal_preference
  18. user.settings['boost_modal'] = boost_modal_preference
  19. user.settings['delete_modal'] = delete_modal_preference
  20. user.settings['auto_play_gif'] = auto_play_gif_preference
  21. user.settings['system_font_ui'] = system_font_ui_preference
  22. user.settings['noindex'] = noindex_preference
  23. user.settings['theme'] = theme_preference
  24. end
  25. def merged_notification_emails
  26. user.settings['notification_emails'].merge coerced_settings('notification_emails').to_h
  27. end
  28. def merged_interactions
  29. user.settings['interactions'].merge coerced_settings('interactions').to_h
  30. end
  31. def default_privacy_preference
  32. settings['setting_default_privacy']
  33. end
  34. def default_sensitive_preference
  35. boolean_cast_setting 'setting_default_sensitive'
  36. end
  37. def unfollow_modal_preference
  38. boolean_cast_setting 'setting_unfollow_modal'
  39. end
  40. def boost_modal_preference
  41. boolean_cast_setting 'setting_boost_modal'
  42. end
  43. def delete_modal_preference
  44. boolean_cast_setting 'setting_delete_modal'
  45. end
  46. def system_font_ui_preference
  47. boolean_cast_setting 'setting_system_font_ui'
  48. end
  49. def auto_play_gif_preference
  50. boolean_cast_setting 'setting_auto_play_gif'
  51. end
  52. def noindex_preference
  53. boolean_cast_setting 'setting_noindex'
  54. end
  55. def theme_preference
  56. settings['setting_theme']
  57. end
  58. def boolean_cast_setting(key)
  59. settings[key] == '1'
  60. end
  61. def coerced_settings(key)
  62. coerce_values settings.fetch(key, {})
  63. end
  64. def coerce_values(params_hash)
  65. params_hash.transform_values { |x| x == '1' }
  66. end
  67. end