Class: Diff::Myers

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(a, b) ⇒ Myers

Returns a new instance of Myers.



8
9
10
# File 'lib/diff/myers.rb', line 8

def initialize(a, b)
  @a, @b = a, b
end

Class Method Details

.diff(a, b) ⇒ Object



4
5
6
# File 'lib/diff/myers.rb', line 4

def self.diff(a, b)
  Myers.new(a, b).diff
end

Instance Method Details

#diffObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/diff/myers.rb', line 12

def diff
  diff = []

  backtrack do |prev_x, prev_y, x, y|
    a_line, b_line = @a[prev_x], @b[prev_y]

    if x == prev_x
      diff.push(Edit.new(:ins, nil, b_line))
    elsif y == prev_y
      diff.push(Edit.new(:del, a_line, nil))
    else
      diff.push(Edit.new(:eql, a_line, b_line))
    end
  end

  diff.reverse
end