diff options
Diffstat (limited to 'users/app/models')
-rw-r--r-- | users/app/models/email.rb | 6 | ||||
-rw-r--r-- | users/app/models/identity.rb | 18 | ||||
-rw-r--r-- | users/app/models/local_email.rb | 4 | ||||
-rw-r--r-- | users/app/models/login_format_validation.rb | 8 |
4 files changed, 28 insertions, 8 deletions
diff --git a/users/app/models/email.rb b/users/app/models/email.rb index 1bcff1c..a9a503f 100644 --- a/users/app/models/email.rb +++ b/users/app/models/email.rb @@ -3,7 +3,7 @@ class Email < String validates :email, :format => { - :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/, + :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/, #local part of email is case-sensitive, so allow uppercase letter. :message => "needs to be a valid email address" } @@ -19,4 +19,8 @@ class Email < String self end + def handle + self.split('@').first + end + end diff --git a/users/app/models/identity.rb b/users/app/models/identity.rb index 355f67a..e0a24e9 100644 --- a/users/app/models/identity.rb +++ b/users/app/models/identity.rb @@ -1,4 +1,5 @@ class Identity < CouchRest::Model::Base + include LoginFormatValidation use_database :identities @@ -10,6 +11,8 @@ class Identity < CouchRest::Model::Base validate :unique_forward validate :alias_available + validate :address_local_email + validate :destination_email design do view :by_user_id @@ -63,6 +66,11 @@ class Identity < CouchRest::Model::Base write_attribute('keys', keys.merge(type => value)) end + # for LoginFormatValidation + def login + self.address.handle + end + protected def unique_forward @@ -79,4 +87,14 @@ class Identity < CouchRest::Model::Base end end + def address_local_email + return if address.valid? #this ensures it is LocalEmail + self.errors.add(:address, address.errors.messages[:email].first) #assumes only one error + end + + def destination_email + return if destination.valid? #this ensures it is Email + self.errors.add(:destination, destination.errors.messages[:email].first) #assumes only one error #TODO + end + end diff --git a/users/app/models/local_email.rb b/users/app/models/local_email.rb index c1f7c11..6303bb6 100644 --- a/users/app/models/local_email.rb +++ b/users/app/models/local_email.rb @@ -20,10 +20,6 @@ class LocalEmail < Email [handle] end - def handle - gsub(/@#{domain}/i, '') - end - def domain LocalEmail.domain end diff --git a/users/app/models/login_format_validation.rb b/users/app/models/login_format_validation.rb index 1d02bd1..c1fcf70 100644 --- a/users/app/models/login_format_validation.rb +++ b/users/app/models/login_format_validation.rb @@ -1,19 +1,21 @@ module LoginFormatValidation extend ActiveSupport::Concern + #TODO: Probably will replace this. Playing with using it for aliases too, but won't want it connected to login field. + included do # Have multiple regular expression validations so we can get specific error messages: validates :login, :format => { :with => /\A.{2,}\z/, - :message => "Login must have at least two characters"} + :message => "Must have at least two characters"} validates :login, :format => { :with => /\A[a-z\d_\.-]+\z/, :message => "Only lowercase letters, digits, . - and _ allowed."} validates :login, :format => { :with => /\A[a-z].*\z/, - :message => "Login must begin with a lowercase letter"} + :message => "Must begin with a lowercase letter"} validates :login, :format => { :with => /\A.*[a-z\d]\z/, - :message => "Login must end with a letter or digit"} + :message => "Must end with a letter or digit"} end end |