diff --git a/app/models/share_visibility.rb b/app/models/share_visibility.rb index 0eda3b0d8..4dbe526bf 100644 --- a/app/models/share_visibility.rb +++ b/app/models/share_visibility.rb @@ -4,7 +4,7 @@ class ShareVisibility < ActiveRecord::Base belongs_to :user - belongs_to :shareable, :polymorphic => :true + belongs_to :shareable, polymorphic: :true scope :for_a_user, ->(user) { where(user_id: user.id) @@ -18,7 +18,7 @@ class ShareVisibility < ActiveRecord::Base # @param share [Shareable] # @return [void] def self.batch_import(user_ids, share) - return false unless ShareVisibility.new(:shareable_id => share.id, :shareable_type => share.class.to_s).valid? + return false unless ShareVisibility.new(shareable_id: share.id, shareable_type: share.class.to_s).valid? if AppConfig.postgres? user_ids.each do |user_id| @@ -37,9 +37,8 @@ class ShareVisibility < ActiveRecord::Base end private + def not_public - if shareable.public? - errors[:base] << "Cannot create visibility for a public object" - end + errors[:base] << "Cannot create visibility for a public object" if shareable.public? end end diff --git a/app/models/user.rb b/app/models/user.rb index 28f3fa5da..6915c4388 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -115,10 +115,6 @@ class User < ActiveRecord::Base InvitationCode.find_or_create_by(user_id: self.id) end - def receive_shareable(shareable) - ShareVisibility.create!(shareable_id: shareable.id, shareable_type: shareable.class.base_class.to_s, user_id: id) - end - def hidden_shareables self[:hidden_shareables] ||= {} end diff --git a/app/workers/receive_local_batch.rb b/app/workers/receive_local_batch.rb deleted file mode 100644 index e243edf5c..000000000 --- a/app/workers/receive_local_batch.rb +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -module Workers - class ReceiveLocalBatch < Base - sidekiq_options queue: :receive - - def perform(object_class_string, object_id, recipient_user_ids) - object = object_class_string.constantize.find(object_id) - receiver = Postzord::Receiver::LocalBatch.new(object, recipient_user_ids) - receiver.perform! - rescue ActiveRecord::RecordNotFound # Already deleted before the job could run - end - end -end diff --git a/lib/diaspora/shareable.rb b/lib/diaspora/shareable.rb index a2df910b1..8c37ab522 100644 --- a/lib/diaspora/shareable.rb +++ b/lib/diaspora/shareable.rb @@ -39,7 +39,7 @@ module Diaspora def receive(recipient_user_ids) return if recipient_user_ids.empty? || public? - User.where(id: recipient_user_ids).find_each {|recipient| recipient.receive_shareable(self) } + ShareVisibility.batch_import(recipient_user_ids, self) end # @return [Integer] diff --git a/lib/postzord.rb b/lib/postzord.rb index 438da2b28..3f1292d2f 100644 --- a/lib/postzord.rb +++ b/lib/postzord.rb @@ -3,6 +3,5 @@ # the COPYRIGHT file. module Postzord - require 'postzord/receiver' require 'postzord/dispatcher' end diff --git a/lib/postzord/dispatcher.rb b/lib/postzord/dispatcher.rb index 8eb69346f..83cd4d40f 100644 --- a/lib/postzord/dispatcher.rb +++ b/lib/postzord/dispatcher.rb @@ -113,7 +113,7 @@ class Postzord::Dispatcher # @param people [Array] Recipients of the post def batch_deliver_to_local(people) ids = people.map{ |p| p.owner_id } - Workers::ReceiveLocalBatch.perform_async(@object.class.to_s, @object.id, ids) + #Workers::ReceiveLocalBatch.perform_async(@object.class.to_s, @object.id, ids) logger.info "event=push route=local sender=#{@sender.diaspora_handle} recipients=#{ids.join(',')} " \ "payload_type=#{@object.class}" end diff --git a/lib/postzord/receiver.rb b/lib/postzord/receiver.rb deleted file mode 100644 index f6e9264b8..000000000 --- a/lib/postzord/receiver.rb +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - - -class Postzord::Receiver - include Diaspora::Logging - - require 'postzord/receiver/local_batch' - - def perform! - self.receive! - end -end diff --git a/lib/postzord/receiver/local_batch.rb b/lib/postzord/receiver/local_batch.rb deleted file mode 100644 index 5ff042542..000000000 --- a/lib/postzord/receiver/local_batch.rb +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) 2010-2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -class Postzord::Receiver::LocalBatch < Postzord::Receiver - - attr_reader :object, :recipient_user_ids, :users - - def initialize(object, recipient_user_ids) - @object = object - @recipient_user_ids = recipient_user_ids - @users = User.where(:id => @recipient_user_ids) - - end - - def receive! - logger.info "receiving local batch for #{@object.inspect}" - if @object.respond_to?(:relayable?) - receive_relayable - else - create_share_visibilities - end - - logger.info "receiving local batch completed for #{@object.inspect}" - end - - # NOTE(copied over from receiver public) - # @return [void] - def receive_relayable - if @object.parent_author.local? - # receive relayable object only for the owner of the parent object - # @object.receive(@object.parent_author.owner) - end - end - - # Batch import post visibilities for the recipients of the given @object - # @note performs a bulk insert into mySQL - # @return [void] - def create_share_visibilities - ShareVisibility.batch_import(@recipient_user_ids, object) - end - - private - - def needs_notification?(person) - person && person != @object.author.owner && !@users.exists?(person.id) - end -end diff --git a/spec/lib/postzord/receiver/local_batch_spec.rb b/spec/lib/postzord/receiver/local_batch_spec.rb deleted file mode 100644 index 9cdc3a9b8..000000000 --- a/spec/lib/postzord/receiver/local_batch_spec.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'spec_helper' - -describe Postzord::Receiver::LocalBatch do - before do - @object = FactoryGirl.create(:status_message, :author => alice.person) - @ids = [bob.id.to_s] - end - - let(:receiver) { Postzord::Receiver::LocalBatch.new(@object, @ids) } - - describe '.initialize' do - it 'sets @post, @recipient_user_ids, and @user' do - [:object, :recipient_user_ids, :users].each do |instance_var| - expect(receiver.send(instance_var)).not_to be_nil - end - end - end - - describe '#receive!' do - it 'calls .create_share_visibilities' do - expect(receiver).to receive(:create_share_visibilities) - receiver.receive! - end - end - - describe '#create_share_visibilities' do - it 'calls sharevisibility.batch_import with hashes' do - expect(ShareVisibility).to receive(:batch_import).with(@ids, @object) - receiver.create_share_visibilities - end - end - - context 'integrates with a comment' do - before do - sm = FactoryGirl.create(:status_message, :author => alice.person) - @object = FactoryGirl.create(:comment, :author => bob.person, :post => sm) - end - - it 'does not call create_visibilities and notify_mentioned_users' do - expect(receiver).not_to receive(:create_share_visibilities) - receiver.perform! - end - end -end diff --git a/spec/lib/postzord/receiver_spec.rb b/spec/lib/postzord/receiver_spec.rb deleted file mode 100644 index a86309fb9..000000000 --- a/spec/lib/postzord/receiver_spec.rb +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) 2011, Diaspora Inc. This file is -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. - -require "spec_helper" - -describe Postzord::Receiver do - before do - @receiver = Postzord::Receiver.new - end - - describe "#perform!" do - before do - allow(@receiver).to receive(:receive!).and_return(true) - end - - it "calls receive!" do - expect(@receiver).to receive(:receive!) - @receiver.perform! - end - end -end diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 966ca59e2..c47881055 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -257,22 +257,21 @@ describe Post, :type => :model do describe "#receive" do it "creates a share visibility for the user" do + user_ids = [alice.id, eve.id] post = FactoryGirl.create(:status_message, author: bob.person) - expect_any_instance_of(User).to receive(:receive_shareable).with(post) do |user, _| - expect(user.id).to eq(alice.id) - end - post.receive([alice.id]) + expect(ShareVisibility).to receive(:batch_import).with(user_ids, post) + post.receive(user_ids) end it "does nothing for public post" do post = FactoryGirl.create(:status_message, author: bob.person, public: true) - expect_any_instance_of(User).not_to receive(:receive_shareable) + expect(ShareVisibility).not_to receive(:batch_import) post.receive([alice.id]) end it "does nothing if no recipients provided" do post = FactoryGirl.create(:status_message, author: bob.person) - expect_any_instance_of(User).not_to receive(:receive_shareable) + expect(ShareVisibility).not_to receive(:batch_import) post.receive([]) end end diff --git a/spec/workers/receive_local_batch_spec.rb b/spec/workers/receive_local_batch_spec.rb deleted file mode 100644 index acd841cf3..000000000 --- a/spec/workers/receive_local_batch_spec.rb +++ /dev/null @@ -1,14 +0,0 @@ -require "spec_helper" - -describe Workers::ReceiveLocalBatch do - it "calls the postzord" do - post = double - allow(Post).to receive(:find).with(1).and_return(post) - - zord = double - expect(Postzord::Receiver::LocalBatch).to receive(:new).with(post, [2]).and_return(zord) - expect(zord).to receive(:perform!) - - Workers::ReceiveLocalBatch.new.perform("Post", 1, [2]) - end -end