diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index bfd90ec04..d6d157a7f 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -136,15 +136,37 @@ class WikiPage < ActiveRecord::Base title.tr("_", " ") end + def merge_version + prev = versions.last + prev.update_attributes( + :title => title, + :body => body, + :is_locked => is_locked + ) + end + + def merge_version? + prev = versions.last + prev && prev.updater_id == CurrentUser.user.id && prev.updated_at > 1.hour.ago + end + + def create_new_version + versions.create( + :updater_id => CurrentUser.user.id, + :updater_ip_addr => CurrentUser.ip_addr, + :title => title, + :body => body, + :is_locked => is_locked + ) + end + def create_version if title_changed? || body_changed? || is_locked_changed? - versions.create( - :updater_id => CurrentUser.user.id, - :updater_ip_addr => CurrentUser.ip_addr, - :title => title, - :body => body, - :is_locked => is_locked - ) + if merge_version? + merge_version + else + create_new_version + end end end diff --git a/test/unit/wiki_page_test.rb b/test/unit/wiki_page_test.rb index 9727003a5..31a08a721 100644 --- a/test/unit/wiki_page_test.rb +++ b/test/unit/wiki_page_test.rb @@ -75,13 +75,17 @@ class WikiPageTest < ActiveSupport::TestCase assert_difference("WikiPageVersion.count") do @wiki_page.title = "yyy" - @wiki_page.save + Timecop.travel(1.day.from_now) do + @wiki_page.save + end end end should "revert to a prior version" do @wiki_page.title = "yyy" - @wiki_page.save + Timecop.travel(1.day.from_now) do + @wiki_page.save + end version = WikiPageVersion.first @wiki_page.revert_to!(version) @wiki_page.reload