summaryrefslogtreecommitdiff
path: root/users/app/models/user.rb
diff options
context:
space:
mode:
authorAzul <azul@leap.se>2012-12-18 13:41:41 +0100
committerAzul <azul@leap.se>2012-12-18 13:41:41 +0100
commit285b23f39765d8346a658a81eca8b70d70b3e9bf (patch)
treeddb8f4d433c6f0461f7832ad08475b9a5bae99b2 /users/app/models/user.rb
parent6e8a45145722c12dee4d15b33cc28d2b09881e1a (diff)
refactored email_alias creation and validation
using CouchRests user.email_aliases.build so the casted_by method is set in the alias Used this to move the validations into the alias itself. This is where they belong and allows us to render the errors inline along the email field they belong to.
Diffstat (limited to 'users/app/models/user.rb')
-rw-r--r--users/app/models/user.rb26
1 files changed, 5 insertions, 21 deletions
diff --git a/users/app/models/user.rb b/users/app/models/user.rb
index d66b0e9..0773f28 100644
--- a/users/app/models/user.rb
+++ b/users/app/models/user.rb
@@ -35,9 +35,7 @@ class User < CouchRest::Model::Base
validates :email_forward,
:format => { :with => /\A(([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,}))?\Z/, :message => "needs to be a valid email address"}
- validate :no_duplicate_email_aliases
-
- validate :email_aliases_differ_from_email
+ validate :email_differs_from_email_aliases
timestamps!
@@ -117,34 +115,20 @@ class User < CouchRest::Model::Base
APP_CONFIG['admins'].include? self.login
end
- def add_email_alias(email)
- email = LocalEmail.new(email) unless email.is_a? Email
- email_aliases << email
- end
-
# this currently only adds the first email address submitted.
# All the ui needs for now.
def email_aliases_attributes=(attrs)
- if attrs && attrs.values.first
- add_email_alias attrs.values.first
- end
+ email_aliases.build(attrs.values.first) if attrs
end
-
##
# Validation Functions
##
- # TODO: How do we handle these errors?
- def no_duplicate_email_aliases
- if email_aliases.count != email_aliases.map(&:email).uniq.count
- errors.add(:email_aliases, "include a duplicate")
- end
- end
-
- def email_aliases_differ_from_email
+ def email_differs_from_email_aliases
+ return if email_aliases.last.errors.any?
if email_aliases.map(&:email).include?(email)
- errors.add(:email_aliases, "include the original email address")
+ errors.add(:email, "may not be the same as an alias")
end
end