Module: Wrong::Assert::ArrayDiff

Defined in:
lib/wrong/message/array_diff.rb

Class Method Summary collapse

Class Method Details

.compute_and_format(left, right) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/wrong/message/array_diff.rb', line 44

def self.compute_and_format(left, right)
  diffs = Diff::LCS.sdiff(left, right)
  
  left_arr = []
  right_arr = []
  diff_arr = []
  
  diffs.each do |diff|
    left_elem = diff.old_element.nil? ? "nil" : diff.old_element.inspect
    right_elem = diff.new_element.nil? ? "nil" : diff.new_element.inspect
    
    max_length = [left_elem.length, right_elem.length].max
    left_arr << left_elem.ljust(max_length) unless diff.action == "+"
    right_arr << right_elem.ljust(max_length) unless diff.action == "-"
    diff_arr <<  (diff.action == "=" ? " ".ljust(max_length) : "^".ljust(max_length))
  end
  

  [format(left_arr), 
   format(right_arr),
    " " + diff_arr.join("  ") + " "]
end

.format(thing) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/wrong/message/array_diff.rb', line 67

def self.format(thing)
  str = ""
  if thing.is_a?(Array)
    str << "["
    thing.each_with_index do |item, i|
      str << format(item)
      str << ", " unless i == thing.length-1
    end
    str << "]"
  else
    str << thing
  end
  str
end