diff --git a/app/models/revision.rb b/app/models/revision.rb index ca886245..9d2c0ba1 100644 --- a/app/models/revision.rb +++ b/app/models/revision.rb @@ -112,11 +112,18 @@ class Revision < ActiveRecord::Base end protected - before_create :set_revision_number + before_create :set_revision_number, :set_timestamp after_create :force_rendering after_save :clear_display_cache + # TODO Refactor this away. Revisions collection should not rely on the revision number for + # sorting etc - revisions must be easy to delete (this helps fighting wiki spam) def set_revision_number self.number = self.class.count(['page_id = ?', page_id]) + 1 end + + def set_timestamp + self.timestamp = (Time.now.to_f * 1000).to_i.to_s + end + end diff --git a/db/revisions.erbsql b/db/revisions.erbsql index 28034555..e8461d2b 100644 --- a/db/revisions.erbsql +++ b/db/revisions.erbsql @@ -2,6 +2,8 @@ CREATE TABLE revisions ( id <%= @pk %>, created_at <%= @datetime %> NOT NULL, updated_at <%= @datetime %> NOT NULL, + + timestamp CHAR(13) NOT NULL, page_id INTEGER NOT NULL, content TEXT NOT NULL, author VARCHAR(60), diff --git a/test/fixtures/revisions.yml b/test/fixtures/revisions.yml index eb5eff5b..d0491c9e 100644 --- a/test/fixtures/revisions.yml +++ b/test/fixtures/revisions.yml @@ -2,6 +2,7 @@ home_page_first_revision: id: 1 created_at: <%= Time.local(2004, 4, 4, 15, 50).to_formatted_s(:db) %> updated_at: <%= Time.local(2004, 4, 4, 15, 50).to_formatted_s(:db) %> + timestamp: <%= (Time.local(2004, 4, 4, 15, 50).to_f * 1000).to_i %> page_id: 1 number: 1 content: First revision of the HomePage end @@ -12,6 +13,7 @@ my_way_first_revision: id: 2 created_at: <%= 9.days.ago.to_formatted_s(:db) %> updated_at: <%= 9.days.ago.to_formatted_s(:db) %> + timestamp: <%= (9.days.ago.to_f * 1000).to_i %> page_id: 2 number: 1 content: MyWay @@ -21,6 +23,7 @@ smart_engine_first_revision: id: 3 created_at: <%= 8.days.ago.to_formatted_s(:db) %> updated_at: <%= 8.days.ago.to_formatted_s(:db) %> + timestamp: <%= (8.days.ago.to_f * 1000).to_i %> page_id: 3 number: 1 content: SmartEngine @@ -30,6 +33,7 @@ that_way_first_revision: id: 4 created_at: <%= 7.days.ago.to_formatted_s(:db) %> updated_at: <%= 7.days.ago.to_formatted_s(:db) %> + timestamp: <%= (7.days.ago.to_f * 1000).to_i %> page_id: 4 number: 1 content: ThatWay @@ -39,6 +43,7 @@ no_wiki_word_first_revision: id: 5 created_at: <%= 6.days.ago.to_formatted_s(:db) %> updated_at: <%= 6.days.ago.to_formatted_s(:db) %> + timestamp: <%= (6.days.ago.to_f * 1000).to_i %> page_id: 5 number: 1 content: hey you @@ -48,6 +53,7 @@ home_page_second_revision: id: 6 created_at: <%= Time.local(2004, 4, 4, 16, 50).to_formatted_s(:db) %> updated_at: <%= Time.local(2004, 4, 4, 16, 50).to_formatted_s(:db) %> + timestamp: <%= (Time.local(2004, 4, 4, 16, 50).to_f * 1000).to_i %> page_id: 1 number: 2 content: HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \OverThere -- see SmartEngine in that SmartEngineGUI @@ -57,6 +63,7 @@ first_page_first_revision: id: 7 created_at: <%= Time.local(2004, 4, 4, 16, 55).to_formatted_s(:db) %> updated_at: <%= Time.local(2004, 4, 4, 16, 55).to_formatted_s(:db) %> + timestamp: <%= (Time.local(2004, 4, 4, 16, 55).to_f * 1000).to_i %> page_id: 6 number: 1 content: HisWay would be MyWay in kinda ThatWay in HisWay though MyWay \\OverThere -- see SmartEngine in that SmartEngineGUI @@ -66,6 +73,7 @@ oak_first_revision: id: 8 created_at: <%= 5.days.ago.to_formatted_s(:db) %> updated_at: <%= 5.days.ago.to_formatted_s(:db) %> + timestamp: <%= (5.days.ago.to_f * 1000).to_i %> page_id: 7 number: 1 content: "All about oak.\ncategory: trees" @@ -76,9 +84,9 @@ elephant_first_revision: id: 9 created_at: <%= 10.minutes.ago.to_formatted_s(:db) %> updated_at: <%= 10.minutes.ago.to_formatted_s(:db) %> + timestamp: <%= (10.minutes.ago.to_f * 1000).to_i %> page_id: 8 number: 1 content: "All about elephants.\ncategory: animals" author: Guest ip: 127.0.0.2 -