Class: Redmine::DiffTable

Inherits:
Array
  • Object
show all
Defined in:
lib/redmine/unified_diff.rb

Overview

Class that represents a file diff

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Array

#to_csv

Methods included from Diffable

#diff, #patch, #replacenextlarger, #reverse_hash

Constructor Details

#initialize(type = "inline") ⇒ DiffTable

Initialize with a Diff file and the type of Diff View The type view must be inline or sbs (side_by_side)



63
64
65
66
67
68
# File 'lib/redmine/unified_diff.rb', line 63

def initialize(type="inline")
  @parsing = false
  @added = 0
  @removed = 0
  @type = type
end

Instance Attribute Details

#file_nameObject (readonly)

Returns the value of attribute file_name.



59
60
61
# File 'lib/redmine/unified_diff.rb', line 59

def file_name
  @file_name
end

Instance Method Details

#add_line(line) ⇒ Object

Function for add a line of this Diff Returns false when the diff ends



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/redmine/unified_diff.rb', line 72

def add_line(line)
  unless @parsing
    if line =~ /^(---|\+\+\+) (.*)$/
      @file_name = $2
    elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/
      @line_num_l = $2.to_i
      @line_num_r = $5.to_i
      @parsing = true
    end
  else
    if line =~ /^[^\+\-\s@\\]/
      @parsing = false
      return false
    elsif line =~ /^@@ (\+|\-)(\d+)(,\d+)? (\+|\-)(\d+)(,\d+)? @@/
      @line_num_l = $2.to_i
      @line_num_r = $5.to_i
    else
      parse_line(line, @type)          
    end
  end
  return true
end

#each_lineObject



95
96
97
98
99
100
101
102
103
# File 'lib/redmine/unified_diff.rb', line 95

def each_line
  prev_line_left, prev_line_right = nil, nil
  each do |line|
    spacing = prev_line_left && prev_line_right && (line.nb_line_left != prev_line_left+1) && (line.nb_line_right != prev_line_right+1)
    yield spacing, line
    prev_line_left = line.nb_line_left.to_i if line.nb_line_left.to_i > 0
    prev_line_right = line.nb_line_right.to_i if line.nb_line_right.to_i > 0
  end
end

#inspectObject



105
106
107
108
109
110
111
# File 'lib/redmine/unified_diff.rb', line 105

def inspect
  puts '### DIFF TABLE ###'
  puts "file : #{file_name}"
  self.each do |d|
    d.inspect
  end
end