diff --git a/app/models/person.rb b/app/models/person.rb index 09e16d8dc..17a77b277 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -6,7 +6,7 @@ class Person xml_accessor :url key :email, String - key :url, String, :unique => true + key :url, String one :profile, :class_name => 'Profile', :foreign_key => :person_id many :posts, :class_name => 'Post', :foreign_key => :person_id @@ -16,15 +16,26 @@ class Person validates_presence_of :url validates_format_of :url, :with => /^(https?):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*(\.[a-z]{2,5})?(:[0-9]{1,5})?(\/.*)?$/ix - validates_presence_of :email + + + validates_true_for :url, :logic => lambda { self.url_unique?} + + validates_presence_of :email + before_validation :clean_url def real_name self.profile.first_name + " " + self.profile.last_name end + protected + + def url_unique? + same_url = Person.first(:url => self.url) + return same_url.nil? || same_url.id == self.id + end def clean_url self.url ||= "http://localhost:3000/" if self.class == User diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb index ddd91e38d..21e2ed877 100644 --- a/spec/models/person_spec.rb +++ b/spec/models/person_spec.rb @@ -1,4 +1,10 @@ require 'spec_helper' describe Person do + it 'should not allow a friend with the same url as the user' do + user = Factory.create(:user) + friend = Factory.build(:friend, :url => user.url) + friend.valid?.should == false + + end end