diff --git a/lib/diaspora/parser.rb b/lib/diaspora/parser.rb index 07439dbb90d96212f0827531209c8d3e8ed5430e..b404fe3fcf66a9e26d52d84cd6dec707fb393bff 100644 --- a/lib/diaspora/parser.rb +++ b/lib/diaspora/parser.rb @@ -22,7 +22,8 @@ module Diaspora body.children.each do |post| begin object = post.name.camelize.constantize.from_xml post.to_s - if object.respond_to? :person + if object.is_a? Retraction + elsif object.respond_to? :person object.person = parse_owner_from_xml post.to_s elsif object.is_a? Profile puts "got into parse objects from xml PROFILE" @@ -31,8 +32,12 @@ module Diaspora person.save end objects << object - rescue - Rails.logger.info "Not a real type: #{object.to_s}" + rescue NameError => e + if e.message.include? 'wrong constant name' + Rails.logger.info "Not a real type: #{object.to_s}" + else + raise e + end end end objects @@ -43,6 +48,7 @@ module Diaspora objects.each do |p| Rails.logger.info("Receiving object:\n#{p.inspect}") if p.is_a? Retraction + puts "Got a retraction for #{p.post_id}" p.perform elsif p.is_a? Request User.owner.receive_friend_request(p) diff --git a/spec/lib/diaspora_parser_spec.rb b/spec/lib/diaspora_parser_spec.rb index 4b9ecbcb68c499622ee338f1dda5b676c82331a5..6b1578e688b495ae92630cc17b1ac8d374023b16 100644 --- a/spec/lib/diaspora_parser_spec.rb +++ b/spec/lib/diaspora_parser_spec.rb @@ -105,6 +105,7 @@ describe Diaspora::Parser do message = Factory.create(:status_message, :person => person) retraction = Retraction.for(message) request = Post.build_xml_for( [retraction] ) + puts request StatusMessage.count.should == 1 store_objects_from_xml( request ) diff --git a/spec/models/retraction_spec.rb b/spec/models/retraction_spec.rb index 276a74cb60638b59d3d35fb1bbf47b24902402aa..f33557edaccd361295351f8e4388c6fbee28a546 100644 --- a/spec/models/retraction_spec.rb +++ b/spec/models/retraction_spec.rb @@ -1,23 +1,22 @@ require File.dirname(__FILE__) + '/../spec_helper' describe Retraction do - describe "posts" do before do @user = Factory.create(:user) @post = Factory.create(:status_message, :person => @user) end - + describe 'serialization' do it 'should have a post id after serialization' do retraction = Retraction.for(@post) xml = retraction.to_xml.to_s xml.include?(@post.id.to_s).should == true end - + end + describe 'dispatching' do it 'should dispatch a message on delete' do Factory.create(:person) Post.send(:class_variable_get, :@@queue).should_receive(:add_post_request) @post.destroy end - end end