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