Class: Test::Unit::Diff::UnifiedDiffer
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Differ
|
|
Instance Chain:
self,
Differ
|
|
Inherits: |
Test::Unit::Diff::Differ
|
Defined in: | lib/test/unit/diff.rb |
Class Method Summary
Instance Method Summary
- #diff(options = {})
- #define_line?(line) ⇒ Boolean private
- #find_interesting_line(from_start, to_start, predicate) private
- #format_summary(operations, show_context) private
- #same_content?(groups) ⇒ Boolean private
Differ - Inherited
Constructor Details
This class inherits a constructor from Test::Unit::Diff::Differ
Instance Method Details
#define_line?(line) ⇒ Boolean
(private)
# File 'lib/test/unit/diff.rb', line 697
def define_line?(line) /\A(?:[_a-zA-Z$]|\s*(?:class|module|def)\b)/ =~ line end
#diff(options = {})
[ GitHub ]# File 'lib/test/unit/diff.rb', line 628
def diff(={}) groups = SequenceMatcher.new(@from, @to).grouped_operations return [] if groups.empty? return [] if same_content?(groups) show_context = [:show_context] show_context = true if show_context.nil? result = ["--- #{ [:from_label]}".rstrip, "+++ #{ [:to_label]}".rstrip] groups.each do |operations| result << format_summary(operations, show_context) operations.each do |args| operation_tag, from_start, from_end, to_start, to_end = args case operation_tag when :replace result.concat(tag("-", @from[from_start...from_end])) result.concat(tag("+", @to[to_start...to_end])) when :delete result.concat(tag("-", @from[from_start...from_end])) when :insert result.concat(tag("+", @to[to_start...to_end])) when :equal result.concat(tag(" ", @from[from_start...from_end])) end end end result end
#find_interesting_line(from_start, to_start, predicate) (private)
[ GitHub ]# File 'lib/test/unit/diff.rb', line 683
def find_interesting_line(from_start, to_start, predicate) from_index = from_start to_index = to_start while from_index >= 0 or to_index >= 0 [@from[from_index], @to[to_index]].each do |line| return line if line and __send__(predicate, line) end from_index -= 1 to_index -= 1 end nil end
#format_summary(operations, show_context) (private)
[ GitHub ]# File 'lib/test/unit/diff.rb', line 667
def format_summary(operations, show_context) _, first_from_start, _, first_to_start, _ = operations[0] _, _, last_from_end, _, last_to_end = operations[-1] summary = "@@ -%d,%d +%d,%d @@" % [first_from_start + 1, last_from_end - first_from_start, first_to_start + 1, last_to_end - first_to_start,] if show_context interesting_line = find_interesting_line(first_from_start, first_to_start, :define_line?) summary << " #{interesting_line}" if interesting_line end summary end
#same_content?(groups) ⇒ Boolean
(private)
# File 'lib/test/unit/diff.rb', line 658
def same_content?(groups) return false if groups.size != 1 group = groups[0] return false if group.size != 1 tag, from_start, from_end, to_start, to_end = group[0] tag == :equal and [from_start, from_end] == [to_start, to_end] end