# frozen_string_literal: true class Suggestion < ApplicationRecord FEATURE_FLAG = :diff_suggestions belongs_to :note, inverse_of: :suggestions validates :note, presence: true validates :commit_id, presence: true, if: :applied? delegate :original_position, :position, :diff_file, :noteable, to: :note def self.feature_enabled? Feature.enabled?(FEATURE_FLAG) end def project noteable.source_project end def branch noteable.source_branch end # For now, suggestions only serve as a way to send patches that # will change a single line (being able to apply multiple in the same place), # which explains `from_line` and `to_line` being the same line. # We'll iterate on that in https://gitlab.com/gitlab-org/gitlab-ce/issues/53310 # when allowing multi-line suggestions. def from_line position.new_line end alias_method :to_line, :from_line def from_original_line original_position.new_line end alias_method :to_original_line, :from_original_line # `from_line_index` and `to_line_index` represents diff/blob line numbers in # index-like way (N-1). def from_line_index from_line - 1 end alias_method :to_line_index, :from_line_index def appliable? return false unless note.supports_suggestion? !applied? && noteable.opened? && different_content? && note.active? end private def different_content? from_content != to_content end end