Skip to content

Commit

Permalink
Merge pull request discourse#1159 from jd-erreape/user_refactors
Browse files Browse the repository at this point in the history
Refactors in user model
  • Loading branch information
SamSaffron committed Jul 8, 2013
2 parents 180d887 + 27b038c commit 807b9d4
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 30 deletions.
5 changes: 1 addition & 4 deletions app/models/group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -145,10 +145,7 @@ def add(user)
protected

def name_format_validator
validator = UsernameValidator.new(name)
unless validator.valid_format?
validator.errors.each { |e| errors.add(:name, e) }
end
UsernameValidator.perform_validation(self, 'name')
end

# hack around AR
Expand Down
47 changes: 21 additions & 26 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,26 +93,16 @@ def self.new_from_params(params)
def self.create_for_email(email, opts={})
username = UserNameSuggester.suggest(email)

if SiteSetting.call_discourse_hub?
begin
match, available, suggestion = DiscourseHub.nickname_match?(username, email)
username = suggestion unless match || available
rescue => e
Rails.logger.error e.message + "\n" + e.backtrace.join("\n")
end
discourse_hub_nickname_operation do
match, available, suggestion = DiscourseHub.nickname_match?(username, email)
username = suggestion unless match || available
end

user = User.new(email: email, username: username, name: username)
user.trust_level = opts[:trust_level] if opts[:trust_level].present?
user.save!

if SiteSetting.call_discourse_hub?
begin
DiscourseHub.register_nickname(username, email)
rescue => e
Rails.logger.error e.message + "\n" + e.backtrace.join("\n")
end
end
discourse_hub_nickname_operation { DiscourseHub.register_nickname(username, email) }

user
end
Expand Down Expand Up @@ -162,14 +152,8 @@ def change_username(new_username)
current_username = self.username
self.username = new_username

if current_username.downcase != new_username.downcase && SiteSetting.call_discourse_hub? && valid?
begin
DiscourseHub.change_nickname(current_username, new_username)
rescue DiscourseHub::NicknameUnavailable
false
rescue => e
Rails.logger.error e.message + "\n" + e.backtrace.join("\n")
end
if current_username.downcase != new_username.downcase && valid?
User.discourse_hub_nickname_operation { DiscourseHub.change_nickname(current_username, new_username) }
end

save
Expand Down Expand Up @@ -415,10 +399,7 @@ def guardian
end

def username_format_validator
validator = UsernameValidator.new(username)
unless validator.valid_format?
validator.errors.each { |e| errors.add(:username, e) }
end
UsernameValidator.perform_validation(self, 'username')
end

def email_confirmed?
Expand Down Expand Up @@ -604,6 +585,20 @@ def send_approval_email
email_token: email_tokens.first.token
)
end

private

def self.discourse_hub_nickname_operation
if SiteSetting.call_discourse_hub?
begin
yield
rescue DiscourseHub::NicknameUnavailable
false
rescue => e
Rails.logger.error e.message + "\n" + e.backtrace.join("\n")
end
end
end
end

# == Schema Information
Expand Down
14 changes: 14 additions & 0 deletions app/models/username_validator.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,18 @@
class UsernameValidator
# Public: Perform the validation of a field in a given object
# it adds the errors (if any) to the object that we're giving as parameter
#
# object - Object in which we're performing the validation
# field_name - name of the field that we're validating
#
# Example: UsernameValidator.perform_validation(user, 'name')
def self.perform_validation(object, field_name)
validator = UsernameValidator.new(object.send(field_name))
unless validator.valid_format?
validator.errors.each { |e| object.errors.add(field_name.to_sym, e) }
end
end

def initialize(username)
@username = username
@errors = []
Expand Down

0 comments on commit 807b9d4

Please sign in to comment.