diff --git a/lib/diaspora/user/receiving.rb b/lib/diaspora/user/receiving.rb index 444770780..26d883313 100644 --- a/lib/diaspora/user/receiving.rb +++ b/lib/diaspora/user/receiving.rb @@ -38,33 +38,41 @@ module Diaspora if object.is_a?(Comment) || object.is_a?(Post)|| object.is_a?(Request) || object.is_a?(Retraction) || object.is_a?(Profile) e = EMWebfinger.new(object.diaspora_handle) - e.on_person { |person| + e.on_person do |person| if person.class == Person object.person = person if object.respond_to? :person= - if object.is_a? Request - return receive_request object, person - end - - raise "Not friends with that person" unless self.contact_for(salmon_author) - - if object.is_a?(Comment) - receive_comment object - elsif object.is_a?(Retraction) - receive_retraction object - elsif object.is_a?(Profile) - receive_profile object, person + unless object.is_a?(Request) || self.contact_for(salmon_author) + raise "Not friends with that person" else - receive_post object + + return receive_object(object,person) + end end - } + + end else raise "you messed up" end end + def receive_object(object,person) + if object.is_a?(Request) + receive_request object, person + elsif object.is_a?(Profile) + receive_profile object, person + + elsif object.is_a?(Comment) + receive_comment object + elsif object.is_a?(Retraction) + receive_retraction object + else + receive_post object + end + end + def receive_retraction retraction if retraction.type == 'Person' unless retraction.person.id.to_s == retraction.post_id.to_s diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb index 242eeab6e..dd7c86885 100644 --- a/spec/models/user/posting_spec.rb +++ b/spec/models/user/posting_spec.rb @@ -97,8 +97,9 @@ describe User do context 'dispatching' do let!(:user3) { make_user } - let!(:aspect3) { user3.aspects.create(:name => 'heroes') } let!(:user4) { make_user } + + let!(:aspect3) { user3.aspects.create(:name => 'heroes') } let!(:aspect4) { user4.aspects.create(:name => 'heroes') } let!(:post) { user.build_post :status_message, :message => "hey" } @@ -128,6 +129,17 @@ describe User do user.should_receive(:push_to_person).twice user.push_to_people(post, [user2.person, user3.person]) end + + it 'does not use the queue for local transfer' do + User::QUEUE.should_receive(:add_post_request).twice + + remote_person = user4.person + remote_person.owner_id = nil + remote_person.save + + user.push_to_people(post, [user2.person, user3.person, remote_person]) + end + end end