55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module Diff
 | 
						|
    class Suggestion
 | 
						|
      include Suggestible
 | 
						|
      include Gitlab::Utils::StrongMemoize
 | 
						|
 | 
						|
      attr_reader :diff_file, :lines_above, :lines_below,
 | 
						|
        :target_line
 | 
						|
 | 
						|
      def initialize(text, line:, above:, below:, diff_file:)
 | 
						|
        @text = text
 | 
						|
        @target_line = line
 | 
						|
        @lines_above = above.to_i
 | 
						|
        @lines_below = below.to_i
 | 
						|
        @diff_file = diff_file
 | 
						|
      end
 | 
						|
 | 
						|
      def to_hash
 | 
						|
        {
 | 
						|
          from_content: from_content,
 | 
						|
          to_content: to_content,
 | 
						|
          lines_above: @lines_above,
 | 
						|
          lines_below: @lines_below
 | 
						|
        }
 | 
						|
      end
 | 
						|
 | 
						|
      def from_content
 | 
						|
        strong_memoize(:from_content) do
 | 
						|
          fetch_from_content
 | 
						|
        end
 | 
						|
      end
 | 
						|
 | 
						|
      def to_content
 | 
						|
        return "" if @text.blank?
 | 
						|
 | 
						|
        # The parsed suggestion doesn't have information about the correct
 | 
						|
        # ending characters (we may have a line break, or not), so we take
 | 
						|
        # this information from the last line being changed (last
 | 
						|
        # characters).
 | 
						|
        endline_chars = line_break_chars(from_content.lines.last)
 | 
						|
        "#{@text}#{endline_chars}"
 | 
						|
      end
 | 
						|
 | 
						|
      private
 | 
						|
 | 
						|
      def line_break_chars(line)
 | 
						|
        match = Gitlab::Regex.breakline_regex.match(line)
 | 
						|
        match[0] if match
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |