Class: Gitlab::Diff::CharDiff
- Inherits:
-
Object
- Object
- Gitlab::Diff::CharDiff
- Includes:
- Utils::StrongMemoize
- Defined in:
- lib/gitlab/diff/char_diff.rb
Instance Method Summary collapse
- #changed_ranges(offset: 0) ⇒ Object
- #generate_diff ⇒ Object
-
#initialize(old_string, new_string) ⇒ CharDiff
constructor
A new instance of CharDiff.
- #to_html ⇒ Object
Constructor Details
#initialize(old_string, new_string) ⇒ CharDiff
Returns a new instance of CharDiff.
8 9 10 11 12 |
# File 'lib/gitlab/diff/char_diff.rb', line 8 def initialize(old_string, new_string) @old_string = old_string.to_s @new_string = new_string.to_s @changes = [] end |
Instance Method Details
#changed_ranges(offset: 0) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/gitlab/diff/char_diff.rb', line 21 def changed_ranges(offset: 0) old_diffs = [] new_diffs = [] new_pointer = old_pointer = offset generate_diff.each do |(action, content)| content_size = content.size if action == :equal new_pointer += content_size old_pointer += content_size end if action == :delete old_diffs << MarkerRange.new(old_pointer, old_pointer + content_size - 1, mode: MarkerRange::DELETION) old_pointer += content_size end if action == :insert new_diffs << MarkerRange.new(new_pointer, new_pointer + content_size - 1, mode: MarkerRange::ADDITION) new_pointer += content_size end end [old_diffs, new_diffs] end |
#generate_diff ⇒ Object
14 15 16 17 18 19 |
# File 'lib/gitlab/diff/char_diff.rb', line 14 def generate_diff @changes = diff_match_patch.diff_main(@old_string, @new_string) diff_match_patch.diff_cleanupSemantic(@changes) @changes end |
#to_html ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/gitlab/diff/char_diff.rb', line 48 def to_html @changes.map do |op, text| text = ERB::Util.html_escape(text) text.gsub!("\n", "↵\n") if op == :insert || op == :delete %(<span class="#{html_class_names(op)}">#{text}</span>) end.join.html_safe end |