diff --git a/app/services/user_updater.rb b/app/services/user_updater.rb index 7130c2d199c..40801d664d1 100644 --- a/app/services/user_updater.rb +++ b/app/services/user_updater.rb @@ -1,27 +1,33 @@ class UserUpdater + + CATEGORY_IDS = { + watched_category_ids: :watching, + tracked_category_ids: :tracking, + muted_category_ids: :muted + } + + USER_ATTR = [ + :email_digests, + :email_always, + :email_direct, + :email_private_messages, + :external_links_in_new_tab, + :enable_quoting, + :dynamic_favicon, + :watch_new_topics + ] + def initialize(actor, user) @user = user @guardian = Guardian.new(actor) end def update(attributes = {}) - user.website = format_url(attributes[:website]) || user.website + user.website = format_url(attributes.fetch(:website) { user.website }) - user.bio_raw = attributes[:bio_raw] || user.bio_raw - user.name = attributes[:name] || user.name - user.digest_after_days = attributes[:digest_after_days] || user.digest_after_days - - if ids = attributes[:watched_category_ids] - CategoryUser.batch_set(user, :watching, ids) - end - - if ids = attributes[:tracked_category_ids] - CategoryUser.batch_set(user, :tracking, ids) - end - - if ids = attributes[:muted_category_ids] - CategoryUser.batch_set(user, :muted, ids) - end + user.bio_raw = attributes.fetch(:bio_raw) { user.bio_raw } + user.name = attributes.fetch(:name) { user.name } + user.digest_after_days = attributes.fetch(:digest_after_days) { user.digest_after_days } if attributes[:auto_track_topics_after_msecs] user.auto_track_topics_after_msecs = attributes[:auto_track_topics_after_msecs].to_i @@ -32,19 +38,16 @@ class UserUpdater end if guardian.can_grant_title?(user) - user.title = attributes[:title] || user.title + user.title = attributes.fetch(:title) { user.title } end - [ - :email_digests, - :email_always, - :email_direct, - :email_private_messages, - :external_links_in_new_tab, - :enable_quoting, - :dynamic_favicon, - :watch_new_topics - ].each do |attribute| + CATEGORY_IDS.each do |attribute, level| + if ids = attributes[attribute] + CategoryUser.batch_set(user, level, ids) + end + end + + USER_ATTR.each do |attribute| if attributes[attribute].present? user.send("#{attribute.to_s}=", attributes[attribute] == 'true') end