diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-07-14 11:25:03 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2007-07-14 11:25:03 +0000 |
commit | 5e20417e6d523372320861f1d9a446ddd75e041f (patch) | |
tree | 9f276a706577f6959fb7465e00e74c3f69258c6e /app/models/wiki_page.rb | |
parent | bf74efcd1159d9872cdbdc55e9b859c3b2928ffc (diff) | |
download | redmine-5e20417e6d523372320861f1d9a446ddd75e041f.tar.gz redmine-5e20417e6d523372320861f1d9a446ddd75e041f.zip |
Added wiki diff.
Diff can be viewed from the page history, or directly from the project activity page for each edit.
Uses Lars Christensen's diff library.
git-svn-id: http://redmine.rubyforge.org/svn/trunk@583 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/wiki_page.rb')
-rw-r--r-- | app/models/wiki_page.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 562465197..074d36daa 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -15,6 +15,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +require 'diff' + class WikiPage < ActiveRecord::Base belongs_to :wiki has_one :content, :class_name => 'WikiContent', :foreign_key => 'page_id', :dependent => :destroy @@ -39,6 +41,17 @@ class WikiPage < ActiveRecord::Base result end + def diff(version_to=nil, version_from=nil) + version_to = version_to ? version_to.to_i : self.content.version + version_from = version_from ? version_from.to_i : version_to - 1 + version_to, version_from = version_from, version_to unless version_from < version_to + + content_to = content.versions.find_by_version(version_to) + content_from = content.versions.find_by_version(version_from) + + (content_to && content_from) ? WikiDiff.new(content_to, content_from) : nil + end + def self.pretty_title(str) (str && str.is_a?(String)) ? str.tr('_', ' ') : str end @@ -47,3 +60,17 @@ class WikiPage < ActiveRecord::Base wiki.project end end + +class WikiDiff + attr_reader :diff, :words, :content_to, :content_from + + def initialize(content_to, content_from) + @content_to = content_to + @content_from = content_from + @words = content_to.text.split(/(\s+)/) + @words = @words.select {|word| word != ' '} + words_from = content_from.text.split(/(\s+)/) + words_from = words_from.select {|word| word != ' '} + @diff = words_from.diff @words + end +end |