Module: DiffPositionableNote

Extended by:
ActiveSupport::Concern
Included in:
DiffNote, DraftNote
Defined in:
app/models/concerns/diff_positionable_note.rb

Instance Method Summary collapse

Instance Method Details

#active?(diff_refs = nil) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
63
64
65
66
67
# File 'app/models/concerns/diff_positionable_note.rb', line 60

def active?(diff_refs = nil)
  return false unless supported?
  return true if for_commit?

  diff_refs ||= noteable.diff_refs

  self.position.diff_refs == diff_refs
end

#diff_refs_match_commitObject



99
100
101
102
103
# File 'app/models/concerns/diff_positionable_note.rb', line 99

def diff_refs_match_commit
  return if self.original_position.diff_refs == commit&.diff_refs

  errors.add(:commit_id, 'does not match the diff refs')
end

#on_file?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'app/models/concerns/diff_positionable_note.rb', line 48

def on_file?
  !!position&.on_file?
end

#on_image?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'app/models/concerns/diff_positionable_note.rb', line 52

def on_image?
  !!position&.on_image?
end

#on_text?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'app/models/concerns/diff_positionable_note.rb', line 44

def on_text?
  !!position&.on_text?
end

#set_original_positionObject



69
70
71
72
73
# File 'app/models/concerns/diff_positionable_note.rb', line 69

def set_original_position
  return unless position

  self.original_position = self.position.dup unless self.original_position&.complete?
end

#should_update_position?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'app/models/concerns/diff_positionable_note.rb', line 40

def should_update_position?
  on_text? || on_file?
end

#supported?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/models/concerns/diff_positionable_note.rb', line 56

def supported?
  for_commit? || self.noteable.has_complete_diff_refs?
end

#update_positionObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'app/models/concerns/diff_positionable_note.rb', line 75

def update_position
  return unless supported?
  return if for_commit?

  return if active?
  return unless position

  tracer = Gitlab::Diff::PositionTracer.new(
    project: self.project,
    old_diff_refs: self.position.diff_refs,
    new_diff_refs: self.noteable.diff_refs,
    paths: self.position.paths
  )

  result = tracer.trace(self.position)
  return unless result

  if result[:outdated]
    self.change_position = result[:position]
  else
    self.position = result[:position]
  end
end