user_settings_decorator.rb 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 if change?('notification_emails')
  14. user.settings['interactions'] = merged_interactions if change?('interactions')
  15. user.settings['default_privacy'] = default_privacy_preference if change?('setting_default_privacy')
  16. user.settings['default_sensitive'] = default_sensitive_preference if change?('setting_default_sensitive')
  17. user.settings['default_language'] = default_language_preference if change?('setting_default_language')
  18. user.settings['unfollow_modal'] = unfollow_modal_preference if change?('setting_unfollow_modal')
  19. user.settings['boost_modal'] = boost_modal_preference if change?('setting_boost_modal')
  20. user.settings['delete_modal'] = delete_modal_preference if change?('setting_delete_modal')
  21. user.settings['auto_play_gif'] = auto_play_gif_preference if change?('setting_auto_play_gif')
  22. user.settings['display_media'] = display_media_preference if change?('setting_display_media')
  23. user.settings['expand_spoilers'] = expand_spoilers_preference if change?('setting_expand_spoilers')
  24. user.settings['reduce_motion'] = reduce_motion_preference if change?('setting_reduce_motion')
  25. user.settings['system_font_ui'] = system_font_ui_preference if change?('setting_system_font_ui')
  26. user.settings['noindex'] = noindex_preference if change?('setting_noindex')
  27. user.settings['theme'] = theme_preference if change?('setting_theme')
  28. user.settings['hide_network'] = hide_network_preference if change?('setting_hide_network')
  29. user.settings['aggregate_reblogs'] = aggregate_reblogs_preference if change?('setting_aggregate_reblogs')
  30. end
  31. def merged_notification_emails
  32. user.settings['notification_emails'].merge coerced_settings('notification_emails').to_h
  33. end
  34. def merged_interactions
  35. user.settings['interactions'].merge coerced_settings('interactions').to_h
  36. end
  37. def default_privacy_preference
  38. settings['setting_default_privacy']
  39. end
  40. def default_sensitive_preference
  41. boolean_cast_setting 'setting_default_sensitive'
  42. end
  43. def unfollow_modal_preference
  44. boolean_cast_setting 'setting_unfollow_modal'
  45. end
  46. def boost_modal_preference
  47. boolean_cast_setting 'setting_boost_modal'
  48. end
  49. def delete_modal_preference
  50. boolean_cast_setting 'setting_delete_modal'
  51. end
  52. def system_font_ui_preference
  53. boolean_cast_setting 'setting_system_font_ui'
  54. end
  55. def auto_play_gif_preference
  56. boolean_cast_setting 'setting_auto_play_gif'
  57. end
  58. def display_media_preference
  59. settings['setting_display_media']
  60. end
  61. def expand_spoilers_preference
  62. boolean_cast_setting 'setting_expand_spoilers'
  63. end
  64. def reduce_motion_preference
  65. boolean_cast_setting 'setting_reduce_motion'
  66. end
  67. def noindex_preference
  68. boolean_cast_setting 'setting_noindex'
  69. end
  70. def hide_network_preference
  71. boolean_cast_setting 'setting_hide_network'
  72. end
  73. def theme_preference
  74. settings['setting_theme']
  75. end
  76. def default_language_preference
  77. settings['setting_default_language']
  78. end
  79. def aggregate_reblogs_preference
  80. boolean_cast_setting 'setting_aggregate_reblogs'
  81. end
  82. def boolean_cast_setting(key)
  83. ActiveModel::Type::Boolean.new.cast(settings[key])
  84. end
  85. def coerced_settings(key)
  86. coerce_values settings.fetch(key, {})
  87. end
  88. def coerce_values(params_hash)
  89. params_hash.transform_values { |x| ActiveModel::Type::Boolean.new.cast(x) }
  90. end
  91. def change?(key)
  92. !settings[key].nil?
  93. end
  94. end