From bee71c5a23eb714eec7bf8bf34148e7f9870903e Mon Sep 17 00:00:00 2001
From: Raphael <raphael@joindiaspora.com>
Date: Wed, 11 Aug 2010 15:22:06 -0700
Subject: [PATCH] RS, DG; All saving moved to user

---
 app/models/user.rb                          | 10 +++++--
 lib/diaspora/parser.rb                      | 30 ++++-----------------
 spec/controllers/publics_controller_spec.rb |  1 -
 spec/models/user_spec.rb                    |  4 +++
 4 files changed, 17 insertions(+), 28 deletions(-)

diff --git a/app/models/user.rb b/app/models/user.rb
index 2e82b09047..35acbd2f05 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -128,11 +128,17 @@ class User
       object.perform
       
     elsif object.is_a? Request
+      person = get_or_create_person_object_from_xml( xml )
+      person.serialized_key ||= object.exported_key
+      object.person = person
+      object.person.save
+      object.save
       receive_friend_request(object)
 
     elsif object.is_a? Profile
-      object.save
-
+      person = Diaspora::Parser.parse_owner_id_from_xml xml
+      person.profile = object
+      person.save  
     elsif object.respond_to?(:person) && !(object.person.nil?) && !(object.person.is_a? User) 
       Rails.logger.debug("Saving object with success: #{object.save}")
     end
diff --git a/lib/diaspora/parser.rb b/lib/diaspora/parser.rb
index 8838591511..a82fd722c9 100644
--- a/lib/diaspora/parser.rb
+++ b/lib/diaspora/parser.rb
@@ -1,22 +1,18 @@
 module Diaspora
   module Parser
-    def parse_owner_from_xml(xml)
-      doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks }
-      email = doc.xpath("//person/email").text.to_s
-      Person.first(:email => email)
-    end
-
     def parse_body_contents_from_xml(xml)
       doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks }
       doc.xpath("/XML/post")
     end
     
-    def parse_owner_id_from_xml(doc)
+    def parse_owner_id_from_xml(xml)
+      doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks }
       id = doc.xpath("//person_id").text.to_s
       Person.first(:id => id)
     end
 
-    def get_or_create_person_object_from_xml(doc)
+    def get_or_create_person_object_from_xml(xml)
+      doc = Nokogiri::XML(xml) { |cfg| cfg.noblanks }
       person_xml = doc.xpath("//request/person").to_s
       person_id = doc.xpath("//request/person/_id").text.to_s
       person = Person.first(:_id => person_id)
@@ -28,23 +24,7 @@ module Diaspora
       return unless body = parse_body_contents_from_xml(xml).children.first
 
       begin
-        object = body.name.camelize.constantize.from_xml body.to_s
-
-        if object.is_a? Retraction
-        elsif object.is_a? Profile
-          person = parse_owner_id_from_xml body
-          person.profile = object
-          person.save  
-        elsif object.is_a? Request
-          person = get_or_create_person_object_from_xml(body)
-          person.serialized_key ||= object.exported_key
-          object.person = person
-          object.person.save
-          object.save
-        elsif object.respond_to? :person  
-          object.person =  parse_owner_from_xml body.to_s 
-        end
-        object
+        body.name.camelize.constantize.from_xml body.to_s
       rescue NameError => e
         if e.message.include? 'wrong constant name'
           Rails.logger.info "Not a real type: #{object.to_s}"
diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb
index 0181a2cb48..c3455d4621 100644
--- a/spec/controllers/publics_controller_spec.rb
+++ b/spec/controllers/publics_controller_spec.rb
@@ -41,7 +41,6 @@ describe PublicsController do
   
       req.delete
       @user2.reload
-      puts @user2.inspect
       @user2.pending_requests.count.should be 1
     end
 
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ae9be2083e..bb54daeb67 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -222,11 +222,15 @@ describe User do
 
     it 'should be able to parse and store a status message from xml' do
       status_message = @user2.post :status_message, :message => 'store this!'
+      person = @user2.person
+
       xml = status_message.to_diaspora_xml
       @user2.destroy
       status_message.destroy
       StatusMessage.all.size.should == 0
       @user.receive( xml )
+      
+      person.posts.first.message.should == 'store this!'
       StatusMessage.all.size.should == 1
     end
   end
-- 
GitLab