From 4827953bec250f630ca19ede3af37d1587ff1f62 Mon Sep 17 00:00:00 2001
From: danielvincent <danielgrippi@gmail.com>
Date: Thu, 5 Aug 2010 10:29:30 -0700
Subject: [PATCH] DG MS; person specs are now passing.  retraction on unfriend
 is now uncommented

---
 app/models/person.rb       |  5 +----
 app/models/user.rb         | 33 ++++++++++-----------------------
 spec/models/person_spec.rb | 13 ++++++-------
 3 files changed, 17 insertions(+), 34 deletions(-)

diff --git a/app/models/person.rb b/app/models/person.rb
index 9c148b50a1..b7bb371dd9 100644
--- a/app/models/person.rb
+++ b/app/models/person.rb
@@ -14,11 +14,11 @@ class Person
   key :key_fingerprint, String
 
   key :owner_id, ObjectId
+  key :user_refs, Integer, :default => 0
 
   belongs_to :owner, :class_name => 'User'
   one :profile, :class_name => 'Profile'
 
-  many :users, :class_name => 'User'
   many :posts, :class_name => 'Post', :foreign_key => :person_id
   many :albums, :class_name => 'Album', :foreign_key => :person_id
 
@@ -49,9 +49,6 @@ class Person
   end
 
 
-
-
-
   ######## Posting ########
   def post(class_name, options = {})
     options[:person] = self
diff --git a/app/models/user.rb b/app/models/user.rb
index f022066f06..8b9995c464 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -4,15 +4,17 @@ class User
   devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
          
+  key :friend_ids, Array
+  key :pending_friend_ids, Array
+
+  one :person, :class_name => 'Person', :foreign_key => :owner_id
+  many :friends, :in => :friend_ids, :class_name => 'Person'
+
   #before_validation_on_create :assign_key
-  
   before_validation :do_bad_things
 
-  one :person, :class_name => 'Person', :foreign_key => :owner_id
 
-  key :pending_friend_ids, Array
 
-  many :friends, :class_name => 'Person'
 
 
   def pending_friends
@@ -24,8 +26,6 @@ class User
     "#{person.profile.first_name.to_s} #{person.profile.last_name.to_s}"
   end
   
-  
-
 
 
   ######### Friend Requesting
@@ -71,26 +71,13 @@ class User
   def unfriend(friend_id)
     bad_friend = Person.first(:_id => friend_id)
 
-
-    puts bad_friend.users.count
-    puts self.friends.inspect
-
-    self.friends.delete( friend_id )
+    self.friend_ids.delete( friend_id )
     self.save
 
-    bad_friend.users.delete( self.id )
-
-
-    puts bad_friend.users.inspect
-
-
-
-    puts bad_friend.users.count
-    
     if bad_friend 
-      puts bad_friend.url
-      #Retraction.for(self).push_to_url(bad_friend.url) 
-      bad_friend.destroy if bad_friend.users.count == 0
+      Retraction.for(self).push_to_url(bad_friend.url) 
+      bad_friend.update_attributes(:user_refs => bad_friend.user_refs - 1)
+      bad_friend.destroy if bad_friend.user_refs == 0
     end
   end
 
diff --git a/spec/models/person_spec.rb b/spec/models/person_spec.rb
index 553b884897..ca3b9aeadd 100644
--- a/spec/models/person_spec.rb
+++ b/spec/models/person_spec.rb
@@ -49,8 +49,9 @@ describe Person do
       
       person = Factory.create(:person)
 
-      person.users << user
       user.friends << person
+      person.user_refs += 1
+      person.save
 
       Person.all.count.should == 2
       user.friends.count.should == 1
@@ -68,16 +69,14 @@ describe Person do
 
       person = Factory.create(:person)
 
-
-      person.users << user_one
-      person.users << user_two
-      person.save
-
       user_one.friends << person
       user_two.friends << person
       user_one.save
       user_two.save
 
+      person.user_refs += 2
+      person.save
+
       Person.all.count.should == 3
       user_one.friends.count.should == 1
       user_two.friends.count.should == 1
@@ -87,7 +86,7 @@ describe Person do
       user_one.friends.count.should == 0
       user_two.friends.count.should == 1
 
-      Person.all.count.should == 2
+      Person.all.count.should == 3
     end
   end
 
-- 
GitLab