From 7051b016f5226e630e36e73689f2f4d05e9e30f1 Mon Sep 17 00:00:00 2001 From: albert Date: Wed, 26 Jan 2011 18:26:32 -0500 Subject: [PATCH] added revert methods for post --- app/models/post.rb | 27 +++++++++++++++++++++++++++ test/unit/post_test.rb | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/app/models/post.rb b/app/models/post.rb index 315cd8a56..30489bfeb 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -788,6 +788,33 @@ class Post < ActiveRecord::Base ) end end + + def revert_to(target) + base_tags = [] + base_rating = "q" + base_source = nil + base_parent_id = nil + + versions.each do |version| + if version.id <= target.id + base_tags += version.add_tag_array + base_tags -= version.del_tag_array + base_rating = version.rating if version.rating + base_source = version.source if version.source + base_parent_id = version.parent_id if version.parent_id + end + end + + self.tag_string = base_tags.sort.join(" ") + self.rating = base_rating + self.source = base_source + self.parent_id = base_parent_id + end + + def revert_to!(target) + revert_to(target) + save! + end end include FileMethods diff --git a/test/unit/post_test.rb b/test/unit/post_test.rb index 1c83f3073..1a16a024e 100644 --- a/test/unit/post_test.rb +++ b/test/unit/post_test.rb @@ -596,4 +596,39 @@ class PostTest < ActiveSupport::TestCase end end end + + context "Reverting: " do + context "a post that has been updated" do + setup do + @post = Factory.create(:post, :rating => "q", :tag_string => "aaa") + @post.update_attributes(:tag_string => "aaa bbb ccc ddd") + @post.update_attributes(:tag_string => "bbb xxx yyy", :source => "xyz") + @post.update_attributes(:tag_string => "bbb mmm yyy", :source => "abc") + end + + context "and then reverted to an early version" do + setup do + @post.revert_to(@post.versions[1]) + end + + should "correctly revert all fields" do + assert_equal("aaa bbb ccc ddd", @post.tag_string) + assert_equal(nil, @post.source) + assert_equal("q", @post.rating) + end + end + + context "and then reverted to a later version" do + setup do + @post.revert_to(@post.versions[-2]) + end + + should "correctly revert all fields" do + assert_equal("bbb xxx yyy", @post.tag_string) + assert_equal("xyz", @post.source) + assert_equal("q", @post.rating) + end + end + end + end end