summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/account.rb9
-rw-r--r--app/models/identity.rb13
2 files changed, 15 insertions, 7 deletions
diff --git a/app/models/account.rb b/app/models/account.rb
index bffa288..32ed445 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -16,10 +16,13 @@ class Account
# Returns the user record so it can be used in views.
def self.create(attrs)
- @user = User.create(attrs).tap do |user|
- Identity.create_for user
- user.refresh_identity
+ @user = User.create(attrs)
+ if @user.persisted?
+ identity = @user.identity
+ identity.user_id = @user.id
+ identity.save
end
+ return @user
end
def update(attrs)
diff --git a/app/models/identity.rb b/app/models/identity.rb
index a8eaba6..25be971 100644
--- a/app/models/identity.rb
+++ b/app/models/identity.rb
@@ -129,8 +129,12 @@ class Identity < CouchRest::Model::Base
protected
def alias_available
- same_address = Identity.by_address.key(address)
- if same_address.detect { |other| other != self && other.user != self.user }
+ blocking_identities = Identity.by_address.key(address).all
+ blocking_identities.delete self
+ if self.user
+ blocking_identities.reject! { |other| other.user == self.user }
+ end
+ if blocking_identities.any?
errors.add :address, :taken
end
end
@@ -138,13 +142,14 @@ class Identity < CouchRest::Model::Base
def address_local_email
return if address.valid? #this ensures it is a valid local email address
# we only hand on the first error for now.
- self.errors.add(:address, address.errors.messages[:email].first)
+ self.errors.add(:address, address.errors.messages.values.first)
end
def destination_email
return if destination.nil? # this identity is disabled
return if destination.valid? # this ensures it is Email
- self.errors.add(:destination, destination.errors.messages[:email].first) #assumes only one error #TODO
+ # we only hand on the first error for now.
+ self.errors.add(:destination, destination.errors.messages.values.first)
end
end