Module: WorkItems::WidgetableService

Included in:
CreateService, UpdateService
Defined in:
app/services/concerns/work_items/widgetable_service.rb

Instance Method Summary collapse

Instance Method Details

#execute_widgets(work_item:, callback:, widget_params: {}, service_params: {}) ⇒ Object

rubocop:enable Gitlab/ModuleWithInstanceVariables



25
26
27
28
29
# File 'app/services/concerns/work_items/widgetable_service.rb', line 25

def execute_widgets(work_item:, callback:, widget_params: {}, service_params: {})
  work_item.widgets.each do |widget|
    widget_service(widget, service_params).try(callback, params: widget_params[widget.class.api_symbol] || {})
  end
end

#initialize_callbacks!(work_item) ⇒ Object

rubocop:disable Gitlab/ModuleWithInstanceVariables



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'app/services/concerns/work_items/widgetable_service.rb', line 6

def initialize_callbacks!(work_item)
  @callbacks = work_item.widgets.filter_map do |widget|
    callback_class = widget.class.try(:callback_class)
    callback_params = @widget_params[widget.class.api_symbol]

    if new_type_excludes_widget?(widget)
      callback_params = {} if callback_params.nil?
      callback_params[:excluded_in_new_type] = true
    end

    next if callback_class.nil? || callback_params.blank?

    callback_class.new(issuable: work_item, current_user: current_user, params: callback_params)
  end

  @callbacks.each(&:after_initialize)
end

#widget_service(widget, service_params) ⇒ Object

rubocop:disable Gitlab/ModuleWithInstanceVariables



32
33
34
35
36
37
38
39
40
41
# File 'app/services/concerns/work_items/widgetable_service.rb', line 32

def widget_service(widget, service_params)
  @widget_services ||= {}
  return @widget_services[widget] if @widget_services.has_key?(widget)

  @widget_services[widget] = widget_service_class(widget)&.new(
    widget: widget,
    current_user: current_user,
    service_params: service_params
  )
end

#widget_service_class(widget) ⇒ Object

rubocop:enable Gitlab/ModuleWithInstanceVariables



44
45
46
47
48
# File 'app/services/concerns/work_items/widgetable_service.rb', line 44

def widget_service_class(widget)
  "WorkItems::Widgets::#{widget.type.to_s.camelize}Service::#{self.class.name.demodulize}".constantize
rescue NameError
  nil
end