Merge pull request #5478 from margori/Purge_orphan_conversation

Destroy conversation when all participants leave it
This commit is contained in:
Jonne Haß 2014-12-17 16:43:04 +01:00
commit edc1a23f50
5 changed files with 49 additions and 1 deletions

View file

@ -76,6 +76,7 @@ This is disabled by default since it requires the installation of additional pac
* Update rack-protection [#5403](https://github.com/diaspora/diaspora/pull/5403)
* Cleanup diaspora.yml [#5426](https://github.com/diaspora/diaspora/pull/5426)
* Replace `opengraph_parser` with `open_graph_reader` [#5462](https://github.com/diaspora/diaspora/pull/5462)
* Make sure conversations without any visibilities left are deleted [#5478](https://github.com/diaspora/diaspora/pull/5478)
## Bug fixes
* orca cannot see 'Add Contact' button [#5158](https://github.com/diaspora/diaspora/pull/5158)

View file

@ -3,4 +3,14 @@ class ConversationVisibility < ActiveRecord::Base
belongs_to :conversation
belongs_to :person
after_destroy :check_orphan_conversation
private
def check_orphan_conversation
conversation = Conversation.find_by_id(self.conversation.id)
if conversation
conversation.destroy if conversation.participants.count == 0
end
end
end

View file

@ -0,0 +1,9 @@
class PurgeOrphanConversations < ActiveRecord::Migration
def up
Conversation.joins("LEFT JOIN conversation_visibilities ON conversation_visibilities.conversation_id = conversations.id").group('conversations.id').having("COUNT(conversation_visibilities.id) = 0").delete_all
end
def down
raise ActiveRecord::IrreversibleMigration
end
end

View file

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20141209041241) do
ActiveRecord::Schema.define(version: 20141216213423) do
create_table "account_deletions", force: true do |t|
t.string "diaspora_handle"

View file

@ -0,0 +1,28 @@
# Copyright (c) 2010-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 ConversationVisibility, :type => :model do
before do
@user1 = alice
@participant_ids = [@user1.contacts.first.person.id, @user1.person.id]
@create_hash = {
:author => @user1.person,
:participant_ids => @participant_ids,
:subject => "cool stuff",
:messages_attributes => [ {:author => @user1.person, :text => 'hey'} ]
}
@conversation = Conversation.create(@create_hash)
end
it 'destroy conversation when no participant' do
@conversation.conversation_visibilities.each do |visibility|
visibility.destroy
end
expect(Conversation).not_to exist(@conversation.id)
end
end