Class: Issuable::Callbacks::Milestone

Inherits:
Base
  • Object
show all
Defined in:
app/services/issuable/callbacks/milestone.rb

Constant Summary collapse

ALLOWED_PARAMS =
%i[milestone milestone_id skip_milestone_email].freeze

Instance Method Summary collapse

Methods inherited from Base

#before_update, #initialize

Methods included from Gitlab::Allowable

#can?

Constructor Details

This class inherits a constructor from Issuable::Callbacks::Base

Instance Method Details

#after_initializeObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'app/services/issuable/callbacks/milestone.rb', line 8

def after_initialize
  params[:milestone_id] = nil if excluded_in_new_type?
  return unless params.key?(:milestone_id) && has_permission?(:"set_#{issuable.to_ability_name}_metadata")

  @old_milestone = issuable.milestone

  if params[:milestone_id].blank? || params[:milestone_id].to_s == IssuableFinder::Params::NONE
    issuable.milestone = nil

    return
  end

  resource_group = issuable.project&.group || issuable.try(:namespace)
  project_ids = [issuable.project&.id].compact

  milestone = MilestonesFinder.new({
    project_ids: project_ids,
    group_ids: resource_group&.self_and_ancestors&.select(:id),
    ids: [params[:milestone_id]]
  }).execute.first

  issuable.milestone = milestone if milestone
end

#after_save_commitObject



41
42
43
44
45
# File 'app/services/issuable/callbacks/milestone.rb', line 41

def after_save_commit
  return unless issuable.previous_changes.include?('milestone_id')

  invalidate_milestone_counters
end

#after_update_commitObject



32
33
34
35
36
37
38
39
# File 'app/services/issuable/callbacks/milestone.rb', line 32

def after_update_commit
  return unless issuable.previous_changes.include?('milestone_id')

  update_usage_data_counters
  send_milestone_change_notification

  GraphqlTriggers.issuable_milestone_updated(issuable)
end