class Page < ActiveRecord::Base belongs_to :book has_many :entry_versions, :order => "created_at", :dependent => true has_one :current_version, :class_name => "EntryVersion", :order => "created_at DESC" def before_create revision_number = 1 end def find_or_build_version(number = nil) number ? entry_versions[number.to_i - 1] : entry_versions.build(:body => body) end def body current_version ? current_version.body : nil end def to_param title end def continuous_edit?(author, time = Time.now) current_version and current_version.author == author and time <= current_version.updated_at + 30.minutes end def create_version(author, base_revision_number, options) if self.revision_number > base_revision_number last_author = current_version.author.name raise "While you were working on this page, #{last_author} has created a new version of it." end if continuous_edit?(author) version = self.current_version version.body = options[:body] else version = self.entry_versions.build(options) version.author = author end increment!(:revision_number) version.save end end