From c4d18b05846b0ca05b6aa5306596478f71752e48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jarka=20Ko=C5=A1anov=C3=A1?= Date: Mon, 10 Dec 2018 12:51:21 +0100 Subject: Use parent instead of project Add support for group entities to quick actions --- app/services/quick_actions/interpret_service.rb | 41 ++++++++++++++++--------- 1 file changed, 27 insertions(+), 14 deletions(-) (limited to 'app/services/quick_actions/interpret_service.rb') diff --git a/app/services/quick_actions/interpret_service.rb b/app/services/quick_actions/interpret_service.rb index d248b10f41e..5c58caee8cd 100644 --- a/app/services/quick_actions/interpret_service.rb +++ b/app/services/quick_actions/interpret_service.rb @@ -2,6 +2,7 @@ module QuickActions class InterpretService < BaseService + include Gitlab::Utils::StrongMemoize include Gitlab::QuickActions::Dsl attr_reader :issuable @@ -210,15 +211,9 @@ module QuickActions end params '~label1 ~"label 2"' condition do - if project - available_labels = LabelsFinder - .new(current_user, project_id: project.id, include_ancestor_groups: true) - .execute - end - - project && - current_user.can?(:"admin_#{issuable.to_ability_name}", project) && - available_labels.any? + parent && + current_user.can?(:"admin_#{issuable.to_ability_name}", parent) && + find_labels.any? end command :label do |labels_param| label_ids = find_label_ids(labels_param) @@ -245,7 +240,7 @@ module QuickActions issuable.is_a?(Issuable) && issuable.persisted? && issuable.labels.any? && - current_user.can?(:"admin_#{issuable.to_ability_name}", project) + current_user.can?(:"admin_#{issuable.to_ability_name}", parent) end command :unlabel do |labels_param = nil| if labels_param.present? @@ -674,9 +669,25 @@ module QuickActions MilestonesFinder.new(params.merge(project_ids: [project.id], group_ids: [project.group&.id])).execute end - def find_labels(labels_param) - extract_references(labels_param, :label) | - LabelsFinder.new(current_user, project_id: project.id, name: labels_param.split, include_ancestor_groups: true).execute + def parent + project || group + end + + def group + strong_memoize(:group) do + issuable.group if issuable.respond_to?(:group) + end + end + + def find_labels(labels_params = nil) + finder_params = { include_ancestor_groups: true } + finder_params[:project_id] = project.id if project + finder_params[:group_id] = group.id if group + finder_params[:name] = labels_params.split if labels_params + + result = LabelsFinder.new(current_user, finder_params).execute + + extract_references(labels_params, :label) | result end def find_label_references(labels_param) @@ -707,9 +718,11 @@ module QuickActions # rubocop: disable CodeReuse/ActiveRecord def extract_references(arg, type) + return [] unless arg + ext = Gitlab::ReferenceExtractor.new(project, current_user) - ext.analyze(arg, author: current_user) + ext.analyze(arg, author: current_user, group: group) ext.references(type) end -- cgit v1.2.3