From 6a13bb8c60b43f5798b7646791c982789d08215d Mon Sep 17 00:00:00 2001 From: hukl Date: Sat, 18 Apr 2009 14:23:51 +0200 Subject: adding "restore_revision" functionality to the backend --- app/models/node.rb | 9 +++++++++ test/unit/node_test.rb | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/models/node.rb b/app/models/node.rb index b56dff5..0b92708 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -81,6 +81,15 @@ class Node < ActiveRecord::Base end end + def restore_revision! revision + if page = self.pages.find_by_revision(revision) + self.head = page + self.save + else + nil + end + end + # returns an array with all parts of a unique_name rather than a string def unique_path unique_name.split("/") rescue unique_name diff --git a/test/unit/node_test.rb b/test/unit/node_test.rb index 817c6f9..e054887 100644 --- a/test/unit/node_test.rb +++ b/test/unit/node_test.rb @@ -235,4 +235,26 @@ class NodeTest < ActiveSupport::TestCase assert_not_nil test_node.draft assert test_node.head != test_node.draft end + + test "restoring a revision" do + test_node = Node.create! :slug => "test_node" + test_node.move_to_child_of Node.root + create_revisions( test_node, 3 ) + test_node.find_or_create_draft @user1 + test_node.reload + + assert_equal 4, test_node.pages.count + assert_equal 3, test_node.head.revision + + test_node.restore_revision!(1) + assert_equal 1, test_node.head.revision + assert_equal 4, test_node.draft.revision + end + + def create_revisions node, count + count.times do + node.find_or_create_draft @user1 + node.publish_draft! + end + end end -- cgit v1.3