diff --git a/app/models/contact.rb b/app/models/contact.rb index 46e40aa06..a4025ad1a 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -3,6 +3,8 @@ # the COPYRIGHT file. class Contact < ActiveRecord::Base + include Diaspora::Federated::Base + belongs_to :user validates :user, presence: true @@ -85,7 +87,7 @@ class Contact < ActiveRecord::Base user.share_with(person, user.auto_follow_back_aspect) if user.auto_follow_back && !receiving end - # object for local recipient + # object for local recipients def object_to_receive Contact.create_or_update_sharing_contact(person.owner, user.person) end diff --git a/lib/diaspora/federated/base.rb b/lib/diaspora/federated/base.rb index aff095ed3..ebceec3fa 100644 --- a/lib/diaspora/federated/base.rb +++ b/lib/diaspora/federated/base.rb @@ -7,6 +7,11 @@ module Diaspora module Federated module Base + # object for local recipients + def object_to_receive + self + end + # @abstract # @note this must return [Array] # @return [Array] diff --git a/lib/diaspora/federation/dispatcher.rb b/lib/diaspora/federation/dispatcher.rb index 6190c6e73..66bdc9932 100644 --- a/lib/diaspora/federation/dispatcher.rb +++ b/lib/diaspora/federation/dispatcher.rb @@ -42,9 +42,9 @@ module Diaspora end def deliver_to_local(people) - obj = object.respond_to?(:object_to_receive) ? object.object_to_receive : object - return unless obj - Workers::ReceiveLocal.perform_async(obj.class.to_s, obj.id, people.map(&:owner_id)) + object_to_receive = object.object_to_receive + return unless object_to_receive + Workers::ReceiveLocal.perform_async(object_to_receive.class.to_s, object_to_receive.id, people.map(&:owner_id)) end def deliver_to_remote(_people) diff --git a/spec/lib/diaspora/federated/base_spec.rb b/spec/lib/diaspora/federated/base_spec.rb index cba9b51af..78b262dfd 100644 --- a/spec/lib/diaspora/federated/base_spec.rb +++ b/spec/lib/diaspora/federated/base_spec.rb @@ -5,15 +5,21 @@ require "spec_helper" describe Diaspora::Federated::Base do + class Foo + include Diaspora::Federated::Base + end + + let(:foo) { Foo.new } + + describe "#object_to_receive" do + it "returns self" do + expect(foo.object_to_receive).to eq(foo) + end + end + describe "#subscribers" do it "throws an error if the including module does not redefine it" do - class Foo - include Diaspora::Federated::Base - end - - f = Foo.new - - expect { f.subscribers }.to raise_error(/override subscribers/) + expect { foo.subscribers }.to raise_error(/override subscribers/) end end end diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb index 522413003..a1fa9e750 100644 --- a/spec/models/contact_spec.rb +++ b/spec/models/contact_spec.rb @@ -210,6 +210,16 @@ describe Contact, type: :model do end end + describe "#object_to_receive" do + it "returns the contact for the recipient" do + user = FactoryGirl.create(:user) + contact = alice.contacts.create(person: user.person) + receive = contact.object_to_receive + expect(receive.user).to eq(user) + expect(receive.person).to eq(alice.person) + end + end + describe "#subscribers" do it "returns an array with recipient of the contact" do contact = alice.contacts.create(person: eve.person)