Class: Issues::BuildService
- Inherits:
-
BaseService
- Object
- BaseContainerService
- IssuableBaseService
- BaseService
- Issues::BuildService
- Includes:
- ResolveDiscussions
- Defined in:
- app/services/issues/build_service.rb
Direct Known Subclasses
Constant Summary
Constants inherited from BaseService
Issues::BaseService::EpicAssignmentError, Issues::BaseService::NO_REBALANCING_NEEDED
Constants included from Gitlab::Utils::UsageData
Gitlab::Utils::UsageData::DISTRIBUTED_HLL_FALLBACK, Gitlab::Utils::UsageData::FALLBACK, Gitlab::Utils::UsageData::HISTOGRAM_FALLBACK, Gitlab::Utils::UsageData::MAX_BUCKET_SIZE
Instance Attribute Summary
Attributes included from ResolveDiscussions
#discussion_to_resolve_id, #merge_request_to_resolve_discussions_of_iid
Attributes inherited from BaseContainerService
#container, #current_user, #group, #params, #project
Instance Method Summary collapse
- #description_for_discussions ⇒ Object
- #execute(initialize_callbacks: true) ⇒ Object
- #issue_params ⇒ Object
- #issue_params_with_info_from_discussions ⇒ Object
- #item_for_discussion(discussion) ⇒ Object
- #items_for_discussions ⇒ Object
- #title_from_merge_request ⇒ Object
Methods included from ResolveDiscussions
#discussions_to_resolve, #filter_resolve_discussion_params, #merge_request_to_resolve_discussions_of
Methods inherited from BaseService
#close_service, #execute_hooks, #hook_data, #rebalance_if_needed, #reopen_service
Methods included from Gitlab::Utils::Override
#extended, extensions, #included, #method_added, #override, #prepended, #queue_verification, verify!
Methods included from IssueTypeHelpers
Methods included from IncidentManagement::UsageData
Methods included from Gitlab::Utils::UsageData
#add, #add_metric, #alt_usage_data, #average, #count, #distinct_count, #estimate_batch_distinct_count, #histogram, #maximum_id, #measure_duration, #minimum_id, #redis_usage_data, #sum, #track_usage_event, #with_finished_at, #with_metadata, #with_prometheus_client
Methods inherited from BaseContainerService
#group_container?, #initialize, #namespace_container?, #project_container?, #project_group, #root_ancestor
Methods included from BaseServiceUtility
#deny_visibility_level, #event_service, #log_error, #log_info, #notification_service, #system_hook_service, #todo_service, #visibility_level
Methods included from Gitlab::Allowable
Instance Method Details
#description_for_discussions ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'app/services/issues/build_service.rb', line 35 def description_for_discussions if discussions_to_resolve.empty? return "There are no unresolved discussions. "\ "Review the conversation in #{merge_request_to_resolve_discussions_of.to_reference}" end description = "The following #{'discussion'.pluralize(discussions_to_resolve.size)} "\ "from #{merge_request_to_resolve_discussions_of.to_reference} "\ "should be addressed:" [description, *items_for_discussions].join("\n\n") end |
#execute(initialize_callbacks: true) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'app/services/issues/build_service.rb', line 7 def execute(initialize_callbacks: true) filter_resolve_discussion_params container_param = case container when Project { project: project } when Namespaces::ProjectNamespace { project: container.project } else { namespace: container } end @issue = model_klass.new(issue_params.merge(container_param)).tap do |issue| set_work_item_type(issue) initialize_callbacks!(issue) if initialize_callbacks end end |
#issue_params ⇒ Object
71 72 73 |
# File 'app/services/issues/build_service.rb', line 71 def issue_params @issue_params ||= build_issue_params end |
#issue_params_with_info_from_discussions ⇒ Object
25 26 27 28 29 |
# File 'app/services/issues/build_service.rb', line 25 def issue_params_with_info_from_discussions return {} unless merge_request_to_resolve_discussions_of { title: title_from_merge_request, description: description_for_discussions } end |
#item_for_discussion(discussion) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'app/services/issues/build_service.rb', line 52 def item_for_discussion(discussion) first_note_to_resolve = discussion.first_note_to_resolve || discussion.first_note is_very_first_note = first_note_to_resolve == discussion.first_note action = is_very_first_note ? "started" : "commented on" note_url = Gitlab::UrlBuilder.build(first_note_to_resolve) other_note_count = discussion.notes.size - 1 discussion_info = ["- [ ] #{first_note_to_resolve..to_reference} #{action} a [discussion](#{note_url}): "] discussion_info << "(+#{other_note_count} #{'comment'.pluralize(other_note_count)})" if other_note_count > 0 spaces = ' ' * 4 quote = first_note_to_resolve.note.lines.map { |line| "#{spaces}> #{line}" }.join [discussion_info.join(' '), quote].join("\n\n") end |
#items_for_discussions ⇒ Object
48 49 50 |
# File 'app/services/issues/build_service.rb', line 48 def items_for_discussions discussions_to_resolve.map { |discussion| item_for_discussion(discussion) } end |
#title_from_merge_request ⇒ Object
31 32 33 |
# File 'app/services/issues/build_service.rb', line 31 def title_from_merge_request "Follow-up from \"#{merge_request_to_resolve_discussions_of.title}\"" end |