moderation log: fix tag change summary; fixes issue #43

This commit is contained in:
joshua stein 2012-12-16 20:27:54 -06:00
parent d108158d15
commit a4e5684994
2 changed files with 48 additions and 11 deletions

View file

@ -138,24 +138,19 @@ class Story < ActiveRecord::Base
return
end
all_changes = self.changes.merge(self.tagging_changes)
m = Moderation.new
m.moderator_user_id = self.editor_user_id
m.story_id = self.id
if self.changes["is_expired"] && self.is_expired?
if all_changes["is_expired"] && self.is_expired?
m.action = "deleted story"
elsif self.changes["is_expired"] && !self.is_expired?
elsif all_changes["is_expired"] && !self.is_expired?
m.action = "undeleted story"
else
actions = self.changes.map{|k,v| "changed #{k} from #{v[0].inspect} " <<
"to #{v[1].inspect}" }
if (old_tags = self.tags.map{|t| t.tag }) != self.tags_a
actions.push "changed tags from \"#{old_tags.join(", ")}\" to " <<
"\"#{self.tags_a.join(", ")}\""
end
m.action = actions.join(", ")
m.action = all_changes.map{|k,v| "changed #{k} from #{v[0].inspect} " <<
"to #{v[1].inspect}" }.join(", ")
end
m.reason = self.moderation_reason
@ -306,6 +301,19 @@ class Story < ActiveRecord::Base
end
end
end
def tagging_changes
old_tags_a = self.taggings.reject{|tg| tg.new_record? }.map{|tg|
tg.tag.tag }.join(" ")
new_tags_a = self.taggings.reject{|tg| tg.marked_for_destruction?
}.map{|tg| tg.tag.tag }.join(" ")
if old_tags_a == new_tags_a
{}
else
{ "tags" => [ old_tags_a, new_tags_a ] }
end
end
def url=(u)
# strip out stupid google analytics parameters

View file

@ -112,4 +112,33 @@ describe Story do
s.valid?
s.url.should == "https://factorable.net/"
end
it "calculates tag changes properly" do
s = Story.make!(:title => "blah", :tags_a => [ "tag1", "tag2" ])
s.tags_a = [ "tag2" ]
s.tagging_changes.should == { "tags" => [ "tag1 tag2", "tag2" ] }
end
it "logs moderations properly" do
mod = User.make!(:username => "mod", :is_moderator => true)
s = Story.make!(:title => "blah", :tags_a => [ "tag1", "tag2" ],
:description => "desc")
s.title = "changed title"
s.description = nil
s.tags_a = [ "tag1" ]
s.editor_user_id = mod.id
s.moderation_reason = "because i hate you"
s.save!
mod_log = Moderation.last
mod_log.moderator_user_id.should == mod.id
mod_log.story_id.should == s.id
mod_log.reason.should == "because i hate you"
mod_log.action.should match(/title from "blah" to "changed title"/)
mod_log.action.should match(/tags from "tag1 tag2" to "tag1"/)
end
end