Diffing
Installation
sudo gem install differ
Usage
require 'diffing'
from = "Hello! I am string for diffing test"
to = "Hi! I am two string for diffing"
By chars
diff = Diffing.by_chars( from, to )
diff.as_ascii
# => H{`ello`>>`i`}! I am{+` two`} string for diffing{-` test`}
diff.as_html
# => H<del>ello</del><ins>i</ins>! I am<ins> two</ins> string for diffing<del> test</del>
By words
diff = Diffing.by_words( from, to )
diff.as_ascii
# => {`Hello!`>>`Hi!`} I am{+` two`} string for diffing{-` test`}
diff.as_html
# => <del>Hello!</del><ins>Hi!</ins> I am<ins> two</ins> string for diffing<del> test</del>
By lines
diff = Diffing.by_lines( from, to )
diff.as_ascii
# => {`Hello! I am string for diffing test`>>`Hi! I am two string for diffing`}
diff.as_html
# => <del>Hello! I am string for diffing test</del><ins>Hi! I am two string for diffing</ins>
Custom format
module CustomFormat
class << self
def source( value )
value
end
def insert( value )
"(++#{ value })"
end
def delete( value )
"(--#{ value })"
end
def replace( from, to )
"(#{ from } => #{ to })"
end
end
end
Diffing.by_chars( from, to ).format( CustomFormat )
# => H(ello => i)! I am(++ two) string for diffing(-- test)
Diffing.by_words( from, to ).format( CustomFormat )
# => (Hello! => Hi!) I am(++ two) string for diffing(-- test)
Diffing.by_lines( from, to ).format( CustomFormat )
# => (Hello! I am string for diffing test => Hi! I am two string for diffing)
Custom use separated parts
Diffing.by_words( from, to ).parts.map { |part|
result = ''
result << "<source:#{ part.source }>" if part.source?
result << "<insert:#{ part.insert }>" if part.insert?
result << "<delete:#{ part.delete }>" if part.delete?
result
}.join
# => <insert:Hi!><delete:Hello!><source: I am><insert: two><source: string for diffing><delete: test>
Custom pattern of parts
Diffing::Diff.new( from, to, /.{,3}\s?/ ).as_ascii
# => {`Hello! `>>`Hi! `}I a{`m string `>>`m two string `}for diffin{`g test`>>`g`}
Copyright
Copyright © 2015 Denis Churbanov