This commit is contained in:
Toks
2013-10-26 14:02:52 -04:00
parent ff989e19cc
commit d0e9d4519a
4 changed files with 49 additions and 8 deletions

View File

@@ -18,6 +18,10 @@ class Pool < ActiveRecord::Base
attr_accessible :is_deleted, :as => [:janitor, :moderator, :admin]
module SearchMethods
def deleted
where("is_deleted = true")
end
def undeleted
where("is_deleted = false")
end
@@ -193,7 +197,7 @@ class Pool < ActiveRecord::Base
return if is_deleted?
update_attributes(:post_ids => add_number_to_string(post.id, post_ids), :post_count => post_count + 1)
post.add_pool!(self)
post.add_pool!(self, true)
clear_post_id_array
end
@@ -202,7 +206,7 @@ class Pool < ActiveRecord::Base
return if is_deleted?
update_attributes(:post_ids => remove_number_from_string(post.id, post_ids), :post_count => post_count - 1)
post.remove_pool!(self)
post.remove_pool!(self, true)
clear_post_id_array
end
@@ -231,12 +235,12 @@ class Pool < ActiveRecord::Base
added.each do |post_id|
post = Post.find(post_id)
post.add_pool!(self)
post.add_pool!(self, true)
end
removed.each do |post_id|
post = Post.find(post_id)
post.remove_pool!(self)
post.remove_pool!(self, true)
end
self.post_count = post_id_array.size

View File

@@ -629,17 +629,17 @@ class Post < ActiveRecord::Base
pool_string =~ /(?:\A| )pool:#{pool_id}(?:\Z| )/
end
def add_pool!(pool)
def add_pool!(pool, force = false)
return if belongs_to_pool?(pool)
return if pool.is_deleted?
return if pool.is_deleted? && !force
self.pool_string = "#{pool_string} pool:#{pool.id}".strip
update_column(:pool_string, pool_string) unless new_record?
pool.add!(self)
end
def remove_pool!(pool)
def remove_pool!(pool, force = false)
return unless belongs_to_pool?(pool)
return if pool.is_deleted?
return if pool.is_deleted? && !force
self.pool_string = pool_string.gsub(/(?:\A| )pool:#{pool.id}(?:\Z| )/, " ").strip
update_column(:pool_string, pool_string) unless new_record?
pool.remove!(self)

View File

@@ -0,0 +1,14 @@
#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment'))
ActiveRecord::Base.connection.execute("set statement_timeout = 0")
CurrentUser.user = User.admins.first
CurrentUser.ip_addr = "127.0.0.1"
Pool.deleted.where("post_count > 0").find_each do |pool|
Post.where("id in (?)", pool.post_id_array).tag_match("-pool:#{pool.id}").find_each do |post|
post.add_pool!(pool, true)
end
end

View File

@@ -120,6 +120,29 @@ class PoolTest < ActiveSupport::TestCase
assert_equal(1, @pool.post_count)
end
end
context "to a deleted pool" do
setup do
@pool.update_attribute(:is_deleted, true)
@pool.post_ids = "#{@pool.post_ids} #{@p2.id}"
@pool.synchronize!
@pool.save
@pool.reload
@p2.reload
end
should "add the post to the pool" do
assert_equal("#{@p1.id} #{@p2.id}", @pool.post_ids)
end
should "add the pool to the post" do
assert_equal("pool:#{@pool.id}", @p2.pool_string)
end
should "increment the post count" do
assert_equal(2, @pool.post_count)
end
end
end
context "by removing a post" do