diff(differ_class, from, to, options={})
click to toggle source
def diff(differ_class, from, to, options={})
if from.respond_to?(:valid_encoding?) and not from.valid_encoding?
from = from.dup.force_encoding("ASCII-8BIT")
end
if to.respond_to?(:valid_encoding?) and not to.valid_encoding?
to = to.dup.force_encoding("ASCII-8BIT")
end
differ = differ_class.new(from.split(/\r?\n/), to.split(/\r?\n/))
lines = differ.diff(options)
if Object.const_defined?(:EncodingError)
begin
lines.join("\n")
rescue EncodingError
lines.collect {|line| line.force_encoding("ASCII-8BIT")}.join("\n")
end
else
lines.join("\n")
end
end
fold(string)
click to toggle source
def fold(string)
string.split(/\r?\n/).collect do |line|
line.gsub(/(.{78})/, "\\1\n")
end.join("\n")
end
folded_readable(from, to, options={})
click to toggle source
def folded_readable(from, to, options={})
readable(fold(from), fold(to), options)
end
need_fold?(diff)
click to toggle source
def need_fold?(diff)
/^[-+].{79}/ =~ diff
end
readable(from, to, options={})
click to toggle source
def readable(from, to, options={})
diff(ReadableDiffer, from, to, options)
end
unified(from, to, options={})
click to toggle source
def unified(from, to, options={})
diff(UnifiedDiffer, from, to, options)
end