Class: Diff

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

Constant Summary collapse

@@term_width =
nil

Class Method Summary collapse

Class Method Details

.diff(old, old_name, new, new_name) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/diff.rb', line 28

def self.diff(old, old_name, new, new_name)
  if old == new
    return true
  end
  old_index = 0
  new_index = 0
  state = :matching
  old_trigger_pulled = false
  while old_index < old.length || new_index < new.length
    old_line = old[old_index]
    new_line = new[new_index]
    case state
    when :matching
      if old_line == new_line
        puts old_line
        old_index += 1
        new_index += 1
      else
        if old_line
          state = :old
          old_trigger_pulled = true
        else
          puts Diff.separator('>', new_name)
          state = :old_eof
        end
      end
    when :old
      idx = new_line ? new[new_index..-1].find_index(old_line) : nil
      if idx
        idx += new_index
        if idx > new_index
          puts Diff.separator('>', new_name)
        end
        for i in new_index...idx
          puts new[i]
        end
        puts Diff.separator('=', 'common')
        new_index = idx
        state = :matching
      else
        if old_trigger_pulled
          puts Diff.separator('<', old_name)
          old_trigger_pulled = false
        end
        puts old_line
        old_index += 1
      end
    when :old_eof
      if new_line
        puts new_line
        new_index += 1
      end
    end
  end
  false
end

.separator(fill_char, label) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/diff.rb', line 16

def self.separator(fill_char, label)
  term_width = Diff.term_width
  filler_width = (term_width - label.length - 2) / 2
  filler = ''
  (1..filler_width).each { |i| filler = filler + fill_char }
  line = filler + ' ' + label + ' ' + filler
  if line.length < term_width
    line = line + fill_char
  end
  line
end

.term_widthObject



7
8
9
10
11
12
13
14
# File 'lib/diff.rb', line 7

def self.term_width
  if @@term_width
    @@term_width
  else
    @@term_width, h = Util.detect_terminal_size
    @@term_width
  end
end