Class: DiDiffer::Differ

Inherits:
Object
  • Object
show all
Defined in:
lib/di_differ.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file1, file2) ⇒ Differ

Returns a new instance of Differ.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/di_differ.rb', line 8

def initialize(file1, file2)
  raise "File #{file1} not found" unless File.exists?(file1)
  raise "File #{file2} not found" unless File.exists?(file2)

  @s1 = File.readlines(file1)
  @s2 = File.readlines(file2)

  clean_data
  
  @matrix = Array.new(@s1.size + 1){ Array.new(@s2.size + 1) { 0 } }
  @diff_arr = []
end

Instance Attribute Details

#diff_arrObject (readonly)

Returns the value of attribute diff_arr.



6
7
8
# File 'lib/di_differ.rb', line 6

def diff_arr
  @diff_arr
end

Instance Method Details

#common_subsequenceObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/di_differ.rb', line 28

def common_subsequence
  seq = []
  i = @s1.size
  j = @s2.size

  while i >= 0 && j >= 0 do
    if @s1[i-1] == @s2[j-1]
      seq << @s1[i-1]
      i -= 1
      j -= 1
    elsif @matrix[i - 1][j] >= @matrix[i][j - 1]
      i -= 1
    else
      j -= 1
    end
  end

  seq.reverse
end

#diff(formatter: TableFormatter.new) ⇒ Object



21
22
23
24
25
26
# File 'lib/di_differ.rb', line 21

def diff(formatter: TableFormatter.new)
  subsequence_matrix
  build_diff_arr
  compaq
  formatter.output(@diff_arr)
end