Skip to content

Commit

Permalink
Change user update to use #fetch for defaults
Browse files Browse the repository at this point in the history
This changes the use of the || operator when setting the default of the
user attribute if the key does not exist to #fetch. This will make sure
that if false is passed in as the value it will still fail and use the
default setting.

This also adds constants to define and array and a hash of symbols which
is iterated over to set the users attributes.
  • Loading branch information
nickborromeo committed Jan 21, 2014
1 parent 60a3641 commit e8474bd
Showing 1 changed file with 30 additions and 27 deletions.
57 changes: 30 additions & 27 deletions app/services/user_updater.rb
Original file line number Diff line number Diff line change
@@ -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.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
user.website = format_url(attributes.fetch(:website) { user.website })

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
Expand All @@ -32,19 +38,16 @@ def update(attributes = {})
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
Expand Down

0 comments on commit e8474bd

Please sign in to comment.