Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/serializers/suggestion_entity.rb')
-rw-r--r--app/serializers/suggestion_entity.rb31
1 files changed, 30 insertions, 1 deletions
diff --git a/app/serializers/suggestion_entity.rb b/app/serializers/suggestion_entity.rb
index 4fb19fbc074..c9fcbe14f2e 100644
--- a/app/serializers/suggestion_entity.rb
+++ b/app/serializers/suggestion_entity.rb
@@ -2,6 +2,7 @@
class SuggestionEntity < API::Entities::Suggestion
include RequestAwareEntity
+ include Gitlab::Utils::StrongMemoize
unexpose :from_line, :to_line, :from_content, :to_content
expose :diff_lines, using: DiffLineEntity do |suggestion|
@@ -9,7 +10,29 @@ class SuggestionEntity < API::Entities::Suggestion
end
expose :current_user do
expose :can_apply do |suggestion|
- Ability.allowed?(current_user, :apply_suggestion, suggestion)
+ can_apply?(suggestion)
+ end
+ end
+
+ expose :inapplicable_reason do |suggestion|
+ next _("You don't have write access to the source branch.") unless can_apply?(suggestion)
+ next if suggestion.appliable?
+
+ case suggestion.inapplicable_reason
+ when :merge_request_merged
+ _("This merge request was merged. To apply this suggestion, edit this file directly.")
+ when :merge_request_closed
+ _("This merge request is closed. To apply this suggestion, edit this file directly.")
+ when :source_branch_deleted
+ _("Can't apply as the source branch was deleted.")
+ when :outdated
+ phrase = suggestion.single_line? ? 'this line was' : 'these lines were'
+
+ _("Can't apply as %{phrase} changed in a more recent version.") % { phrase: phrase }
+ when :same_content
+ _("This suggestion already matches its content.")
+ else
+ _("Can't apply this suggestion.")
end
end
@@ -18,4 +41,10 @@ class SuggestionEntity < API::Entities::Suggestion
def current_user
request.current_user
end
+
+ def can_apply?(suggestion)
+ strong_memoize(:can_apply) do
+ Ability.allowed?(current_user, :apply_suggestion, suggestion)
+ end
+ end
end